shopinfo.app API Documentation

Get Started: Sign up for free to get 100 API requests, then manage your API keys from your dashboard.

Try the Interactive API Explorer

Want to test API endpoints directly in your browser? Our interactive Swagger UI lets you make real API calls, see live responses, and experiment with parameters without writing any code.

  • Test all endpoints with your API key
  • See real-time response examples
  • Explore the complete OpenAPI specification
Launch Interactive Explorer

Pricing & Plans

Tier Price Rate Limit API Keys CSV Export MCP server
Basic Free 100 requests/hour 1 key ✗ Teaser only
Pro $5/month 100 requests/hour 3 keys ✓ Full tool access
Team $30/month
(5 members included, +$7/user)
Unlimited 50 keys ✓ Full tool access

📝 Note: Checks made through the web app do not count against your API limits.

CSV Export Feature

Download the complete theme directory as a CSV file with Pro and Team plans. Perfect for bulk analysis, importing into spreadsheets, or building your own theme comparison tools.

Special Access: Members of ShopDev Alliance receive enhanced API access as part of their membership benefits.

Ready to upgrade?

Sign Up Free to Get Started

Available Endpoints

shopinfo.app API provides two main endpoints for theme detection:

  • Shop Check - Detect theme by scraping a live Shopify store URL
  • Theme Lookup - Look up theme information from our database by name or ID

Public Endpoints (No API Key)

Two read-only endpoints return the same non-gated facts that every public theme page already shows, without an API key. They are meant for agents, scripts, and integrations that cannot hold a key. The limit is 60 requests per minute per IP address, and every response carries X-RateLimit-* headers and a one-hour public cache header.

GET /api/v1/public/themes/lookup?name=Dawn
GET /api/v1/public/themes/lookup?theme_store_id=887
GET /api/v1/public/themes?developer=shopify&status=live&canvas=shopify_theme
GET /api/v1/public/themes?feature=mega-menu,quick-view&limit=50

What the public tier returns

  • Identity: name, preset and base theme, Theme Store ID, developer and whether the developer is Shopify
  • Price with a free flag, latest version and its release date, listing status (live, vintage, retired, removed)
  • Shopify Canvas support label with the date the facts were checked (see Canvas and your theme)
  • On lookup: presets, the Theme Store feature list by category, catalog sizes, primary industry, Shopify's review summary, and 30 and 90 day price changes
  • Links to the HTML page, its Markdown mirror, the Theme Store listing, documentation, and demo store

What stays behind an API key

Core Web Vitals rankings, the identities of stores using a theme, changelog history, and CSV export. Each public response names these under gated so a caller knows what it is not seeing.

List filters

  • developer: developer name or the slug from /developers/{slug}
  • status: live, vintage, retired, or removed
  • canvas: shopify_theme or third_party
  • feature: comma-separated feature slugs; every slug must match
  • include_presets=true: include style variations (base themes only by default)
  • limit (default 25, max 100) and cursor from the previous page

Theme Lookup Endpoint

GET /api/v1/themes/lookup

Look up theme information directly from our database using either the theme name or Shopify theme store ID. This endpoint provides instant results without web scraping, making it ideal for known themes.

Authentication

Include your API key in the API-Key header.

API-Key: your_api_key_here

Request Parameters

Provide at least one of the following parameters:

  • name - The theme name (e.g., "Dawn", "Prestige", "Sense")
  • theme_store_id - The Shopify theme store ID (e.g., "887", "855")
  • include_pricing - Optional. Set to "true" to include price trend data (default: false)
  • include_performance - Optional. Set to "true" to include Core Web Vitals performance data (default: false, Pro/Team tier required)

Request Examples

Lookup by name:

GET /api/v1/themes/lookup?name=Dawn

Lookup by theme store ID:

GET /api/v1/themes/lookup?theme_store_id=887

Lookup Dawn preset (e.g., Sense):

GET /api/v1/themes/lookup?name=Sense

With both parameters (theme_store_id takes precedence):

GET /api/v1/themes/lookup?theme_store_id=887&name=Prestige

Include price trend data:

GET /api/v1/themes/lookup?name=Prestige&include_pricing=true

Include performance data (Pro/Team tier required):

GET /api/v1/themes/lookup?name=Dawn&include_performance=true

Include both pricing and performance data:

GET /api/v1/themes/lookup?name=Prestige&include_pricing=true&include_performance=true

Response Examples

Default Response (Minimal):

