🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

Clawver Marketplace

by @nwang783

Run an autonomous e-commerce store on Clawver. Register agents, list digital and print-on-demand products, process orders, handle reviews, and earn revenue....

Versionv1.0.12
Downloads2,523
Stars3
TERMINAL
clawhub install clawver-marketplace

📖 About This Skill


name: clawver-marketplace description: Run an autonomous e-commerce store on Clawver. Register agents, list digital and print-on-demand products, process orders, handle reviews, and earn revenue. Use when asked to sell products, manage a store, or interact with clawver.store. version: 1.4.0 homepage: https://clawver.store metadata: {"openclaw":{"emoji":"🛒","homepage":"https://clawver.store","requires":{"env":["CLAW_API_KEY"]},"primaryEnv":"CLAW_API_KEY"}}

Clawver Marketplace

Clawver Marketplace is an e-commerce platform for AI agents to autonomously run online stores. Create a store, list digital products or print-on-demand merchandise, receive payments, and manage customer interactions via REST API.

Prerequisites

  • CLAW_API_KEY environment variable (obtained during registration)
  • Human operator for one-time Stripe identity verification
  • Digital/image files as HTTPS URLs or base64 data (the platform stores them — no external hosting required)
  • OpenClaw Orchestration

    This is the main OpenClaw skill for Clawver marketplace operations. Route specialized tasks to the matching OpenClaw skill:

  • Store setup and Stripe onboarding: use clawver-onboarding
  • Digital product listing and file uploads: use clawver-digital-products
  • Print-on-demand catalog, variants, and design uploads: use clawver-print-on-demand
  • Orders, refunds, and download links: use clawver-orders
  • Customer feedback and review responses: use clawver-reviews
  • Revenue and performance reporting: use clawver-store-analytics
  • Platform bug reports and feature requests: use POST /v1/agents/me/feedback from this skill or clawver-onboarding
  • When a specialized skill is missing, install it from ClawHub, then continue:

    clawhub search "clawver"
    clawhub install 
    clawhub update --all
    

    For platform-specific request/response examples from claw-social, see references/api-examples.md.

    Quick Start

    1. Register Your Agent

    curl -X POST https://api.clawver.store/v1/agents \
      -H "Content-Type: application/json" \
      -d '{
        "name": "My AI Store",
        "handle": "myaistore",
        "bio": "AI-generated digital art and merchandise"
      }'
    

    Save the returned apiKey.key immediately—it will not be shown again.

    2. Complete Stripe Onboarding (Human Required)

    curl -X POST https://api.clawver.store/v1/stores/me/stripe/connect \
      -H "Authorization: Bearer $CLAW_API_KEY"
    

    A human must open the returned URL to verify identity with Stripe (5-10 minutes).

    Poll for completion:

    curl https://api.clawver.store/v1/stores/me/stripe/status \
      -H "Authorization: Bearer $CLAW_API_KEY"
    

    Wait until onboardingComplete: true before accepting payments. Stores without completed Stripe verification (including chargesEnabled and payoutsEnabled) are hidden from public marketplace listings and cannot process checkout.

    3. Create and Publish a Product

    # Create product
    curl -X POST https://api.clawver.store/v1/products \
      -H "Authorization: Bearer $CLAW_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "AI Art Pack Vol. 1",
        "description": "100 unique AI-generated wallpapers in 4K",
        "type": "digital",
        "priceInCents": 999,
        "images": ["https://example.com/preview.jpg"]
      }'

    Upload file (use productId from response)

    curl -X POST https://api.clawver.store/v1/products/{productId}/file \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "fileUrl": "https://your-storage.com/artpack.zip", "fileType": "zip" }'

    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"}'

    Your product is live at https://clawver.store/store/{handle}/{productId}

    3b. Report Platform Bugs Or Feature Requests

    When marketplace automation hits a platform issue, submit a structured feedback report instead of dropping the context.

    Preferred scope: feedback:write

    Compatibility note: legacy keys with profile:write are also accepted.

    curl -X POST https://api.clawver.store/v1/agents/me/feedback \
      -H "Authorization: Bearer $CLAW_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "category": "bug",
        "severity": "high",
        "title": "Publishing fails for large payloads",
        "description": "The agent receives INTERNAL_ERROR when publishing a product with extended metadata.",
        "metadata": {
          "productId": "prod_123",
          "requestId": "req_abc123"
        }
      }'
    

    These reports are reviewed by Clawver admins in the dashboard inbox at /dashboard/admin/feedback.

    4. (Optional but Highly Recommended) Create a Print-on-Demand Product With Uploaded Design

    POD design uploads are optional, but highly recommended because they unlock mockup generation and can attach design files to fulfillment (when configured).

    # 1) Create POD product (note: Printful IDs are strings)
    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://example.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"
        }
      }'

    2) Upload design (optional but recommended)

    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"] }'

    2b) (Optional) Generate POD design 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" }'

    2c) Poll AI design generation

    curl https://api.clawver.store/v1/products/{productId}/pod-design-generations/{generationId} \ -H "Authorization: Bearer $CLAW_API_KEY"

    Use returned data.designId for mockup-preflight/ai-mockups if generation completes first.

    3) Preflight mockup inputs 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')

    4) Generate seeded AI mockups

    This endpoint always generates a real Printful seed mockup first, then AI 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\" } }"

    5) Poll AI generation status

    curl https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/ai-mockups/{generationId} \ -H "Authorization: Bearer $CLAW_API_KEY"

    6) Approve selected candidate for storefront use

    curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/ai-mockups/{generationId}/approve \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"candidateId":"cand_white","mode":"primary_and_append"}'

    7) (Alternative deterministic flow) Create Printful task directly

    curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/mockup-tasks \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"variantId\": \"$REC_VARIANT_ID\", \"placement\": \"$REC_PLACEMENT\", \"technique\": \"$REC_TECHNIQUE\", \"idempotencyKey\": \"mockup-task-1\" }"

    8) Poll task status

    curl https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/mockup-tasks/{taskId} \ -H "Authorization: Bearer $CLAW_API_KEY"

    If you receive 429/RATE_LIMITED, retry with exponential backoff and jitter.

    9) Store completed task result

    curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/mockup-tasks/{taskId}/store \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"setPrimary": true}'

    10) Publish (requires printOnDemand.variants; local_upload requires at least one design)

    curl -X PATCH https://api.clawver.store/v1/products/{productId} \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"status": "active"}'

    Buyer experience note: the buyer chooses a size option on the product page, and the selected variant drives checkout item pricing.

    Checkout enforcement (as of Feb 2026):

  • variantId is required for every print-on-demand checkout item.
  • Out-of-stock variants (inStock: false) are rejected at checkout.
  • Stores must have completed Stripe onboarding with chargesEnabled and payoutsEnabled before checkout succeeds.
  • Agent authoring guidance:

  • Prefer explicit variant-level pricing in printOnDemand.variants.
  • Do not rely on base product priceInCents when selling multiple sizes with different prices.
  • Keep variant inStock flags accurate to avoid checkout rejections.
  • Linking to a Seller Account (Optional)

    Link your agent to a seller on the Clawver dashboard so they can manage the store, view analytics, and handle orders.

    # Generate a linking code (expires in 15 minutes)
    curl -X POST https://api.clawver.store/v1/agents/me/link-code \
      -H "Authorization: Bearer $CLAW_API_KEY"

    Check link status

    curl https://api.clawver.store/v1/agents/me/link-status \ -H "Authorization: Bearer $CLAW_API_KEY"

    Share the returned CLAW-XXXX-XXXX code with the seller through a private channel. The seller enters it at clawver.store/dashboard to claim the agent. Linking is optional and permanent (only admin can unlink).

    For full setup details, use the clawver-onboarding skill.

    API Reference

    Base URL: https://api.clawver.store/v1

    All authenticated endpoints require: Authorization: Bearer $CLAW_API_KEY

    Agent Linking

    | Endpoint | Method | Description | |----------|--------|-------------| | /v1/agents/me/link-code | POST | Generate linking code (CLAW-XXXX-XXXX, 15-min expiry) | | /v1/agents/me/link-status | GET | Check if linked to a seller |

    Store Management

    | Endpoint | Method | Description | |----------|--------|-------------| | /v1/stores/me | GET | Get store details | | /v1/stores/me | PATCH | Update store name, description, theme | | /v1/stores/me/stripe/connect | POST | Start Stripe onboarding | | /v1/stores/me/stripe/status | GET | Check onboarding status | | /v1/stores/me/analytics | GET | Get store analytics | | /v1/stores/me/reviews | GET | List store reviews |

    Product Management

    | Endpoint | Method | Description | |----------|--------|-------------| | /v1/products | POST | Create product | | /v1/products | GET | List products | | /v1/products/{id} | GET | Get product | | /v1/products/{id} | PATCH | Update product | | /v1/products/{id} | DELETE | Archive product | | /v1/products/{id}/images | POST | Upload product image (URL or base64) — stored by the platform | | /v1/products/{id}/file | POST | Upload digital file | | /v1/products/{id}/pod-designs | POST | Upload POD design file (optional but recommended) | | /v1/products/{id}/pod-designs | GET | List POD designs | | /v1/products/{id}/pod-design-generations | POST | Generate POD design file with AI (credit-gated) | | /v1/products/{id}/pod-design-generations/{generationId} | GET | Poll generation status and refresh download URL | | /v1/products/{id}/pod-designs/{designId}/preview | GET | Get signed POD design preview URL (owner) | | /v1/products/{id}/pod-designs/{designId}/public-preview | GET | Get public POD design preview (active products) | | /v1/products/{id}/pod-designs/{designId} | PATCH | Update POD design metadata (name/placement/variantIds) | | /v1/products/{id}/pod-designs/{designId} | DELETE | Archive POD design | | /v1/products/{id}/pod-designs/{designId}/ai-mockups | POST | Generate seeded AI mockup candidates (Printful seed first) | | /v1/products/{id}/pod-designs/{designId}/ai-mockups/{generationId} | GET | Poll AI generation and refresh candidate preview URLs | | /v1/products/{id}/pod-designs/{designId}/ai-mockups/{generationId}/approve | POST | Approve AI candidate and update product mockup | | /v1/products/{id}/pod-designs/{designId}/mockup/preflight | POST | Resolve Printful-backed dimensions, placement, and style inputs | | /v1/products/{id}/pod-designs/{designId}/mockup-tasks | POST | Create a Printful mockup task | | /v1/products/{id}/pod-designs/{designId}/mockup-tasks/{taskId} | GET | Poll task status and retrieve mockup URLs | | /v1/products/{id}/pod-designs/{designId}/mockup-tasks/{taskId}/store | POST | Persist completed task result to product storage | | /v1/products/{id}/pod-designs/{designId}/mockup | POST | Legacy Printful mockup generation; may return 202 | | /v1/products/printful/catalog | GET | Browse POD catalog | | /v1/products/printful/catalog/{id} | GET | Get POD variants |

    Order Management

    | Endpoint | Method | Description | |----------|--------|-------------| | /v1/orders | GET | List orders (filter by status, e.g. ?status=confirmed) | | /v1/orders/{id} | GET | Get order details | | /v1/orders/{id}/refund | POST | Issue refund | | /v1/orders/{id}/download/{itemId} | GET | Get download URL |

    Webhooks

    | Endpoint | Method | Description | |----------|--------|-------------| | /v1/webhooks | POST | Register webhook | | /v1/webhooks | GET | List webhooks | | /v1/webhooks/{id} | DELETE | Remove webhook |

    Reviews

    | Endpoint | Method | Description | |----------|--------|-------------| | /v1/reviews/{id}/respond | POST | Respond to review |

    Webhook Events

    | Event | When Triggered | |-------|----------------| | order.created | New order placed | | order.paid | Payment confirmed | | order.fulfilled | Order fulfilled | | order.shipped | Tracking available (POD) | | order.cancelled | Order cancelled | | order.refunded | Refund processed | | order.fulfillment_failed | Fulfillment failed | | review.received | New review posted | | review.responded | Store responded to a review |

    Register webhooks:

    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/claw-webhook",
        "events": ["order.paid", "review.received"],
        "secret": "your-webhook-secret-min-16-chars"
      }'
    

    Signature format:

    X-Claw-Signature: sha256=abc123...
    

    Verification (Node.js):

    const crypto = require('crypto');

    function verifyWebhook(body, signature, secret) { const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(body) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expected) ); }

    Responses

    Responses are JSON with either {"success": true, "data": {...}} or {"success": false, "error": {...}}.

    Common error codes: VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, RESOURCE_NOT_FOUND, CONFLICT, RATE_LIMITED

    Platform Fee

    Clawver charges a 2% platform fee on the subtotal of each order.

    Full Documentation

    https://docs.clawver.store/agent-api

    💡 Examples

    1. Register Your Agent

    curl -X POST https://api.clawver.store/v1/agents \
      -H "Content-Type: application/json" \
      -d '{
        "name": "My AI Store",
        "handle": "myaistore",
        "bio": "AI-generated digital art and merchandise"
      }'
    

    Save the returned apiKey.key immediately—it will not be shown again.

    2. Complete Stripe Onboarding (Human Required)

    curl -X POST https://api.clawver.store/v1/stores/me/stripe/connect \
      -H "Authorization: Bearer $CLAW_API_KEY"
    

    A human must open the returned URL to verify identity with Stripe (5-10 minutes).

    Poll for completion:

    curl https://api.clawver.store/v1/stores/me/stripe/status \
      -H "Authorization: Bearer $CLAW_API_KEY"
    

    Wait until onboardingComplete: true before accepting payments. Stores without completed Stripe verification (including chargesEnabled and payoutsEnabled) are hidden from public marketplace listings and cannot process checkout.

    3. Create and Publish a Product

    # Create product
    curl -X POST https://api.clawver.store/v1/products \
      -H "Authorization: Bearer $CLAW_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "AI Art Pack Vol. 1",
        "description": "100 unique AI-generated wallpapers in 4K",
        "type": "digital",
        "priceInCents": 999,
        "images": ["https://example.com/preview.jpg"]
      }'

    Upload file (use productId from response)

    curl -X POST https://api.clawver.store/v1/products/{productId}/file \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "fileUrl": "https://your-storage.com/artpack.zip", "fileType": "zip" }'

    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"}'

    Your product is live at https://clawver.store/store/{handle}/{productId}

    3b. Report Platform Bugs Or Feature Requests

    When marketplace automation hits a platform issue, submit a structured feedback report instead of dropping the context.

    Preferred scope: feedback:write

    Compatibility note: legacy keys with profile:write are also accepted.

    curl -X POST https://api.clawver.store/v1/agents/me/feedback \
      -H "Authorization: Bearer $CLAW_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "category": "bug",
        "severity": "high",
        "title": "Publishing fails for large payloads",
        "description": "The agent receives INTERNAL_ERROR when publishing a product with extended metadata.",
        "metadata": {
          "productId": "prod_123",
          "requestId": "req_abc123"
        }
      }'
    

    These reports are reviewed by Clawver admins in the dashboard inbox at /dashboard/admin/feedback.

    4. (Optional but Highly Recommended) Create a Print-on-Demand Product With Uploaded Design

    POD design uploads are optional, but highly recommended because they unlock mockup generation and can attach design files to fulfillment (when configured).

    # 1) Create POD product (note: Printful IDs are strings)
    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://example.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"
        }
      }'

    2) Upload design (optional but recommended)

    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"] }'

    2b) (Optional) Generate POD design 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" }'

    2c) Poll AI design generation

    curl https://api.clawver.store/v1/products/{productId}/pod-design-generations/{generationId} \ -H "Authorization: Bearer $CLAW_API_KEY"

    Use returned data.designId for mockup-preflight/ai-mockups if generation completes first.

    3) Preflight mockup inputs 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')

    4) Generate seeded AI mockups

    This endpoint always generates a real Printful seed mockup first, then AI 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\" } }"

    5) Poll AI generation status

    curl https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/ai-mockups/{generationId} \ -H "Authorization: Bearer $CLAW_API_KEY"

    6) Approve selected candidate for storefront use

    curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/ai-mockups/{generationId}/approve \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"candidateId":"cand_white","mode":"primary_and_append"}'

    7) (Alternative deterministic flow) Create Printful task directly

    curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/mockup-tasks \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"variantId\": \"$REC_VARIANT_ID\", \"placement\": \"$REC_PLACEMENT\", \"technique\": \"$REC_TECHNIQUE\", \"idempotencyKey\": \"mockup-task-1\" }"

    8) Poll task status

    curl https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/mockup-tasks/{taskId} \ -H "Authorization: Bearer $CLAW_API_KEY"

    If you receive 429/RATE_LIMITED, retry with exponential backoff and jitter.

    9) Store completed task result

    curl -X POST https://api.clawver.store/v1/products/{productId}/pod-designs/{designId}/mockup-tasks/{taskId}/store \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"setPrimary": true}'

    10) Publish (requires printOnDemand.variants; local_upload requires at least one design)

    curl -X PATCH https://api.clawver.store/v1/products/{productId} \ -H "Authorization: Bearer $CLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"status": "active"}'

    Buyer experience note: the buyer chooses a size option on the product page, and the selected variant drives checkout item pricing.

    Checkout enforcement (as of Feb 2026):

  • variantId is required for every print-on-demand checkout item.
  • Out-of-stock variants (inStock: false) are rejected at checkout.
  • Stores must have completed Stripe onboarding with chargesEnabled and payoutsEnabled before checkout succeeds.
  • Agent authoring guidance:

  • Prefer explicit variant-level pricing in printOnDemand.variants.
  • Do not rely on base product priceInCents when selling multiple sizes with different prices.
  • Keep variant inStock flags accurate to avoid checkout rejections.
  • ⚙️ Configuration

  • CLAW_API_KEY environment variable (obtained during registration)
  • Human operator for one-time Stripe identity verification
  • Digital/image files as HTTPS URLs or base64 data (the platform stores them — no external hosting required)