13 KiB
Paprika API Documentation
The Paprika API provides endpoints for user authentication, managing restaurant menus, and menu items.
Base URL
The base URL for the API is http://localhost:3333 (default for AdonisJS development).
Authentication
Authentication is handled via Bearer tokens. Include Authorization: Bearer <token> in the headers for protected routes.
Register
Registers a new user.
- URL:
/api/register - Method:
POST - Body:
email(string, required): The user's email address.password(string, required): The user's password.fullName(string, optional): The user's full name.
- Response: User access token object.
Login
Authenticates a user and returns an access token.
- URL:
/api/login - Method:
POST - Body:
email(string, required): The user's email address.password(string, required): The user's password.
- Response: User access token object.
Logout
Logs out the current user by deleting the access token.
- URL:
/api/logout - Method:
DELETE - Authentication: Required
- Response:
{"message": "User logged out"}
Get Me
Retrieves information about the currently authenticated user.
- URL:
/api/me - Method:
GET - Authentication: Required
- Response:
{"user": { ...user data... }}or{"message": "Unauthorized"}
Restaurant Menus
Get All Menus
Retrieves all restaurant menus, preloading items and their categories.
- URL:
/api/menus - Method:
GET - Response: Array of menu objects.
Get One Menu
Retrieves a single restaurant menu by ID, preloading items and their categories.
- URL:
/api/menus - Method:
POST - Body:
id(number, required): The ID of the menu to retrieve.
- Response: Menu object.
Create Menu
Creates a new restaurant menu.
- URL:
/api/menus/create - Method:
POST - Authentication: Required (Admin)
- Body:
name(string, required): The name of the menu (e.g., "2025.09.08. Hétfő").nameHu(string, optional): Hungarian translation of the menu name.nameEn(string, optional): English translation of the menu name.
- Response: Created menu object.
Update Menu
Updates an existing restaurant menu.
- URL:
/api/menus - Method:
PUT - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the menu to update.name(string, optional): The new name of the menu.nameHu(string, optional): The new Hungarian name of the menu.nameEn(string, optional): The new English name of the menu.
- Response: Updated menu object.
Delete Menu
Deletes a restaurant menu and detaches all connected menu items.
- URL:
/api/menus - Method:
DELETE - Authentication: Required (Admin)
- Rate Limited: Yes
- Body:
id(number, required): The ID of the menu to delete.
- Response:
{"message": "Menu deleted"}or error.
Restaurant Menu Items
Get All Menu Items
Retrieves all restaurant menu items, preloading category and menus.
- URL:
/api/menu-items - Method:
GET - Response: Array of menu item objects.
Get One Menu Item
Retrieves a single restaurant menu item by ID, preloading category and menus.
- URL:
/api/menu-items - Method:
POST - Body:
id(number, required): The ID of the menu item to retrieve.
- Response: Menu item object.
Create Menu Item
Creates a new restaurant menu item. Note: This item must be manually attached to a menu using the /api/menu-items/attach endpoint.
- URL:
/api/menu-items/create - Method:
POST - Authentication: Required (Admin)
- Body:
name(string, required): The name of the menu item.nameHu(string, required): Hungarian translation of the item name.nameEn(string, required): English translation of the item name.priceSmall(number, required): The price for a small serving.priceLarge(number, required): The price for a large serving.description(string, optional): General description of the menu item.descriptionHu(string, optional): Hungarian translation of the description.descriptionEn(string, optional): English translation of the description.categoryId(number, optional): The ID of the category this item belongs to.
- Response: Created menu item object.
Update Menu Item
Updates an existing restaurant menu item.
- URL:
/api/menu-items - Method:
PUT - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the menu item to update.name(string, optional): The new name.nameHu(string, optional): The new Hungarian name.nameEn(string, optional): The new English name.priceSmall(number, optional): The new price for small.priceLarge(number, optional): The new price for large.description(string, optional): The new description.descriptionHu(string, optional): The new Hungarian description.descriptionEn(string, optional): The new English description.categoryId(number, optional): The new category ID.
- Response: Updated menu item object.
Attach Menu Item to Menu
Connects an existing menu item to a menu (many-to-many relationship).
- URL:
/api/menu-items/attach - Method:
POST - Authentication: Required (Admin)
- Rate Limited: No
- Body:
item_id(number, required): The ID of the menu item to attach.menu_id(number, required): The ID of the menu to attach the item to.
- Response:
{"message": "Menu item connected to menu"}
Delete Menu Item
Deletes a restaurant menu item and detaches it from all menus.
- URL:
/api/menu-items - Method:
DELETE - Authentication: Required (Admin)
- Rate Limited: Yes
- Body:
id(number, required): The ID of the menu item to delete.
- Response:
{"message": "Menu item deleted"}or error.
Users (Administrators Only)
Get All Users
Retrieves all users.
- URL:
/api/users - Method:
GET - Authentication: Required (Admin)
- Response: Array of user objects.
Get One User
Retrieves a single user by ID.
- URL:
/api/users/get-one - Method:
POST - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the user to retrieve.
- Response: User object.
Update User
Updates an existing user.
- URL:
/api/users - Method:
PUT - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the user to update.email(string, optional): The new email of the user.fullName(string, optional): The new full name of the user.role(string, optional): The new role of the user (e.g., 'user', 'admin').
- Response: Updated user object.
Delete User
Deletes a user.
- URL:
/api/users - Method:
DELETE - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the user to delete.
- Response:
{"message": "User deleted"}or success.
Categories
Get All Categories
Retrieves all categories.
- URL:
/api/categories - Method:
GET - Response: Array of category objects.
Get One Category
Retrieves a single category by ID.
- URL:
/api/categories - Method:
POST - Body:
id(number, required): The ID of the category to retrieve.
- Response: Category object.
Create Category
Creates a new category.
- URL:
/api/categories/create - Method:
POST - Authentication: Required (Admin)
- Body:
name(string, required): The name of the category.nameHu(string, optional): Hungarian translation of the name.nameEn(string, optional): English translation of the name.slug(string, required): The slug of the category.
- Response: Created category object.
Update Category
Updates an existing category.
- URL:
/api/categories - Method:
PUT - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the category to update.name(string, optional): The new name.nameHu(string, optional): The new Hungarian name.nameEn(string, optional): The new English name.slug(string, optional): The new slug.
- Response: Updated category object.
Delete Category
Deletes a category.
- URL:
/api/categories - Method:
DELETE - Authentication: Required (Admin)
- Rate Limited: Yes
- Body:
id(number, required): The ID of the category to delete.
- Response:
{"message": "Category deleted"}or error.
Images
List Images
Retrieves a list of all uploaded images.
- URL:
/api/images - Method:
GET - Authentication: Required (Admin)
- Response:
[{"filename": "...", "url": "...", "thumbnailUrl": "..."}]
Upload Image
Uploads an image for menu items or categories. Supported extensions: jpg, jpeg, png, webp, gif. Max size: 10mb. Automatically generates a 200px wide thumbnail.
- URL:
/api/images/upload - Method:
POST - Authentication: Required (Admin)
- Body:
image(file, required): The image file to upload.
- Response:
{"filename": "...", "url": "...", "thumbnailUrl": "..."}
Show Image
Retrieves and displays a previously uploaded image.
- URL:
/api/images/:filename - Method:
GET - Query Parameters:
type(string, optional): Usethumbnailto retrieve the 200px wide thumbnail.
- Response: Image stream with correct MIME type.
Room Reservations
Get All Rooms
Retrieves a list of all available rooms.
- URL:
/api/room-reservations/rooms - Method:
GET - Response: Array of room objects.
Create Room
Creates a new room.
- URL:
/api/room-reservations/rooms - Method:
POST - Authentication: Required (Admin)
- Body:
name(string, required): The name of the room.capacity(number, required): The capacity of the room.description(string, optional): A description of the room.
- Response: Created room object.
Update Room
Updates an existing room.
- URL:
/api/room-reservations/rooms - Method:
PUT - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the room to update.name(string, optional): The new name.capacity(number, optional): The new capacity.description(string, optional): The new description.
- Response: Updated room object.
Delete Room
Deletes a room.
- URL:
/api/room-reservations/rooms - Method:
DELETE - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the room to delete.
- Response:
{"message": "Room deleted"}
Get All Reservations
Retrieves a list of all room reservations, preloading room details.
- URL:
/api/room-reservations/reservations - Method:
GET - Response: Array of reservation objects.
Create Reservation
Creates a new room reservation.
- URL:
/api/room-reservations/reservations - Method:
POST - Authentication: Required (Admin)
- Body:
roomId(number, required): The ID of the room.customerName(string, required): The name of the customer.customerPhone(string, required): The phone number of the customer.guestsCount(number, required): Number of guests.startsAt(string, required): Start time (ISO 8601).endsAt(string, required): End time (ISO 8601).notes(string, optional): Additional notes.
- Response: Created reservation object.
Update Reservation
Updates an existing reservation.
- URL:
/api/room-reservations/reservations - Method:
PUT - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the reservation to update.roomId(number, optional): The new room ID.customerName(string, optional): The new customer name.customerPhone(string, optional): The new customer phone.guestsCount(number, optional): The new guests count.startsAt(string, optional): The new start time.endsAt(string, optional): The new end time.status(string, optional): The new status ('confirmed' or 'cancelled').notes(string, optional): New notes.
- Response: Updated reservation object.
Delete Reservation
Deletes a reservation.
- URL:
/api/room-reservations/reservations - Method:
DELETE - Authentication: Required (Admin)
- Body:
id(number, required): The ID of the reservation to delete.
- Response:
{"message": "Reservation deleted"}
Rate Limiting
Some endpoints (like login, registration, and deletion) are protected by rate limiting to prevent abuse. If you receive a 429 Too Many Requests response, please wait before trying again.