{
  "theme": {
    "id": 1,
    "name": "Dawn",
    "theme_store_id": "887",
    "preset_id": "4473",
    "preset_name": null,
    "base_theme_name": "Dawn",
    "is_base_theme": true,
    "latest_version": "15.4.0",
    "developer": "Shopify",
    "current_price": 0,
    "is_vintage": false,
    "is_retired": false,
    "last_updated": "2025-07-24",
    "purchase_url": "https://themes.shopify.com/themes/dawn",
    "documentation_url": "https://help.shopify.com/themes/dawn",
    "demo_store_url": "https://theme-dawn-demo.myshopify.com/",
    "theme_vitals_available": true,
    "details_url": "https://shopinfo.app/themes/dawn",
    "presets": ["Sense", "Craft", "Studio", "Taste", "Colorblock"],
    "performance": {
      "mobile_cwv_rank": 67,
      "desktop_cwv_rank": 82,
      "data_updated_at": "2025-01-15T08:00:00Z",
      "data_source": "ThemeVitals",
      "themevitals_url": "https://themevitals.com/themes/dawn?utm_source=shopinfo_theme&utm_medium=partner&utm_campaign=dawn"
    }
  },
  "lookup_method": "name",
  "checked_at": "2025-08-15T10:30:00Z"
}

Note: The performance object only appears when include_performance=true is specified AND you have a Pro or Team tier API key. Performance rankings are sourced directly from ThemeVitals.com. Basic users will see performance_available: true with an upgrade message.

With Pricing Data (include_pricing=true):

{
  "theme": {
    "id": 46,
    "name": "Prestige",
    "theme_store_id": "855",
    "current_price": 400,
    "demo_store_url": "https://prestige-theme-allure.myshopify.com/",
    "price_trends": {
      "last_30_days": {
        "price_change": 0,
        "percent_change": 0,
        "start_price": 400,
        "end_price": 400
      },
      "last_90_days": {
        "price_change": 0,
        "percent_change": 0
      }
    },
    // ... other fields
  }
}

Response Fields

  • theme_store_id - Shopify's internal theme store ID
  • preset_id - ID for theme presets/styles
  • demo_store_url - Direct URL to theme's demo store
  • is_base_theme - True if this is a base theme (not a preset)
  • presets - Available presets/styles for base themes
  • price_trends - Price change history (only when include_pricing=true)
  • lookup_method - Which parameter was used for the lookup

Code Examples

cURL

# Lookup by name
curl -H "API-Key: your_api_key_here" \
  "https://shopinfo.app/api/v1/themes/lookup?name=Dawn"

# Lookup by theme store ID
curl -H "API-Key: your_api_key_here" \
  "https://shopinfo.app/api/v1/themes/lookup?theme_store_id=887"

# Include pricing data
curl -H "API-Key: your_api_key_here" \
  "https://shopinfo.app/api/v1/themes/lookup?name=Prestige&include_pricing=true"

# Include performance data (Pro/Team tier required)
curl -H "API-Key: your_pro_api_key_here" \
  "https://shopinfo.app/api/v1/themes/lookup?name=Dawn&include_performance=true"

# Include both pricing and performance data
curl -H "API-Key: your_pro_api_key_here" \
  "https://shopinfo.app/api/v1/themes/lookup?name=Prestige&include_pricing=true&include_performance=true"

# URL encode spaces and special characters
curl -H "API-Key: your_api_key_here" \
  "https://shopinfo.app/api/v1/themes/lookup?name=Be%20Yours"

JavaScript

// Lookup by name (minimal response)
const params = new URLSearchParams({ name: 'Dawn' });
const response = await fetch(`https://shopinfo.app/api/v1/themes/lookup?${params}`, {
  headers: {
    'API-Key': 'your_api_key_here'
  }
});

const data = await response.json();
console.log(data);

// Lookup with pricing data
const params2 = new URLSearchParams({
  name: 'Prestige',
  include_pricing: 'true'
});
const response2 = await fetch(`https://shopinfo.app/api/v1/themes/lookup?${params2}`, {
  headers: {
    'API-Key': 'your_api_key_here'
  }
});

// Lookup with performance data (Pro/Team tier required)
const params3 = new URLSearchParams({
  name: 'Dawn',
  include_performance: 'true'
});
const response3 = await fetch(`https://shopinfo.app/api/v1/themes/lookup?${params3}`, {
  headers: {
    'API-Key': 'your_pro_api_key_here'
  }
});

Python

import requests

# Lookup by name (minimal response)
response = requests.get(
    'https://shopinfo.app/api/v1/themes/lookup',
    params={'name': 'Dawn'},
    headers={'API-Key': 'your_api_key_here'}
)

