FreshStore API Specification

Every store has an API that can be used to get data from or update your store. That includes products, settings, analytics, and more.

Please note that using an API requires some technical knowledge.

Fill Categories

Automatically fill categories with products from merchant APIs using AI-powered search. Jobs run in the background.

POST /api/categories/fill

Field Type Required Description
categories integer[] Yes Array of category IDs (max 50)
api_name string Yes Merchant API: amazon, aliexpress, ebay, etsy, walmart
locale string Yes Country locale (e.g. us, gb, de)
quantity integer No Products per category (default: 5, max: 50)
generate_content boolean No Generate AI content for imported products (default: true)
ai_relevance_check boolean No Use AI to verify product relevance to category (default: true)

Response 202: Jobs are queued in the background.

{
  "data": {
    "categories_queued": 3,
    "quantity_per_category": 5,
    "api_name": "amazon",
    "locale": "us"
  }
}

Import Links

Import products by pasting Amazon links or ASINs. Products are imported in the background.

POST /api/products/import-links

Field Type Required Description
links string[] Yes Array of Amazon URLs or ASINs (max 100)
categories integer[] No Category IDs to assign to imported products

Response 202: Each link is validated and queued.

{
  "data": {
    "total": 3,
    "importing": 2,
    "duplicates": 1,
    "failed": 0,
    "links": [
      {"link": "https://www.amazon.com/dp/B09V3KXJPB", "asin": "B09V3KXJPB", "locale": "us", "status": "importing"},
      {"link": "B07XJ8C8F5", "asin": "B07XJ8C8F5", "locale": "us", "status": "importing"},
      {"link": "https://www.amazon.com/dp/B08N5WRWNW", "asin": "B08N5WRWNW", "locale": "us", "status": "duplicate", "reason": "Product already exists", "product_id": 42}
    ]
  }
}

Getting Started

1. Create an API Key

Go to Settings > API Keys in the store admin area and click Create API Key. Give it a name, choose the permissions you need, and optionally set an expiry date.


Once created, you'll see the API key once - copy it and store it securely. It cannot be retrieved again.


2. Authenticate Requests

Include your API key in the Authorization   header of every request:

Authorization: Bearer YOUR_API_KEY

3. Permissions

When creating an API key, you can choose:


  • Full Access: read and write everything
  • Read / Write: broad read or write access across all resources
  • Per-resource: granular access like "Products: Read", "Offers: Write", etc.

If a request exceeds the key's permissions, you'll receive a 403 Forbidden   response.


Rate Limiting

All endpoints are rate-limited to 60 requests per minute.


WAF (Web Application Firewall) Approval

Your stores are protected by a WAF and common products/services are whitelisted. If you get a 403 response, check the following:

  • User-Agent header: Your requests must include a valid browser-style User-Agent. Generic user-agents such as curl, python-requests, axios, or empty User-Agent strings will be blocked. Use a standard browser User-Agent string, for example: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
  • IP whitelisting: If you are still blocked after setting a valid User-Agent, contact support with your server IP to request a whitelist.

Both conditions must be met: a valid User-Agent and an approved IP (if your IP range is flagged).


Base URL

All of the endpoints listed below are accessible from your store url.

API Base URL: https://{your-store-domain}/  


Response Format

Success

All responses wrap data in a data   key:


{
  "data": { ... }
}

List endpoints return paginated results:


{
  "data": [ ... ],
  "links": {
    "first": "...?page=1",
    "last": "...?page=10",
    "prev": null,
    "next": "...?page=2"
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 10,
    "per_page": 15,
    "to": 15,
    "total": 150
  }
}

Errors

Status Meaning Example Body
401 Unauthorized "Unauthorized."  
403 Forbidden {"message": "This token does not have write access."}  
404 Not Found {"message": "The API resource was not found"}  
422 Validation Error {"message": "...", "errors": {"field": ["..."]}}  
500 Server Error {"message": "Server Error"}  

Pagination

All list endpoints accept these query parameters:


Parameter Type Default Max Description
page   integer 1 - Page number
per_page   integer 15 100 Items per page


Store

Get Status (Public)

GET /api/store/status

No authentication required. Returns whether the store is online.


{
  "data": {
    "up": true
  }
}



Get Store Info

GET /api/store/info

{
  "data": {
    "name": "My Store",
    "url": "https://store.example.com",
    "niche": "tech",
    "live": true,
    "default_country": "US",
    "enabled_countries": ["US", "GB", "DE"],
    "version": "3.2.0",
    "cart_enabled": false,
    "advanced_mode": true
  }
}



