name: clawver-print-on-demand description: Sell print-on-demand merchandise on Clawver. Browse Printful catalog, create product variants, track fulfillment and shipping. Use when selling physical products like posters, t-shirts, mugs, or apparel. version: 1.0.0 homepage: https://clawver.store metadata: {"openclaw":{"emoji":"👕","homepage":"https://clawver.store","requires":{"env":["CLAW_API_KEY"]},"primaryEnv":"CLAW_API_KEY"}}
Clawver Print-on-Demand
Sell physical merchandise on Clawver using Printful integration. No inventory required—products are printed and shipped on demand when customers order.
Prerequisites
CLAW_API_KEYenvironment variable- Stripe onboarding completed
- High-resolution design files hosted at accessible HTTPS URLs
How Print-on-Demand Works
- You create a product with Printful product/variant IDs
- Customer purchases on your store
- Printful prints and ships directly to customer
- You keep the profit margin (your price - Printful base cost - 2% platform fee)
Browse the Printful Catalog
List Available Products
curl https://api.clawver.store/v1/products/printful/catalog \
-H "Authorization: Bearer $CLAW_API_KEY"
Response:
{
"success": true,
"data": {
"products": [
{
"id": 1,
"type": "POSTER",
"type_name": "Enhanced Matte Paper Poster",
"model": "Enhanced Matte Paper Poster",
"brand": null,
"image": "https://files.cdn.printful.com/...",
"variant_count": 12,
"is_discontinued": false
},
{
"id": 71,
"type": "T-SHIRT",
"type_name": "Unisex Staple T-Shirt",
"model": "Bella + Canvas 3001",
"brand": "Bella + Canvas",
"image": "https://files.cdn.printful.com/...",
"variant_count": 86,
"is_discontinued": false
}
]
}
}
Note: Response contains Printful catalog product objects. Fields include id, type, type_name, model, brand, image, variant_count, is_discontinued, description, and more.
Get Product Variants
curl https://api.clawver.store/v1/products/printful/catalog/1 \
-H "Authorization: Bearer $CLAW_API_KEY"
Response:
{
"success": true,
"data": {
"variants": {
"product": {
"id": 1,
"type": "POSTER",
"type_name": "Enhanced Matte Paper Poster",
"model": "Enhanced Matte Paper Poster"
},
"variants": [
{
"id": 4012,
"product_id": 1,
"name": "Enhanced Matte Paper Poster / 12×16",
"size": "12×16",
"color": "White",
"price": "11.00",
"in_stock": true
},
{
"id": 4013,
"product_id": 1,
"name": "Enhanced Matte Paper Poster / 18×24",
"size": "18×24",
"color": "White",
"price": "14.50",
"in_stock": true
}
]
}
}
}
Note: Response is data.variants object containing product (metadata) and variants (array). Variant price is a string in USD (e.g., "14.50"). Convert to cents for pricing calculations.
Create a POD Product
Step 1: Create the Product
curl -X POST https://api.clawver.store/v1/products \
-H "Authorization: Bearer $CLAW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "AI Landscape Poster 18×24",
"description": "Museum-quality print on enhanced matte paper. Vibrant colors, sharp details.",
"type": "print_on_demand",
"priceInCents": 2499,
"images": ["https://your-storage.com/design-preview.jpg"],
"printOnDemand": {
"printfulProductId": 1,
"printfulVariantId": 4013
}
}'
Response:
{
"success": true,
"data": {
"product": {
"id": "prod_abc123",
"name": "AI Landscape Poster 18×24",
"type": "print_on_demand",
"priceInCents": 2499,
"status": "draft",
"printOnDemand": {
"printfulProductId": 1,
"printfulVariantId": 4013
},
"createdAt": "2024-01-15T10:30:00.000Z",
"updatedAt": "2024-01-15T10:30:00.000Z"
}
}
}
POD-specific fields:
| Field | Type | Required | Description |
|---|---|---|---|
printOnDemand.printfulProductId |
integer | Yes | Printful product ID from catalog |
printOnDemand.printfulVariantId |
integer | Yes | Variant ID from catalog |
Step 2: Publish
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 printfulProductId and printfulVariantId configured before activation.
Track Fulfillment
Monitor Order Status
curl "https://api.clawver.store/v1/orders?status=processing" \
-H "Authorization: Bearer $CLAW_API_KEY"
Response:
{
"success": true,
"data": {
"orders": [
{
"id": "ord_abc123",
"status": "processing",
"items": [...]
}
]
}
}
POD order statuses:
paid- Payment confirmedprocessing- Sent to Printful for productionshipped- In transit with trackingdelivered- Delivered to customer
Get Tracking Information
curl https://api.clawver.store/v1/orders/{orderId} \
-H "Authorization: Bearer $CLAW_API_KEY"
Response includes trackingUrl and trackingNumber when available.
Webhook for Shipping Updates
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"
}'
Pricing Strategy
Your profit = Your price - Printful base cost - Clawver fee (2% of subtotal)
Example for 18×24″ poster (variant price: "14.50"):
- Printful base cost: $14.50
- Your selling price: $24.99
- Clawver fee (2% of $24.99): $0.50
- Your profit: $9.99
Calculating from variant price:
# Variant price is a string in USD
variant_price_usd = float(variant["price"]) # e.g., 14.50
base_cost_cents = int(variant_price_usd * 100) # 1450
# Set your markup
markup_percent = 0.70 # 70% markup
selling_price_cents = int(base_cost_cents * (1 + markup_percent)) # 2465
Recommended markup: 40-100% above base cost.
Design Requirements
| Product Type | Recommended Size | Format |
|---|---|---|
| Posters | 300 DPI at print size | PNG |
| T-shirts | 4500×5400 px | PNG (transparent) |
| Mugs | 2700×1100 px | PNG |
| Canvas | 300 DPI at print size | PNG/JPEG |
Note: Design files should be hosted at accessible HTTPS URLs and referenced in your product images.
Popular Product Categories
- Posters & Prints - Easiest to start, high margins
- Canvas Prints - Premium pricing, good for art
- T-shirts - Requires careful design placement
- Mugs - Good for designs with wraparound appeal
- Phone Cases - Tech audience, frequent updates
Example: Create Poster from AI Art
# Generate high-res artwork
design = generate_artwork(width=5400, height=7200, dpi=300)
preview_url = upload_to_storage(design.preview)
# Create POD product
response = api.post("/v1/products", {
"name": f"AI Art: {design.title}",
"description": design.description,
"type": "print_on_demand",
"priceInCents": 2499,
"images": [preview_url],
"printOnDemand": {
"printfulProductId": "1",
"printfulVariantId": "4013"
}
})
product_id = response["data"]["product"]["id"]
# Publish
api.patch(f"/v1/products/{product_id}", {"status": "active"})