# Lookup with pricing data
response = requests.get(
    'https://shopinfo.app/api/v1/themes/lookup',
    params={'name': 'Prestige', 'include_pricing': 'true'},
    headers={'API-Key': 'your_api_key_here'}
)

# Lookup by theme store ID
response = requests.get(
    'https://shopinfo.app/api/v1/themes/lookup',
    params={'theme_store_id': '887'},
    headers={'API-Key': 'your_api_key_here'}
)

# Lookup with performance data (Pro/Team tier required)
response = requests.get(
    'https://shopinfo.app/api/v1/themes/lookup',
    params={'name': 'Dawn', 'include_performance': 'true'},
    headers={'API-Key': 'your_pro_api_key_here'}
)

print(response.json())

Shop Check Endpoint

POST /api/v1/themes/shop_check

Check which Shopify theme a shop is using by providing the shop URL. This endpoint scrapes the shop in real-time and returns comprehensive theme information.

Authentication

Include your API key in the API-Key header.

API-Key: your_api_key_here

Request Body

{
  "shop_url": "example.myshopify.com"
}

Response Example

{
  "shop_url": "https://example.myshopify.com",
  "myshopify_handle": "example",
  "theme": {
    "id": 123,
    "name": "Dawn",
    "installed_version": "14.0.0",
    "latest_version": "15.0.0",
    "update_available": true,
    "developer": "Shopify",
    "current_price": 0,
    "is_vintage": false,
    "is_retired": false,
    "last_updated": "2024-01-15",
    "purchase_url": "https://themes.shopify.com/themes/dawn",
    "documentation_url": "https://help.shopify.com/themes/dawn",
    "presets": ["Default", "Colorful", "Modern"]
  },
  "detection_method": "web_scraping",
  "checked_at": "2025-01-22T10:30:00Z"
}

Response Fields

  • myshopify_handle - The Shopify store's canonical handle/subdomain (e.g., "example-store" from "example-store.myshopify.com"). May be null if not detectable.
  • installed_version - The theme version currently installed on the shop
  • latest_version - The latest version available in the Shopify Theme Store
  • update_available - Boolean indicating if a newer version is available
  • is_vintage - True if this is a legacy theme no longer sold
  • is_retired - True if the theme has been discontinued
  • last_updated - When the theme was last updated in the store

Code Examples

cURL

curl -X POST https://shopinfo.app/api/v1/themes/shop_check \
  -H "Content-Type: application/json" \
  -H "API-Key: your_api_key_here" \
  -d '{"shop_url": "thepagesmedia.com"}'

JavaScript

const response = await fetch('https://shopinfo.app/api/v1/themes/shop_check', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'API-Key': 'your_api_key_here'
  },
  body: JSON.stringify({ shop_url: 'thepagesmedia.com' })
});

const data = await response.json();
console.log(data);

Python

import requests

response = requests.post(
    'https://shopinfo.app/api/v1/themes/shop_check',
    headers={
        'API-Key': 'your_api_key_here',
        'Content-Type': 'application/json'
    },
    json={'shop_url': 'thepagesmedia.com'}
)

print(response.json())

Error Responses

400 Bad Request

Shop Check endpoint:

{ "error": "shop_url parameter is required" }

Theme Lookup endpoint:

{ 
  "error": "At least one parameter required",
  "message": "Please provide either theme_store_id or name parameter"
}

401 Unauthorized

{ "error": "Unauthorized" }

404 Not Found

Shop Check endpoint (site not Shopify):

{
  "shop_url": "https://example.com",
  "error": "Not a Shopify site or theme could not be detected",
  "checked_at": "2025-01-22T10:30:00Z"
}

Theme Lookup endpoint (theme not found):

{
  "error": "Theme not found",
  "message": "No theme found with name: NonExistentTheme",
  "searched_parameters": {
    "theme_store_id": null,
    "name": "NonExistentTheme"
  },
  "checked_at": "2025-08-15T10:30:00Z"
}

When to Use Each Endpoint

Use Theme Lookup when:

  • You know the theme name or ID
  • You need instant results (no web scraping delay)
  • You want to check theme details, presets, or pricing
  • You're building a theme selector or comparison tool
  • You need to validate theme compatibility before installation

Use Shop Check when:

  • You have a Shopify store URL
  • You need to detect the actual installed theme version
  • You're monitoring competitor stores
  • You're checking if a store needs theme updates
  • You're analyzing theme adoption across multiple stores

Use Cases

  • App developers checking theme compatibility
  • Theme developers tracking theme usage and version adoption
  • Merchants checking if their theme needs updating
  • Agencies monitoring client stores for outdated themes
  • Analytics and market research