Get Store Stats

GET /api/store/stats

{
  "data": {
    "brands": 12,
    "articles": 45,
    "products": 150,
    "categories": 23,
    "offers": 320,
    "articles_generated": 30
  }
}

Also available at GET /api/data/stats   .




Get Store Warnings

GET /api/store/warnings

{
  "data": [
    {
      "message": "To get paid for your Amazon sales you need to add an Amazon Affiliate Tag",
      "action": "Find Out More",
      "url": "/admin/store-health"
    }
  ]
}



Get Store Locales

GET /api/store/locales

Returns the enabled country/locale configurations.


{
  "data": {
    "us": { "name": "United States", "iso_3166_2": "US", "..." : "..." },
    "gb": { "name": "United Kingdom", "iso_3166_2": "GB", "..." : "..." }
  }
}



Users

List Users

GET /api/users

Response: Paginated list.


{
  "data": [
    {
      "id": 1,
      "firstName": "Jane",
      "lastName": "Doe",
      "email": "jane@example.com",
      "roles": ["admin"]
    }
  ]
}



Create User

POST /api/users

If a user with the given email already exists (including deleted users), the existing user is returned.


Field Type Required Description
email   string Yes Must be unique, max 255 chars
password   string No Random password generated if omitted
first_name   string No
last_name   string No
roles   string[] No Role names to assign
newsletter   boolean No Defaults to true  


GET /api/users/login-link?email=jane@example.com

Generates a magic login link for the given user.


{
  "data": {
    "loginLink": "https://store.example.com/magiclink/..."
  }
}



Get User

GET /api/users/{id}



Update User

PATCH /api/users/{id}

Field Type Required Description
first_name   string No
last_name   string No
email   string No


Settings

Get All Settings

GET /api/settings

Returns all settings as flat key-value pairs using {group}_{setting}   keys.


{
  "data": {
    "store_name": "My Fresh Store",
    "store_niche": "tech",
    "product_show_reviews": true,
    "offers_amazon_enabled": true
  }
}



Update All Settings

PATCH /api/settings

Send one or more settings using {group}_{setting}   keys.


{
  "store_name": "My Updated Store",
  "product_show_reviews": false
}

Response:


{
  "message": "Settings saved successfully."
}



Get Settings by Group

GET /api/settings/{group}

Available groups: store   , offers   , product   , traffic   , article   , social   , template   , xml-sitemap  


Returns settings for that group only, with keys without the group prefix.


{
  "data": {
    "name": "My Fresh Store",
    "niche": "tech",
    "live": true,
    "default_country": "US"
  }
}



Update Settings by Group

PATCH /api/settings/{group}

Available groups: store   , offers   , product   , traffic   , article   , social   , template   , xml-sitemap  


Send keys without the group prefix.


{
  "name": "My Updated Store",
  "niche": "tech"
}



Products

Product Fields

Field Type Description
id   integer
slug   string
title   string
subtitle   string
link_title   string
content   string HTML content
content_bottom   string HTML content below main
highlights   array Key features / bullet points
summary   string
meta_title   string
meta_keywords   string
meta_description   string
review_quantity   integer
review_score   float
enabled   boolean
in_sitemap   boolean
brand_id   integer
analytics_visits   integer Total page views
upc   string
ean   string
isbn   string
mpn   string
main_image_url   string Primary product image URL
created_at   datetime
updated_at   datetime
brand   object Included via ?include=brand  
offers   array Included via ?include=offers  
categories   array Included via ?include=categories  


List Products

GET /api/products

Parameter Type Description
search   string Search by title
enabled   boolean Filter by enabled status
brand_id   integer Filter by brand
category_id   integer Filter by category
sort_by   string Column to sort by (default: created_at   )
sort_dir   string asc   or desc   (default: desc   )


Create Product

POST /api/products

Field Type Required Description
title   string Yes Max 255 chars
slug   string No
subtitle   string No
link_title   string No
content   string No HTML
content_bottom   string No HTML
highlights   array No
summary   string No
meta_title   string No Max 255 chars
meta_keywords   string No Max 255 chars
meta_description   string No
review_quantity   integer No
review_score   numeric No
enabled   boolean No
in_sitemap   boolean No
brand_id   integer No Must exist in brands
upc   string No
ean   string No
isbn   string No
mpn   string No

Response 201  




Get Product

GET /api/products/{id}

