Destinations are the editorial backbone of the Maleku System platform — rich travel guides curated by administrators that cover Costa Rica’s regions, provinces, cantons, and districts. Each destination entry holds geographic coordinates, cultural content, practical travel information, media galleries, and SEO metadata. Public read endpoints are cached to maximise performance; write operations require elevated roles and automatically invalidate the cache.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/IvanchoDev89/maleku-system/llms.txt
Use this file to discover all available pages before exploring further.
Destination records are admin-managed CMS content. Only users with the
admin or super_admin role can create, update, or delete destinations. All public read endpoints are unauthenticated.GET /api/v1/destinations/
List active destinations with optional filtering, sorting, and pagination. Whenpage_size is 0 (default), the endpoint returns a flat array and caches the result for 600 seconds. When page_size > 0, paginated mode is activated and caching is skipped to ensure accurate totals.
Filter by Costa Rica region (e.g.
Guanacaste, Puntarenas, Heredia).Filter by province.
When
true, returns only destinations marked as featured.Searches across
name and description using ILIKE pattern matching.Exclude soft-deleted and inactive destinations.
Page number (requires
page_size > 0 to activate paginated mode).Items per page. Range: 0–100. Set to
0 for a flat unpaginated list.Sort field. Allowed values:
order, name, created_at, region, province, is_featured.Sort direction:
asc or desc.page_size=0)
GET /api/v1/destinations/hierarchy
Returns a geographic hierarchy tree of active destinations grouped byregion and province with item counts. Result is cached for 600 seconds.
GET /api/v1/destinations/
Retrieve a single destination by its UUID or URL slug. The response is cached for 900 seconds under both the ID-based and slug-based cache keys. Path parameter: UUID or slug string (e.g.manuel-antonio or 1a2b3c4d-...).
Example request
DestinationResponse
POST /api/v1/destinations/
Create a new destination. Requiressuper_admin role. Auto-generates a slug from the name field if not provided. Rate-limited to 10 requests per minute.
Request body — DestinationCreate
201 Created with the full DestinationResponse.
PUT /api/v1/destinations/
Update an existing destination. Requiresadmin or super_admin role. Only fields included in the request body are updated (partial update). Invalidates all destination cache tags on success. Rate-limited to 10 requests per minute.
DELETE /api/v1/destinations/
Soft-delete a destination — setsis_active = false and records a deleted_at timestamp. Requires super_admin role. The record is excluded from all list and detail queries after deletion but remains in the database.
Response
PUT /api/v1/destinations//order
Update the display sort order of a destination. Requiressuper_admin role. Pass the new integer order value as a query parameter.
Key Destination Fields
Unique identifier.
Display name. Minimum 2 characters, maximum 255.
URL-friendly unique identifier. Auto-generated from
name if omitted.Top-level geographic region (e.g.
Guanacaste).Costa Rica province.
Main editorial description. HTML is stripped before storage.
Short list of notable highlights for use in cards and previews.
Activity suggestions for the destination.
WGS-84 coordinates. Latitude must be −90 to 90; longitude −180 to 180.
Primary image URL (must start with
http://, https://, or /).Array of additional image URLs.
When
true the destination is promoted in hero sections and featured lists.Display sort order. Lower values appear first. Default:
0.Trip Planner
Authenticated users can build multi-destination itineraries using the Trip Planner API. Plans group individual items (accommodations, tours, transport, flights, boats) by day index and compute a live price breakdown including package discounts and commission splits.Trip Plan Endpoints
| Method | Path | Description |
|---|---|---|
POST | /api/v1/trip_planner/plans | Create a new trip plan (status: draft) |
GET | /api/v1/trip_planner/plans | List the authenticated user’s plans |
GET | /api/v1/trip_planner/plans/{plan_id} | Get plan with all items |
PUT | /api/v1/trip_planner/plans/{plan_id} | Update plan metadata |
DELETE | /api/v1/trip_planner/plans/{plan_id} | Delete a plan |
POST | /api/v1/trip_planner/plans/{plan_id}/items | Add an item to a plan |
PUT | /api/v1/trip_planner/items/{item_id} | Update an item |
DELETE | /api/v1/trip_planner/items/{item_id} | Remove an item from a plan |
GET | /api/v1/trip_planner/plans/{plan_id}/price | Get full price breakdown |
POST | /api/v1/trip_planner/plans/{plan_id}/reprice | Recalculate all item prices |
draft → pricing → ready → booked
Item reference_type values: property, tour, transportation, flight, vehicle, boat
Item item_type values: accommodation, tour, transport, car_rental, boat, flight, meal, other
Each item automatically fetches the current price from the referenced listing on creation. Use POST /plans/{id}/reprice to refresh all prices after date changes.