Restaurant partners — called asociados in the codebase — have a dedicated set of endpoints to manage their presence on the Debuta platform. Partners can maintain their restaurant profile, upload a cover photo and gallery (up to 10 images), manage a menu of up to 30 dishes, view date bookings that were matched to their venue, and review engagement statistics. Every endpoint in this group requires a JWT belonging to a user withDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/desarrolladorandres2026-gif/Native-tailwind/llms.txt
Use this file to discover all available pages before exploring further.
rol: 'asociado'.
The
asociado role is not self-assignable. It must be granted by a Debuta admin via PUT /api/admin/users/:id/role. Contact the platform team to have your account upgraded.The Restaurante Object
The full restaurant profile returned by most partner endpoints.
MenuItem schema
Endpoints
GET /api/asociado/restaurante
Get the partner’s restaurant profile.
PUT /api/asociado/restaurante
Update restaurant text information.
POST /api/asociado/restaurante/fotos
Upload restaurant photos to Cloudinary.
DELETE /api/asociado/restaurante/fotos/:publicId
Delete a restaurant photo.
PUT /api/asociado/restaurante/menu
Replace the entire menu array.
POST /api/asociado/restaurante/menu/plato
Add a single menu item.
DELETE /api/asociado/restaurante/menu/:platoId
Remove a menu item.
GET /api/asociado/citas
View date bookings at your restaurant.
GET /api/asociado/estadisticas
View engagement statistics.
GET /api/asociado/restaurante
Returns the restaurant profile linked to the authenticated partner. If no profile exists yet (first login), an empty profile document is automatically created and returned. Authentication: Bearer JWT withrol: 'asociado' required.
Response 200
curl example
PUT /api/asociado/restaurante
Updates any combination of the restaurant’s text fields. Only the fields provided in the request body are modified; omitted fields retain their current values. Runs validators defined in the schema (enum checks forcategoria, ambiente, precio_promedio).
Authentication: Bearer JWT with rol: 'asociado' required.
Request body (all fields optional)
Restaurant name. Max 150 chars.
Description. Max 500 chars.
Cuisine category (see enum values in the schema above).
Atmosphere type (see enum values above).
Street address. Max 300 chars.
City.
Phone number.
Hours description. Max 200 chars.
Price tier:
$, $$, $$$, or $$$$.Website URL.
Instagram handle.
Geographic latitude. Updates
location.coordinates automatically.Geographic longitude.
Response 200
Returns the full updated restaurante object (same shape as GET above).
curl example
POST /api/asociado/restaurante/fotos
Uploads one or more restaurant photos to Cloudinary. Accepts images as base64 strings. SetesPortada: true to designate the first uploaded image as the cover photo — any previously stored cover is deleted from Cloudinary first. Gallery photos are appended up to a maximum of 10 images.
Authentication: Bearer JWT with rol: 'asociado' required.
Content-Type: application/json
Request body
A single base64 image string, or an array of base64 strings to upload in batch.
If
true, treats the first image in fotos as the new cover photo (foto_portada). Defaults to false.Response 200
Error responses
| Status | Condition |
|---|---|
400 | Gallery already has 10 photos (non-cover upload). |
401 | Missing or invalid JWT / wrong role. |
curl example
DELETE /api/asociado/restaurante/fotos/:publicId
Deletes a restaurant photo from both the database and Cloudinary. Works for both cover photos and gallery images. ThepublicId must be URL-encoded if it contains slashes (e.g. restaurantes%2Fabc).
Authentication: Bearer JWT with rol: 'asociado' required.
Path parameters
URL-encoded Cloudinary
public_id of the photo to delete.Response 200
Returns the full updated restaurante object.
Error responses
| Status | Condition |
|---|---|
404 | Restaurant profile not found, or photo with that public_id does not exist. |
curl example
PUT /api/asociado/restaurante/menu
Replaces the restaurant’s entiremenu array in a single operation. Useful for bulk imports or reordering. The array must not exceed 30 items.
Authentication: Bearer JWT with rol: 'asociado' required.
Request body
Full replacement menu array. Each element is a MenuItem:
| Field | Type | Required | Description |
|---|---|---|---|
nombre | string | ✓ | Dish name |
descripcion | string | Dish description | |
precio | string | Price label, e.g. "$18.000" |
Response 200
Returns the full updated restaurante object.
curl example
POST /api/asociado/restaurante/menu/plato
Adds a single dish to the menu. Optionally accepts a base64 photo for the dish. The menu cannot exceed 30 items; a400 is returned if the limit is reached.
Authentication: Bearer JWT with rol: 'asociado' required.
Request body
Dish name. Cannot be blank.
Description of the dish.
Price label (free-form, e.g.
"$32.000").Optional base64-encoded dish photo uploaded to Cloudinary.
Response 200
Returns the full updated restaurante object with the new dish appended to menu.
Error responses
| Status | Condition |
|---|---|
400 | nombre is missing or blank. |
400 | Menu already has 30 items. |
curl example
DELETE /api/asociado/restaurante/menu/:platoId
Removes a single dish from the menu by its MongoDB_id. If the dish has a Cloudinary photo, it is also deleted from Cloudinary.
Authentication: Bearer JWT with rol: 'asociado' required.
Path parameters
MongoDB ObjectId of the dish to remove (available as
_id in the menu array).Response 200
Returns the full updated restaurante object.
Error responses
| Status | Condition |
|---|---|
404 | Restaurant not found, or platoId not in the menu. |
curl example
GET /api/asociado/citas
Returns a list of confirmed date bookings at the partner’s restaurant. A booking is created when the Debuta matching algorithm recommends the restaurant to a matched couple and both users accept the recommendation. Authentication: Bearer JWT withrol: 'asociado' required.
Response 200
ObjectId of the match document.
Array of two populated user objects (the couple).
Suggested date string, if one was set during recommendation.
ISO 8601 timestamp of when both users accepted.
Always
"aceptada" in this list.curl example
GET /api/asociado/estadisticas
Returns aggregate engagement statistics for the partner’s restaurant. Authentication: Bearer JWT withrol: 'asociado' required.
Response 200
Total number of confirmed (accepted) date bookings at this restaurant since it joined the platform.
Confirmed bookings in the current calendar month (resets on the 1st).
Recommendations that have been made but not yet accepted by both users.