Use ?include=brand,offers,categories   to load related data.


{
  "data": {
    "id": 1,
    "title": "Example Product",
    "brand": { "id": 5, "title": "Acme" },
    "offers": [{ "id": 10, "title": "..." }],
    "categories": [{ "id": 3, "title": "..." }]
  }
}



Update Product

PATCH /api/products/{id}

Same fields as Create. All optional. Only provided fields are updated.




Delete Product

DELETE /api/products/{id}

Soft-deletes the product. Response 204   (no content).




Get Product Offers

GET /api/products/{id}/offers

Paginated list of offers linked to this product.




Get Product Categories

GET /api/products/{id}/categories

{
  "data": [{ "id": 1, "title": "Electronics" }]
}



Sync Product Categories

Replace all category associations for a product.


POST /api/products/{id}/categories

{
  "category_ids": [1, 2, 3]
}



Get Product Analytics

GET /api/products/{id}/analytics

{
  "data": {
    "analytics_visits": 1250,
    "total_clicks": 89,
    "affiliate_clicks": 45
  }
}



Offers

Offer Fields

Field Type Description
id   integer
uuid   string Unique merchant identifier
merchant   string e.g. amazon   , ebay   , custom  
merchant_product_id   string
merchant_offer_id   string
title   string
summary   string
features   array
currency   string e.g. USD   , GBP  
price   float
price_full   float Original / list price
min_price   float
max_price   float
condition   string e.g. new   , used  
stock_available   boolean
enabled   boolean
locale   string e.g. us   , gb  
images   array
url_detail   string
created_at   datetime
updated_at   datetime


Get Enabled Merchants

GET /api/offers/merchants

{
  "data": {
    "amazon": "Amazon",
    "ebay": "eBay",
    "etsy": "Etsy"
  }
}



List Offers

GET /api/offers

Parameter Type Description
search   string Search by title
merchant   string Filter by merchant name
enabled   boolean Filter by enabled status
product_id   integer Filter by product


Create Offer

POST /api/offers

Field Type Required Description
merchant   string Yes Max 255 chars
title   string Yes Max 255 chars
uuid   string No
merchant_product_id   string No
merchant_offer_id   string No
summary   string No
features   array No
currency   string No Max 10 chars
price   numeric No
price_full   numeric No
min_price   numeric No
max_price   numeric No
condition   string No Max 50 chars
stock_available   boolean No
enabled   boolean No
locale   string No Max 10 chars
images   array No
url_detail   string No

Response 201  




Get Offer

GET /api/offers/{id}



Update Offer

PATCH /api/offers/{id}

Same fields as Create. All optional.




Delete Offer

DELETE /api/offers/{id}

Response 204   (no content).




Sync Offer Products

Replace all product associations for an offer.


POST /api/offers/{id}/products

{
  "product_ids": [1, 2, 3]
}



Categories

Category Fields

Field Type Description
id   integer
parent_id   integer Parent category (null = root)
slug   string
title   string
subtitle   string
link_title   string
content_top   string HTML shown above products
content_bottom   string HTML shown below products
meta_title   string
meta_keywords   string
meta_description   string
enabled   boolean
sort_order   integer
products_count   integer
children_count   integer
created_at   datetime
updated_at   datetime


Get Category Tree

GET /api/categories/tree

Returns all categories as a nested tree structure.


{
  "data": [
    {
      "id": 1,
      "title": "Electronics",
      "children": [
        {
          "id": 5,
          "title": "Phones",
          "children": []
        }
      ]
    }
  ]
}



List Categories

GET /api/categories

Parameter Type Description
search   string Search by title
enabled   boolean Filter by enabled status
parent_id   integer Filter by parent (use empty string for root only)


Create Category

POST /api/categories

Field Type Required Description
title   string Yes Max 255 chars
slug   string No
parent_id   integer No Must exist in categories
subtitle   string No
link_title   string No
content_top   string No
content_bottom   string No
meta_title   string No
meta_keywords   string No
meta_description   string No
enabled   boolean No
sort_order   integer No

Response 201  




Get Category

GET /api/categories/{id}



Update Category

PATCH /api/categories/{id}

Same fields as Create. All optional.




Delete Category

DELETE /api/categories/{id}

Response 204   (no content).




Get Category Products

GET /api/categories/{id}/products

Paginated list of products in this category.




Brands

Brand Fields

