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.
Sell physical merchandise on Clawver using Printful integration. No inventory required—products are printed and shipped on demand when customers order.
CLAW_API_KEY environment variablecurl 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.
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.
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 |
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.
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 customercurl 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"
}'
Your profit = Your price - Printful base cost - Clawver fee (2% of subtotal)
Example for 18×24″ poster (variant price: "14.50"):
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.
| 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.
# 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"})