Content API v3
Retrieve and sync your store's catalog with a modern, efficient API.
API in active development
The API v3 is currently in beta. If you encounter any issues or have questions, please reach out to our support team at [email protected].
Features
- Cursor-based pagination for efficient, consistent results across large datasets
- Response shaping with
includeandfieldsparameters to control payload size - Incremental sync with
updated_atfilters to fetch only changed content - Advanced filtering by query, external_id, and date ranges
- Sorting by creation or update date
Authentication
| Header | Example | Description |
|---|---|---|
| X-User-Token | api-abc123... | API token generated in your dashboard. Header-only for security. |
All requests must be performed over HTTPS.
curl -X GET "https://yourstore.publica.la/api/v3/content" \
-H "X-User-Token: api-abc123..." \
-H "Accept: application/json"
API Endpoints
| Operation | Method | Endpoint | Description |
|---|---|---|---|
| List content | GET | /api/v3/content | Retrieve catalog with filters and pagination |
More endpoints coming soon as we migrate from API v1.
Response Shaping
Control your response payload size and content:
The include Parameter
Request additional data blocks:
GET /api/v3/content?include=prices,description,metadata
| Include | Description |
|---|---|
prices | Active prices in all currencies |
description | Full content description |
metadata | Publisher, author, BISAC, keywords, metrics |
geographic_restrictions | Territorial availability |
The fields Parameter
Trim the response to only the fields you need:
GET /api/v3/content?fields=id,name,cover_url
Combining Both
GET /api/v3/content?include=prices&fields=id,name,prices
Cursor Pagination
Cursor-based pagination provides efficient, consistent results:
{
"data": [...],
"links": {
"next": "https://yourstore.publica.la/api/v3/content?cursor=eyJjcmVhdGVkX2F0...",
"prev": null
},
"meta": {
"has_more": true
}
}
Pagination Workflow
- Make initial request without
cursor - Store
links.nexttoken - Use
cursor=<token>for next page - Continue until
meta.has_moreisfalse
Best Practice
Always use meta.has_more to detect the end of results, not by counting items.
Quick Start
List All Content
curl -X GET "https://yourstore.publica.la/api/v3/content?per_page=100" \
-H "X-User-Token: your-api-token" \
-H "Accept: application/json"
Search by Title
curl -X GET "https://yourstore.publica.la/api/v3/content?filter[query]=marketing" \
-H "X-User-Token: your-api-token"
Get Minimal Response
curl -X GET "https://yourstore.publica.la/api/v3/content?fields=id,name,cover_url&per_page=50" \
-H "X-User-Token: your-api-token"
Error Handling
Validation Errors (422)
{
"message": "The given data was invalid.",
"errors": {
"filter.updated_at.from": ["The filter.updated_at.from field must match the format Y-m-d H:i:s."]
}
}
Authentication Errors (401)
{
"message": "Unauthenticated."
}
Next Steps
- List Content - Full endpoint documentation with all parameters
- Migration Guide - Upgrading from API v1
- Sandbox - Test environment (coming soon)