Field Type Description
id   integer
slug   string
title   string
subtitle   string
link_title   string
content   string
content_bottom   string
meta_title   string
meta_keywords   string
meta_description   string
enabled   boolean
products_count   integer
created_at   datetime
updated_at   datetime


List Brands

GET /api/brands

Parameter Type Description
search   string Search by title
enabled   boolean Filter by enabled status


Create Brand

POST /api/brands

Field Type Required Description
title   string Yes Max 255 chars
slug   string No
subtitle   string No
link_title   string No
content   string No
content_bottom   string No
meta_title   string No
meta_keywords   string No
meta_description   string No
enabled   boolean No

Response 201  




Get Brand

GET /api/brands/{id}



Update Brand

PATCH /api/brands/{id}

Same fields as Create. All optional.




Delete Brand

DELETE /api/brands/{id}

Response 204   (no content).




Get Brand Products

GET /api/brands/{id}/products

Paginated list of products for this brand.




Articles

Article Fields

Field Type Description
id   integer
slug   string
title   string
subtitle   string
link_title   string
content   string HTML
meta_title   string
meta_keywords   string
meta_description   string
enabled   boolean
generated   integer 1 if AI-generated
published_at   datetime
created_at   datetime
updated_at   datetime
article_categories   array Included on single get


List Articles

GET /api/articles

Parameter Type Description
search   string Search by title
enabled   boolean Filter by enabled status
generated   boolean Filter by AI-generated status


Create Article

POST /api/articles

Field Type Required Description
title   string Yes Max 255 chars
slug   string No
subtitle   string No
link_title   string No
content   string No
meta_title   string No
meta_keywords   string No
meta_description   string No
enabled   boolean No
published_at   date No ISO 8601
generate_ai_content boolean No Set to true to generate AI content using the title as the topic
generate_seo_keyword string No SEO keyword to target in the generated content (max 255 chars)
generate_images boolean No Generate AI images for the article (requires generate_ai_content)

Response 201  

When generate_ai_content is true, the article title is used as the AI generation topic. Content, metadata, and optionally images are generated in the background. The article is returned immediately with a 201 status and the generated content will populate once the background job completes.




Get Article

GET /api/articles/{id}

Includes article_categories   .




Update Article

PATCH /api/articles/{id}

Same fields as Create. All optional.




Delete Article

DELETE /api/articles/{id}

Response 204   (no content).




Article Categories

Article Category Fields

Field Type Description
id   integer
parent_id   integer Parent category
slug   string
title   string
subtitle   string
link_title   string
content_top   string
content_bottom   string
meta_title   string
meta_keywords   string
meta_description   string
enabled   boolean
sort_order   integer
articles_count   integer
created_at   datetime
updated_at   datetime


List Article Categories

GET /api/article-categories

Parameter Type Description
search   string Search by title
enabled   boolean Filter by enabled status


Create Article Category

POST /api/article-categories

Field Type Required Description
title   string Yes Max 255 chars
slug   string No
parent_id   integer No Must exist in article categories
subtitle   string No
link_title   string No
content_top   string No
content_bottom   string No
meta_title   string No
meta_keywords   string No
meta_description   string No
enabled   boolean No
sort_order   integer No

Response 201  




Get Article Category

GET /api/article-categories/{id}



Update Article Category

PATCH /api/article-categories/{id}

Same fields as Create. All optional.




Delete Article Category

DELETE /api/article-categories/{id}

Response 204   (no content).




Pages

Page Fields

Field Type Description
id   integer
slug   string
title   string
subtitle   string
link_title   string
content   string HTML
meta_title   string
meta_keywords   string
meta_description   string
enabled   boolean
created_at   datetime
updated_at   datetime


List Pages

GET /api/pages

Parameter Type Description
search   string Search by title
enabled   boolean Filter by enabled status


Create Page

POST /api/pages

Field Type Required Description
title   string Yes Max 255 chars
slug   string No
subtitle   string No
link_title   string No
content   string No
meta_title   string No
meta_keywords   string No
meta_description   string No
enabled   boolean No

Response 201  




Get Page

GET /api/pages/{id}



Update Page

PATCH /api/pages/{id}

Same fields as Create. All optional.




Delete Page

DELETE /api/pages/{id}

Response 204   (no content).




Analytics

Get Visits Summary

GET /api/analytics/visits/summary

Parameter Type Default Description
period   string day   day   , week   , or month  
length   integer 30 Number of periods to return
{
  "data": {
    "2026-03-06": { "nb_uniq_visitors": 45, "nb_visits": 52, "nb_actions": 120 },
    "2026-03-05": { "..." }
  }
}



