New API Endpoints, Permissions & Pagination!
We're back with another exciting update to the OpenTiendas API!
New endpoints, smarter permissions, and consistent pagination are here. 🎉
This release enhances the API with access to suppliers, brands, and categories — setting the foundation for deeper catalog management and greater automation capabilities.
New endpoints
You can now manage suppliers, brands, and categories directly through the OpenTiendas API.
Suppliers
New endpoints for managing your suppliers:
GET /api/v1/suppliers/: List all suppliers (paginated).GET /api/v1/suppliers/{id}: Get a specific supplier.POST /api/v1/suppliers/: Create a new supplier.PATCH /api/v1/suppliers/{id}: Update supplier info.DELETE /api/v1/suppliers/{id}: Permanently delete a supplier.
Each supplier has fields like name, internal_id, and description.
The internal_id is unique per supplier and should be used for internal references.
Brands
Manage brand data with full i18n support:
GET /api/v1/brands/GET /api/v1/brands/{id}POST /api/v1/brands/PATCH /api/v1/brands/{id}DELETE /api/v1/brands/{id}
Brands include media, SEO metadata, and size guide files.
All translatable fields (e.g., name, description, body_html) must be provided inside the translations block — even for the store’s main language.
Categories
Categories are now fully accessible via API:
GET /api/v1/category/GET /api/v1/category/{id}POST /api/v1/category/PATCH /api/v1/category/{id}DELETE /api/v1/category/{id}
As with brands, category endpoints support multilingual data through the translations block.
Each category includes status (published/unpublished), image_url, and parent_id.
New global permissions
We’ve introduced a new permission system for API keys.
When creating or editing an API key, you’ll now see a Permissions section with two global scopes:
- ✅ Read access
- ✅ Write access
These apply across all current and future endpoints.
More granular domain-specific permissions (e.g., suppliers, brands, categories) will follow soon.
Consistent pagination
All list endpoints (GET requests returning multiple items) now include a unified pagination block:
{
"data": [...],
"pagination": {
"current_page": 2,
"per_page": 50,
"total": 250,
"total_pages": 5,
"next_page_url": "/api/v1/suppliers?page=3",
"previous_page_url": "/api/v1/suppliers?page=1"
}
}
This makes it easier to build consistent UIs or sync large datasets across pages.
👉 See the pagination section in our API docs for implementation details and best practices.
i18n contents
We’ve now published our first i18n-ready content.
All translatable fields must be sent inside the translations block when creating or updating content through the API
{
"translations": [
{
"locale": "en",
"name": "New category",
"description": "Short text"
}
]
}
Any translatable field (name, description, body_html, etc.) sent at the root level will be ignored or rejected.
This applies to both create and update operations.
👉 Learn more in our i18n handling documentation
What’s next?
- More endpoints for advanced catalog and order management.
- Fine-grained permission scopes per domain.
Check out the updated API documentation and start integrating these new features today. 🚀

