Skip to content
Overview

Skuvix API

Submit a product page URL you are authorized to use and receive structured draft data for review. Access depends on the source page and its permissions.

  • Connect your Shopify store via OAuth
  • Submit a product page URL you are authorized to use and receive structured draft data for review. Access depends on the source page and its permissions.
  • Enhance product data with AI (title, description, tags, pricing)
  • Publish optimized listings directly to Shopify
  • Manage subscriptions and billing via Stripe
Authentication

OAuth 2.0

Sign in with Google to get started. Sessions are managed via HTTP-only cookies — no API key needed for browser usage. For server-to-server calls, use JWT bearer tokens.

Authorization: Bearer <YOUR_JWT_TOKEN>

Registering

POST /api/auth/register
Body: { "email": "...", "name": "...", "password": "..." }
Response: { "success": true, "userId": "..." }

Logging in

POST /api/auth/login
Body: { "email": "...", "password": "..." }
Response: { "success": true, "user": { "id", "email", "name", "plan" } }
Product Import

Import a product

Submit a product page URL you are authorized to use and receive structured draft data for review. Access depends on the source page and its permissions.

POST /api/import
Authorization: Bearer <token>
Content-Type: application/json
Body: { "url": "https://...", "projectId": "..." }

Response: {
  "success": true,
  "data": {
    "importJobId": "job_...",
    "product": {
      "id": "...",
      "title": "...",
      "description": "...",
      "price": "29.99",
      "currency": "USD",
      "image": "https://...",
      "images": [...],
      "variants": [...],
      "confidenceScore": 0.92
    }
  }
}

Demo import (no URL needed)

POST /api/import/demo
Authorization: Bearer <token>
Body: {}

Response: { "success": true, "data": { "jobId": "...", "product": {...} } }

Import limits

PlanProduct Drafts / monthAI Enrichment
Free5 / 30 daysLimited
Starter100 Product Drafts120 Creation Credits
Pro500 Product Drafts420 Creation Credits + Standard videos
Team2,000 Product Drafts1,200 shared Creation Credits + team wallet
Publishing

Publish to Shopify

Once a product is imported and enriched, publish it to your connected Shopify store. The API handles variant mapping, image upload, and inventory sync.

POST /api/products/{productId}/publish
Authorization: Bearer <token>
Body: { "storeId": "store_..." }

Response: {
  "success": true,
  "data": {
    "publishJobId": "job_...",
    "remoteProductId": "819...",
    "status": "CREATED"
  }
}
POST /api/publish-jobs/{jobId}/run
Response: { "success": true, "data": { "status": "SUCCESS" } }

Getting products

GET /api/products?projectId=...
Response: { "success": true, "data": [...products] }

GET /api/products/{id}
Response: { "success": true, "data": { ...product, variants, options } }
AI Enrichment

AI product optimization

Use AI to rewrite titles, descriptions, and generate tags for better Shopify SEO. Powered by Doubao Seed 1.8 model — multi-modal, optimized for product data.

POST /api/ai/enrich
Authorization: Bearer <token>
Body: {
  "title": "Womens Casual Short Sleeve Floral Print Round Neck O-Neck T-Shirt",
  "description": "...",
  "images": ["https://..."],
  "model": "doubao-seed-1-8-251228"
}

Response: {
  "success": true,
  "data": {
    "optimizedTitle": "Women's Casual Floral Print Tee – Lightweight Summer Top",
    "rewrittenDescription": "...",
    "tags": ["summer", "casual", "floral", "t-shirt", "women"],
    "suggestedPrice": 24.99
  }
}

Translation

POST /api/ai/translate
Body: {
  "title": "...",
  "description": "...",
  "tags": [...],
  "targetLanguage": "Simplified Chinese"
}

Response: {
  "success": true,
  "data": {
    "translatedTitle": "...",
    "translatedDescription": "...",
    "translatedTags": [...]
  }
}

AI cost by plan

PlanAI modelCreation Credits / month
FreeLimited (5 products)~5
StarterDoubao Seed 1.8 (multi-modal)200
ProDoubao Seed 1.8 + Doubao Pro 32K2,000
TeamTeam workflow + priority modelsImport limits shown in plan details
Store Management

Connect Shopify stores

Connect one or more Shopify stores via OAuth. Each store gets an access token used for publishing products.

GET /api/stores
Response: { "success": true, "data": [{ "id", "name", "platform", "shopDomain", "isActive" }] }

POST /api/shopify/connect
Response: { "success": true, "data": { "authUrl": "https://..." } }

DELETE /api/stores/{storeId}
Response: { "success": true }

Store limits by plan

PlanConnected stores
Free1 store
Starter3 stores
Pro10 stores
TeamImport limits shown in plan details
Billing

Subscription management

Standalone direct subscriptions are managed through Stripe. Available plans and final prices are shown at checkout; Shopify-installed accounts are not charged through this flow.

Shopify-installed accounts use the included free plan and cannot start external checkout. The Stripe example below applies only to direct-SaaS accounts without a Shopify public-app billing restriction.

GET /api/billing
Response: {
  "success": true,
  "data": {
    "user": { "id", "email", "name", "plan" },
    "subscription": { "id", "status", "currentPeriodEnd" },
    "merchantBilling": { "mode", "provider", "externalCheckoutAllowed" }
  }
}

POST /api/billing/checkout
Body: { "plan": "starter_monthly" }
Direct-SaaS response: { "success": true, "data": { "url": "https://checkout.stripe.com/..." } }
Shopify-installed plan response: HTTP 409 { "success": false, "error": { "code": "SHOPIFY_EXTERNAL_BILLING_BLOCKED" } }

Plan comparison

PlanPriceImportsStoresAI
Free$0/mo5 / 30d1Basic
Starter$29/mo100 drafts + 120 credits3AI copy + image edits
Pro$79/mo500 drafts + 420 credits10Standard videos + priority
Team$199/mo2,000 drafts + 1,200 shared credits50Team roles + premium videos
Webhooks

Events

Where configured, Stripe subscription events may be delivered by webhook.

  • checkout.session.completedcheckout finished, subscription activated
  • customer.subscription.updatedplan changed or renewed
  • customer.subscription.deletedsubscription canceled, plan reverted to free
  • invoice.payment_failedpayment failed, subscription marked past_due
  • invoice.payment_succeededrenewal payment successful

Payload shape

{
  "id": "evt_...",
  "type": "customer.subscription.updated",
  "createdAt": "2026-01-01T00:00:00Z",
  "data": {
    "userId": "...",
    "plan": "starter",
    "status": "active",
    "currentPeriodEnd": "2026-02-01T00:00:00Z"
  }
}