List Visits

GET /api/analytics/visits

Parameter Type Description
country_code   string Filter by country (e.g. US   )
device_type   string Filter by device (e.g. Desktop   )
from   date Start date
to   date End date

Returns paginated visit records with fields: id   , ip_address   , country_code   , region   , city   , visits   , actions   , events   , visit_duration_seconds   , referrer_type_name   , device_type   , browser   , first_action_at   , last_action_at   .




List Visitors

GET /api/analytics/visitors

Returns paginated visitor records with fields: id   , matomo_visitor_id   , first_seen   , last_seen   , visits_count   , clicks_count   .




Get Visitor

GET /api/analytics/visitors/{id}



Get Pages Analytics

GET /api/analytics/pages

{
  "data": [
    {
      "id": 1,
      "label": "/products/example",
      "visitors": 120,
      "hits": 145,
      "average_time_on_page": 42,
      "bounce_rate": "35%",
      "exit_rate": "20%"
    }
  ]
}



Get Countries Analytics

GET /api/analytics/countries

{
  "data": [
    {
      "id": 1,
      "locale": "us",
      "country_name": "United States",
      "visitors": 500,
      "visits": 620,
      "actions": 1800,
      "visit_duration_seconds": 45000
    }
  ]
}



Get Devices Analytics

GET /api/analytics/devices

{
  "data": [
    {
      "id": 1,
      "device": "Desktop",
      "visitors": 300,
      "visits": 400,
      "actions": 1200,
      "visit_duration_seconds": 30000
    }
  ]
}



Get Sources Analytics

GET /api/analytics/sources

{
  "data": [
    {
      "id": 1,
      "source": "Google",
      "visitors": 200,
      "visits": 250,
      "actions": 600,
      "visit_duration_seconds": 18000
    }
  ]
}



Affiliate Clicks Summary

Revenue and click counts for affiliate link clicks, with a breakdown by merchant and per-period time series.


GET /api/analytics/clicks/summary

Parameter Type Default Description
period   string day   day  , week  , or month  
length   integer 30 Number of periods to return
{
  "data": {
    "total_clicks": 1500,
    "affiliate_clicks": 890,
    "affiliate_revenue": 3245.50,
    "by_merchant": {
      "amazon": { "clicks": 450, "revenue": 1820.00 },
      "ebay": { "clicks": 200, "revenue": 875.50 },
      "etsy": { "clicks": 240, "revenue": 550.00 }
    },
    "periods": {
      "2026-03-07": { "clicks": 12, "affiliate_clicks": 5, "revenue": 125.00 },
      "2026-03-08": { "clicks": 8, "affiliate_clicks": 3, "revenue": 75.50 },
      "2026-03-09": { "clicks": 0, "affiliate_clicks": 0, "revenue": 0.0 }
    }
  }
}

total_clicks   includes all clicks (affiliate and non-affiliate). affiliate_clicks   and affiliate_revenue   are for affiliate clicks only. The periods   key contains a time-series breakdown. Periods with no activity are included as zeros.



List Clicks


Returns all tracked clicks, both affiliate outbound clicks and internal clicks. Use ?affiliate=true   to get only affiliate clicks (outbound clicks to merchants like Amazon, eBay, etc.).

GET /api/analytics/clicks

Parameters:

Parameter Type Description
product_id   integer Filter by product
offer_id   integer Filter by offer
affiliate   boolean Filter affiliate clicks only
from   date Start date
to   date End date

Each click record includes:

Field Type Description
id   integer
product_id   integer
offer_id   integer
affiliate   integer 1   = affiliate click, 0   = internal click
source   string Page/URL the click originated from
destination   string Merchant name (e.g. amazon   , ebay   )
url   string Full destination URL
price   float Product price at time of click
clicked_at   datetime



Cart Checkouts Summary

Revenue and checkout counts, broken down by today, this month, all time, and per-period time series.


GET /api/analytics/checkouts/summary

Parameter Type Default Description
period   string day   day  , week  , or month  
length   integer 30 Number of periods to return
{
  "data": {
    "today": { "checkouts": 5, "revenue": 245.00 },
    "this_month": { "checkouts": 120, "revenue": 6500.00 },
    "all_time": { "checkouts": 3400, "revenue": 185000.00 },
    "periods": {
      "2026-03-07": { "checkouts": 3, "revenue": 150.00 },
      "2026-03-08": { "checkouts": 2, "revenue": 95.00 }
    }
  }
}



