For developers
API Documentation
Build with the ResellerIO API. Everything you need to integrate product intake, AI processing, and marketplace listing generation into your mobile or web app.
Quick Start
Four steps to a working product-ingest flow.
Register or log in
Start with POST /api/v1/auth/register or POST /api/v1/auth/login to get a bearer token.
Confirm email
Check GET /api/v1/me. If confirmed_at is null, call POST /api/v1/auth/resend_confirmation before product-write actions.
Create or prepare uploads
Use POST /api/v1/products for the first upload batch, or POST /api/v1/products/:id/prepare_uploads to add photos later.
Finalize and poll
Direct-upload the binaries, POST /api/v1/products/:id/finalize_uploads, then GET /api/v1/products/:id while status is uploading or processing.
Base URL & Conventions
| Base URL | /api/v1 |
| Content-Type | application/json |
| Auth |
Authorization: Bearer <token> (case-insensitive)
|
| Public auth rate limit | POST /api/v1/auth/register and POST /api/v1/auth/login are limited to 10 requests per minute per IP. |
| Write gate | Product creation, uploads, reprocessing, lifestyle generation, marketplace video generation, and imports require a confirmed email address. |
| Identifiers | Public path params and response `id` / `*_id` fields use ULID strings. Internal integer primary keys are not serialized. |
| Success shape | {"data": { ... }} |
| Error shape |
{"error": {"code": "...", "detail": "...", "status": 404}}
|
| OpenAPI | /api/v1/openapi.json |
| Discovery |
GET /api/v1 returns all endpoints
|
Endpoints
All endpoints grouped by feature area. Click any row to see parameters and examples. Protected endpoints require a bearer token.
Authentication
User & Settings
authProducts
auth
Recommended ingest flow: POST /api/v1/products or POST /api/v1/products/:id/prepare_uploads
→ direct PUT to each signed upload_url
→ POST /api/v1/products/:id/finalize_uploads
→ GET /api/v1/products/:id until processing settles.
Product Images
authLifestyle Media
authProduct Tabs
authStorefront
authInquiries
authExports & Imports
authSystem
Error Codes
All errors follow the same shape. Validation errors (422) include a fields
map with per-field messages.
| HTTP | Code | Meaning |
|---|---|---|
| 401 | unauthorized |
Missing or invalid bearer token |
| 403 | email_not_confirmed |
Email not confirmed — blocks product creation, uploads, reprocessing, lifestyle generation, and imports |
| 404 | not_found |
Resource not found or not owned by you |
| 429 | rate_limited |
Too many auth attempts; returned by the public register/login endpoints |
| 402 | limit_exceeded |
Monthly plan limit reached; response includes an absolute upgrade_url
|
| 422 | validation_failed |
Input validation errors — check fields |
| 422 | invalid_product_state |
Product status doesn't allow this action |
| 422 | invalid_uploads |
Upload IDs don't belong to the product |
| 502 | storage_unavailable |
Object storage is not configured |
| 502 | upload_signing_failed |
A signed upload URL could not be generated |
Retryable AI Error Codes
These appear in latest_processing_run.error_code. Use
POST /products/:id/reprocess
to retry.
ai_quota_exhausted
ai_rate_limited
ai_media_fetch_failed
ai_provider_timeout
ai_grounding_request_invalid