1. Storage & Backend#
plugn uses a Yii2 backend with MySQL in production. The main store table and model is restaurant, keyed by restaurant_uuid. All shop types, including non-restaurant stores, use the Restaurant model as the central entity for store data. The Restaurant model manages store attributes, relationships to items and categories, and is responsible for store-specific operations and validation.
2. Public Read Endpoints#
List Store Items#
GET https://api.plugn.io/v2/item/items?restaurant_uuid={REST_UUID}&expand=options,itemImage&page=1
This endpoint returns a paginated list of items for a specific store. It is public and does not require authentication.
Important fields in the response include:
item_uuid: Unique identifier for the item.restaurant_uuid: Store identifier.item_name: Name of the item (English).item_name_ar: Name of the item (Arabic).item_description: Description (English).item_description_ar: Description (Arabic).item_price: Price of the item.stock_qty: Quantity in stock.item_status: Status of the item (e.g., published).slug: URL-friendly identifier.itemImage.product_file_name: Image file name for the product.
Example request:
GET https://api.plugn.io/v2/item/items?restaurant_uuid=rest_abc123&expand=options,itemImage&page=1
List Store Categories#
GET https://api.plugn.io/v2/item/category-items?restaurant_uuid={REST_UUID}
This endpoint returns the available categories for a store. It is public and does not require authentication. The category_id values from this response are required when creating new items.
Example request:
GET https://api.plugn.io/v2/item/category-items?restaurant_uuid=rest_abc123
3. Write/CRUD Endpoints#
Create Item#
Items are created using:
POST https://api.plugn.io/v2/item
Note: The endpoint is singular (item) because the URL rule has pluralize = false for v2/item.
Authentication is required. Include Authorization: Bearer <token> in the request headers.
Required fields for item creation:
restaurant_uuid: The store's unique identifier.item_name: Name of the item (English).items_category: Category ID (from the categories endpoint).prep_time_unit: Preparation time unit (min,hrs, orday).prep_time: Preparation time value (integer).item_price: Price of the item (decimal).- If
track_quantityis set to1, thenstock_qty(integer) is also required.
Example JSON payload:
{
"restaurant_uuid": "rest_abc123",
"item_name": "Classic Burger",
"items_category": 42,
"prep_time_unit": "min",
"prep_time": 15,
"item_price": 3.99,
"track_quantity": 1,
"stock_qty": 50
}
If track_quantity is omitted or set to 0, stock_qty is not required.
Update and Delete Item#
- Update:
PUTorPATCH/v2/item/{item_uuid} - Delete:
DELETE/v2/item/{item_uuid}
Both endpoints require authentication via Authorization: Bearer <token>.
4. Exporting Products#
Because the GET /v2/item/items endpoint is public, you can export products for a specific store without direct database access. Page through the results using the page parameter (page=1, page=2, etc.), collect the JSON responses, and convert them to CSV for use in migrations (for example, importing into Shopify).
When exporting, note that Arabic text fields (item_name_ar, item_description_ar) may not render correctly in Excel by default. However, if you import the CSV as UTF-8, all characters—including Arabic—will be preserved.
No undocumented endpoints are described here. All information is based on the available API and backend structure.