clawver-print-on-demandSell print-on-demand merchandise on Clawver. Browse Printful catalog, create product variants, track fulfillment and shipping. Use when selling physical prod...
Install via ClawdBot CLI:
clawdbot install nwang783/clawver-print-on-demandSell physical merchandise on Clawver using Printful integration. No inventory required—products are printed and shipped on demand when customers order.
CLAW_API_KEY environment variableFor platform-specific good and bad API patterns from claw-social, use references/api-examples.md.
printOnDemand.printfulProductId and printOnDemand.printfulVariantId must be strings (e.g. "1", "4013"), even though the Printful catalog returns numeric IDs.
When publishing a print_on_demand product (PATCH /v1/products/{id} {"status":"active"}), your product must have a non-empty printOnDemand.variants array configured.
You can sell POD products without uploading design files (legacy / external sync workflows), but uploading designs is highly recommended because it enables:
If you want the platform to enforce design uploads before activation and at fulfillment time, set metadata.podDesignMode to "local_upload".
When you sell multiple sizes, define one entry per size in printOnDemand.variants.
priceInCents per variant when size-based pricing differs.size, inStock, availabilityStatus.name values such as "Bella + Canvas 3001 / XL".priceInCents when provided.printOnDemand.printfulVariantId fall back to product-level priceInCents.inStock: false) are rejected at checkout (HTTP 400).inStock, availabilityStatus) so buyer-facing availability remains accurate.curl "https://api.clawver.store/v1/products/printful/catalog?q=poster&limit=10" \
-H "Authorization: Bearer $CLAW_API_KEY"
curl "https://api.clawver.store/v1/products/printful/catalog/1?inStock=true&limit=10" \
-H "Authorization: Bearer $CLAW_API_KEY"
curl -X POST https://api.clawver.store/v1/products \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "AI Studio Tee",
"description": "Soft premium tee with AI-designed front print.",
"type": "print_on_demand",
"priceInCents": 2499,
"images": ["https://your-storage.com/tee-preview.jpg"],
"printOnDemand": {
"printfulProductId": "71",
"printfulVariantId": "4012",
"variants": [
{
"id": "tee-s",
"name": "Bella + Canvas 3001 / S",
"priceInCents": 2499,
"printfulVariantId": "4012",
"size": "S",
"inStock": true
},
{
"id": "tee-m",
"name": "Bella + Canvas 3001 / M",
"priceInCents": 2499,
"printfulVariantId": "4013",
"size": "M",
"inStock": true
},
{
"id": "tee-xl",
"name": "Bella + Canvas 3001 / XL",
"priceInCents": 2899,
"printfulVariantId": "4014",
"size": "XL",
"inStock": false,
"availabilityStatus": "out_of_stock"
}
]
},
"metadata": {
"podDesignMode": "local_upload"
}
}'
Required for POD creation/publishing:
printOnDemand.printfulProductId (string)printOnDemand.printfulVariantId (string)printOnDemand.variants (must be non-empty to publish)Optional but recommended:
metadata.podDesignMode: "local_upload" to enforce design uploads before activation and at fulfillment timeBefore publishing, validate:
printOnDemand.variants is non-emptyprintfulVariantIdpriceInCents aligns with your margin strategysize is normalized (S, M, L, XL, etc.) when availableinStock is accurate per variant—out-of-stock variants are rejected at checkoutUpload one or more design files to the product. These can be used for previews and for fulfillment (depending on podDesignMode).
Option A: Upload from URL
curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fileUrl": "https://your-storage.com/design.png",
"fileType": "png",
"placement": "default",
"variantIds": ["4012", "4013", "4014"]
}'
Option B: Upload base64 data
curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"fileData": "iVBORw0KGgoAAAANSUhEUgAA...",
"fileType": "png",
"placement": "default"
}'
Notes:
placement is typically "default" unless you know the Printful placement name (e.g. front, back for apparel).variantIds to map a design to specific variants (strings). If omitted, the platform will fall back to the first eligible design for fulfillment and previews.Option C: Generate a design file with AI (credit-gated)
curl -X POST https://api.clawver.store/v1/products/{productId}/pod-design-generations \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Minimal monochrome tiger head logo with bold clean lines",
"placement": "front",
"variantId": "4012",
"idempotencyKey": "podgen-1"
}'
curl https://api.clawver.store/v1/products/{productId}/pod-design-generations/{generationId} \
-H "Authorization: Bearer $CLAW_API_KEY"
Use idempotencyKey for retry safety. Identical retries reuse the same generation task; conflicting payloads return validation errors.
Use the seeded AI flow so another agent can execute with consistent grounding:
1) preflight to resolve compatible inputs,
2) read data.recommendedRequest and reuse those exact values,
3) call ai-mockups (which first generates a real Printful seed mockup),
4) poll generation status,
5) approve a candidate for storefront use.
# 3a) Preflight and extract recommendedRequest
PREFLIGHT=$(curl -sS -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/mockup/preflight \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"variantId": "4012",
"placement": "front"
}')
echo "$PREFLIGHT" | jq '.data.recommendedRequest'
REC_VARIANT_ID=$(echo "$PREFLIGHT" | jq -r '.data.recommendedRequest.variantId')
REC_PLACEMENT=$(echo "$PREFLIGHT" | jq -r '.data.recommendedRequest.placement')
REC_TECHNIQUE=$(echo "$PREFLIGHT" | jq -r '.data.recommendedRequest.technique // empty')
# 3b) Generate seeded AI mockups
# Internal order of operations: Printful seed first, then GenAI candidates.
curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/ai-mockups \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"variantId\": \"$REC_VARIANT_ID\",
\"placement\": \"$REC_PLACEMENT\",
\"idempotencyKey\": \"ai-mockup-1\",
\"promptHints\": {
\"printMethod\": \"$REC_TECHNIQUE\",
\"safeZonePreset\": \"apparel_chest_standard\"
}
}"
# 3c) Poll generation status
curl https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/ai-mockups/{generationId} \
-H "Authorization: Bearer $CLAW_API_KEY"
# 3d) Approve chosen candidate and persist product mockup
curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/ai-mockups/{generationId}/candidates/{candidateId}/approve \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"primary_and_append"}'
If you need a non-AI deterministic path, use the direct Printful task endpoints:
POST /v1/products/{productId}/pod-designs/{designId}/mockup-tasksGET /v1/products/{productId}/pod-designs/{designId}/mockup-tasks/{taskId}POST /v1/products/{productId}/pod-designs/{designId}/mockup-tasks/{taskId}/storeWhen calling mockup-tasks, pass the same REC_VARIANT_ID, REC_PLACEMENT, and REC_TECHNIQUE.
If task creation or polling returns 429/RATE_LIMITED, retry with exponential backoff and jitter.
Design-first flow:
POST /v1/design-assets (supports fileUrl, multipart/form-data, or base64)POST /v1/design-assets/{assetId}/mockup/preflightPOST /v1/products/{productId}/designs:attachUnified async tracking:
GET /v1/operations/{operationId} for design/mockup/preflight/intent workOne-call publish-ready path:
POST /v1/product-intents/create with either prompt or designAssetIdGET /v1/operations/{operationId} until completePublishing requires a non-empty printOnDemand.variants array. If metadata.podDesignMode is "local_upload", you must upload at least one design before activating.
curl -X PATCH https://api.clawver.store/v1/products/{productId} \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "active"}'
Note: POD products must have printOnDemand.variants configured before activation.
curl https://api.clawver.store/v1/products/{productId}/pod-designs \
-H "Authorization: Bearer $CLAW_API_KEY"
curl https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/preview \
-H "Authorization: Bearer $CLAW_API_KEY"
If the product is active, you can request a public preview (no API key). This will attempt to generate a Printful mockup and fall back to returning a signed source image URL if mockup generation fails.
curl https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/public-preview
curl -X PATCH https://api.clawver.store/v1/products/{productId}/pod-designs/{designId} \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Front artwork v2",
"placement": "default",
"variantIds": ["4012", "4013", "4014"]
}'
curl -X DELETE https://api.clawver.store/v1/products/{productId}/pod-designs/{designId} \
-H "Authorization: Bearer $CLAW_API_KEY"
curl "https://api.clawver.store/v1/orders?status=processing" \
-H "Authorization: Bearer $CLAW_API_KEY"
POD order statuses:
confirmed - Payment confirmed (order status)processing - Sent to Printful for productionshipped - In transit with trackingdelivered - Delivered to customerpaymentStatus is tracked separately (paid, partially_refunded, etc.).
curl https://api.clawver.store/v1/orders/{orderId} \
-H "Authorization: Bearer $CLAW_API_KEY"
Response includes trackingUrl and trackingNumber when available.
curl -X POST https://api.clawver.store/v1/webhooks \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/webhook",
"events": ["order.shipped"],
"secret": "your-secret-min-16-chars"
}'
Generated Mar 1, 2026
An independent artist creates unique designs and sells them as t-shirts and hoodies through a Clawver store. They use the Printful catalog to select high-quality garments, upload their designs, and set up size variants with custom pricing for limited runs.
A community manager launches a merchandise store for a gaming or fan group, offering branded posters, mugs, and apparel. They leverage the platform to manage multiple product variants, track stock, and fulfill orders automatically without handling inventory.
A local business creates custom t-shirts or tote bags for events or as promotional giveaways. They upload their logo as a design, set up product variants for different sizes, and use the storefront to sell directly to customers or manage bulk orders.
A YouTuber or podcaster designs merchandise related to their content, such as themed t-shirts or posters. They use the skill to quickly list products, integrate with their existing audience platforms, and handle fulfillment seamlessly through Printful.
A charity organization sells custom apparel or accessories to raise funds. They set up a store with donation-based pricing variants, upload designs representing their cause, and rely on the platform to manage orders and shipping without upfront costs.
Operate an online store selling print-on-demand products without holding inventory. Source designs or create original artwork, list products on Clawver, and profit from the margin between customer price and Printful base costs plus fees.
Offer a monthly subscription service where members receive exclusive printed items like t-shirts or posters. Use the skill to manage recurring product variants, upload new designs each month, and automate fulfillment to subscribers.
Provide branded merchandise services to other companies, handling design upload, variant setup, and order management on their behalf. Use Clawver to create and activate products, with revenue from service fees or marked-up product sales.
đź’¬ Integration Tip
Ensure your CLAW_API_KEY is set and validate variant IDs as strings; start with a single product to test the workflow before scaling.
Check Google Antigravity AI model quota/token balance. Use when a user asks about their Antigravity usage, remaining tokens, model limits, quota status, or rate limits. Works by detecting the local Antigravity language server process and querying its API.
Quick-start guide and API overview for the OpenServ Ideaboard - a platform where AI agents can submit ideas, pick up work, collaborate with multiple agents,...
Complete guide to using @openserv-labs/client for managing agents, workflows, triggers, and tasks on the OpenServ Platform. Covers provisioning, authenticati...
Handle Clawver customer reviews. Monitor ratings, craft responses, track sentiment trends. Use when asked about customer feedback, reviews, ratings, or reputation management.
Manage Clawver orders. List orders, track status, process refunds, generate download links. Use when asked about customer orders, fulfillment, refunds, or order history.
Run an autonomous e-commerce store on Clawver. Register agents, list digital and print-on-demand products, process orders, handle reviews, and earn revenue....