Customers API

CRM with contact details, order history, lifetime value, and customer notes.

GET/admin/customers

List customers with search and pagination

Query Parameters

?search=riverside&limit=50&offset=0

Response

{
  "success": true,
  "data": [
    { "user_id": "user_456", "email": "coach@riverside.org", "name": "Mike Rivera", "order_count": 12, "lifetime_value": 4280.00, "created_at": "2025-09-15T08:00:00Z" }
  ]
}
Bearer Token Required
POST/admin/customers/{user_id}/notes

Add an internal note to a customer record

Request Body

{ "content": "Prefers delivery on Tuesdays. Always orders for 3 teams." }
Bearer Token Required

Reviews API

Collect, display, and moderate customer product reviews.

GET/catalog/products/{product_id}/reviews

List reviews for a product (public endpoint)

Response

{
  "success": true,
  "data": [
    { "id": "rev_01", "rating": 5, "title": "Great quality", "body": "Perfect for our team jerseys.", "author": "Coach Mike", "created_at": "2026-03-18T14:00:00Z" }
  ],
  "summary": { "average_rating": 4.8, "total_reviews": 24 }
}
No Auth Required
PATCH/admin/reviews/{review_id}

Moderate a review (approve, reject, flag)

Request Body

{ "status": "approved" }
Bearer Token Required

Newsletter API

Manage newsletter subscriptions with public subscribe/unsubscribe and admin stats.

POST/api/newsletter/subscribe

Subscribe an email to the newsletter (public endpoint)

Request Body

{ "email": "subscriber@example.com" }
No Auth Required
POST/api/newsletter/unsubscribe

Unsubscribe from the newsletter

Response

{
  "success": true,
  "data": {"email": "user@example.com", "unsubscribed": true}
}
No Auth Required
GET/admin/newsletter/stats

Get newsletter subscriber statistics (total, active, growth rate)

Response

{
  "success": true,
  "data": {"subscribers": 524, "open_rate": 0.35, "click_rate": 0.12}
}
Bearer Token Required
GET/admin/newsletter/export

Export subscriber list as CSV

Response

{
  "success": true,
  "data": {"export_id": "exp_01", "subscriber_count": 524}
}
Bearer Token Required

User Profile API

Manage the current user's profile, password, and notification preferences.

GET/me/profile

Get the current user's profile

Response

{
  "success": true,
  "data": {
    "id": "user_123",
    "email": "marc@example.com",
    "first_name": "Marc",
    "last_name": "Smith",
    "phone": "+1-555-0123",
    "avatar_url": null
  }
}
Bearer Token Required
PUT/me/profile

Update the current user's profile information

Response

{
  "success": true,
  "data": {"user_id": "user_123", "name": "Marc", "email": "marc@example.com"}
}
Bearer Token Required
POST/me/change-password

Change the current user's password

Request Body

{
  "current_password": "oldpass123",
  "new_password": "newSecurePass456!"
}
Bearer Token Required
GET/me/notifications

Get notification preferences for the current user

Response

{
  "success": true,
  "data": {"user_id": "user_123", "notifications": {}}
}
Bearer Token Required
PUT/me/notifications

Update notification preferences

Response

{
  "success": true,
  "data": {"user_id": "user_123", "notifications": {}}
}
Bearer Token Required

Notifications API

In-app notification system for orders, stock alerts, reviews, and team activity.

GET/admin/notifications

List notifications for the current user

Response

{
  "success": true,
  "data": [
    { "id": "notif_01", "type": "low_stock", "title": "Low stock: Nike Mercurial Vapor", "read": false, "created_at": "2026-03-22T08:00:00Z" }
  ],
  "unread_count": 3
}
Bearer Token Required
PUT/admin/notifications/read-all

Mark all notifications as read

Response

{
  "success": true,
  "data": {
    "marked_read": 3
  }
}
Bearer Token Required

Contact API

Public contact form submission and admin inquiry management.

POST/api/contact

Submit a contact form inquiry (public endpoint)

Request Body

{
  "name": "Jane Doe",
  "email": "jane@example.com",
  "subject": "Bulk order inquiry",
  "message": "We'd like to order 200 custom jerseys for our league."
}
No Auth Required
GET/admin/contact

List all contact form inquiries

Response

{
  "success": true,
  "data": [{"id": "inq_01", "name": "Jane Doe", "status": "new"}]
}
Bearer Token Required
PATCH/admin/contact/{inquiry_id}/status

Update the status of a contact inquiry (new, in_progress, resolved, closed)

Response

{
  "success": true,
  "data": {"inquiry_id": "inq_01", "status": "in_progress"}
}
Bearer Token Required