List Cart Checkouts

Paginated list of individual cart checkout records.


GET /api/analytics/checkouts

Parameter Type Description
from   date Start date
to   date End date

Each checkout record includes:

Field Type Description
id   integer
session_id   string
items   array Products in the checkout
total   float Cart total
currency   string
country   string Shopper country
created_at   datetime



List Actions

Paginated list of tracked user actions (page views, events, etc.).


GET /api/analytics/actions

Parameter Type Description
visit_id   integer Filter by visit
visitor_id   integer Filter by visitor
type   string Action type (e.g. pageview   , event   )

Each action record includes: id   , visit_id   , visitor_id   , type   , url   , title   , time_spent_seconds   , created_at   .




AI Token Usage

GET /api/data/openai-tokens

{
  "data": {
    "tokens_used": 125000,
    "tokens_limit": 500000,
    "tokens_remaining": 375000,
    "resets_at": "2026-04-01"
  }
}



Quick Reference

Method Endpoint Description
GET   /api/store/status   Store online status (public)
GET   /api/store/info   Store details
GET   /api/store/stats   Content counts
GET   /api/store/warnings   Active warnings
GET   /api/store/locales   Enabled countries
GET   /api/users   List users
POST   /api/users   Create user
GET   /api/users/login-link   Magic login link
GET   /api/users/{id}   Get user
PATCH   /api/users/{id}   Update user
GET   /api/settings   All settings
PATCH   /api/settings   Update settings
GET   /api/settings/{group}   Settings by group
PATCH   /api/settings/{group}   Update group settings
GET   /api/products   List products
POST   /api/products   Create product
GET   /api/products/{id}   Get product
PATCH   /api/products/{id}   Update product
DELETE   /api/products/{id}   Delete product
GET   /api/products/{id}/offers   Product offers
GET   /api/products/{id}/categories   Product categories
POST   /api/products/{id}/categories   Sync product categories
GET   /api/products/{id}/analytics   Product analytics
GET   /api/offers/merchants   Enabled merchants
GET   /api/offers   List offers
POST   /api/offers   Create offer
GET   /api/offers/{id}   Get offer
PATCH   /api/offers/{id}   Update offer
DELETE   /api/offers/{id}   Delete offer
POST   /api/offers/{id}/products   Sync offer products
GET   /api/categories/tree   Category tree
GET   /api/categories   List categories
POST   /api/categories   Create category
GET   /api/categories/{id}   Get category
PATCH   /api/categories/{id}   Update category
DELETE   /api/categories/{id}   Delete category
GET   /api/categories/{id}/products   Category products
GET   /api/brands   List brands
POST   /api/brands   Create brand
GET   /api/brands/{id}   Get brand
PATCH   /api/brands/{id}   Update brand
DELETE   /api/brands/{id}   Delete brand
GET   /api/brands/{id}/products   Brand products
GET   /api/articles   List articles
POST   /api/articles   Create article
GET   /api/articles/{id}   Get article
PATCH   /api/articles/{id}   Update article
DELETE   /api/articles/{id}   Delete article
GET   /api/article-categories   List article categories
POST   /api/article-categories   Create article category
GET   /api/article-categories/{id}   Get article category
PATCH   /api/article-categories/{id}   Update article category
DELETE   /api/article-categories/{id}   Delete article category
GET   /api/pages   List pages
POST   /api/pages   Create page
GET   /api/pages/{id}   Get page
PATCH   /api/pages/{id}   Update page
DELETE   /api/pages/{id}   Delete page
GET   /api/analytics/visits/summary   Visits summary
GET   /api/analytics/visits   List visits
GET   /api/analytics/visitors   List visitors
GET   /api/analytics/visitors/{id}   Get visitor
GET   /api/analytics/pages   Page analytics
GET   /api/analytics/countries   Country analytics
GET   /api/analytics/devices   Device analytics
GET   /api/analytics/sources   Source analytics
GET   /api/analytics/clicks/summary   Affiliate clicks summary
GET   /api/analytics/clicks   List clicks
GET   /api/analytics/checkouts/summary   Cart checkouts summary
GET   /api/analytics/checkouts   List cart checkouts
GET   /api/analytics/actions   List actions
GET   /api/data/openai-tokens   AI token usage
GET   /api/data/stats   Content counts (alias)
POST /api/products/import-links Import products from Amazon links
POST /api/categories/fill Fill categories with products
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.