Skip to main content

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 include and fields parameters to control payload size
  • Incremental sync with updated_at filters to fetch only changed content
  • Advanced filtering by query, external_id, and date ranges
  • Sorting by creation or update date

Authentication

HeaderExampleDescription
X-User-Tokenapi-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

OperationMethodEndpointDescription
List contentGET/api/v3/contentRetrieve 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
IncludeDescription
pricesActive prices in all currencies
descriptionFull content description
metadataPublisher, author, BISAC, keywords, metrics
geographic_restrictionsTerritorial 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

  1. Make initial request without cursor
  2. Store links.next token
  3. Use cursor=<token> for next page
  4. Continue until meta.has_more is false
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


See Also


X

Graph View