bymundi API

Duplicate a trip

POST/v1/trips/{tripId}/duplicate

Copies a trip as Copia de …, in draft, as the app's Duplicate does. The copy keeps the design, dates, headcount, cover and itinerary blocks. It does not copy travellers, quotes, documents, chat or presentation. Only a trip with a design (route) can be duplicated. Undo by archiving the copy.

Permissions: trips:write · Kind: write · Cost: 1 unit · MCP tool duplicate_trip

Undo with Archive a trip.

Path parameters

Field Type Required Description
tripId uuid yes

Body

None.

Response 201

Field Type Required Description
object "trip" yes
id uuid yes
code string yes
title string yes
startDate string | null yes
endDate string | null yes
publication "draft" | "published" yes
commercialState "nueva" | "propuesta_enviada" | "aceptada" | "reserva_provisional" | "reservada" | "rechazada" | "cancelada" yes
travelers integer yes
ownerId uuid | null yes
design object | null yes
design.version 1 yes
design.originCity string yes
design.stops object[] yes max 60 items
design.stops[].id string yes
design.stops[].city string yes
design.stops[].nights integer yes 0–365
design.stops[].transferBefore object | null yes
design.stops[].escala boolean default false
design.stops[].place object default {"placeId":"","lat":null,"lng":null,"formattedAddress":""}
design.returnCity string | null yes
design.returnTransfer object | null yes
design.returnTransfer.id string yes
design.returnTransfer.departDate string | null yes
design.returnTransfer.arriveDate string | null yes
design.returnTransfer.days integer 0–30, default 0
design.returnTransfer.departTime string default ""
design.returnTransfer.arriveTime string default ""
design.returnTransfer.flight object default {"flightNo":"","airline":"","fromAirport":"","toAirport":"","source":"","fetchedAt":"","scheduleValidFor":""}
design.originPlace object default {"placeId":"","lat":null,"lng":null,"formattedAddress":""}
design.originPlace.placeId string default ""
design.originPlace.lat number | null default null
design.originPlace.lng number | null default null
design.originPlace.formattedAddress string default ""
design.returnPlace object default {"placeId":"","lat":null,"lng":null,"formattedAddress":""}
design.returnPlace.placeId string default ""
design.returnPlace.lat number | null default null
design.returnPlace.lng number | null default null
design.returnPlace.formattedAddress string default ""
presentation object yes
presentation.logoUrl uri | null
presentation.brandColor string | null
presentation.fontFamily "inter" | "montserrat" | "poppins" | "lora" | "playfair" | "source-sans" | null
presentation.headerMedia object | null
presentation.headerMedia.type "image" | "video" yes
presentation.headerMedia.url uri yes
profile object yes
profile.pace "relajado" | "equilibrado" | "intenso" | null default null
profile.profiles "primera_vez" | "repetidor" | "familia_ninos" | "pareja" | "grupo" | "senior" | "movilidad_reducida" | "cultural" | "gastronomico" | "naturaleza" | "fotografia" | "otaku" | "compras" | "presupuesto_ajustado" | "premium"[] default []
profile.mobility "normal" | "reducida" default "normal"
profile.avoid string[] default []
profile.notes string default ""
coverImageUrl string | null yes
coverage object | null yes
coverage.state "sin_cobros" | "pago_parcial" | "pagado" yes
coverage.percent integer yes
coverage.overpaid boolean yes
metadata object yes
appUrl string | null yes
publicUrl string | null yes
createdAt string yes
updatedAt string yes

Errors

Errors are problem details. Besides the refusals described above, any call like this one can return: