POST
projects:write/api/public/v1/projects/{id}/cloneParámetros
idProyecto de origen.
Body de entrada
PublicProjectClone
Clonar proyecto
Datos del nuevo proyecto y opciones de contenido que se copia desde el proyecto de origen.
PropiedadTipoDescripción
codestring | nullCódigo manual. Es obligatorio si no se indica una serie y no existe una serie predeterminada.nameobligatoriostringNombre del proyecto.numberingLineIduuid | nullSerie de proyectos usada para generar el código.descriptionstring | nullDescripción general.integrationCodestring | nullCódigo de referencia del sistema externo.colorstring | nullColor identificativo.clientIduuid | nullCliente asociado.projectStateIduuid | nullEstado del proyecto.projectTypeIduuid | nullTipo de proyecto.addressstring | nullDirección de la obra.zipCodestring | nullCódigo postal.countryIdinteger | nullPaís.regionIdinteger | nullRegión o provincia.townstring | nullLocalidad.latitudenumber | nullLatitud GPS.longitudenumber | nullLongitud GPS.gpsPrecisioninteger | nullPrecisión GPS en metros.expectedStartDatedate-time | nullInicio previsto.expectedEndDatedate-time | nullFin previsto.startWorkDatedate-time | nullInicio real de los trabajos.endWorkDatedate-time | nullFin de los trabajos.estimatedEndWorkDatedate-time | nullFin estimado actualizado.contractualEndDatedate-time | nullFin contractual.realEndWorkDatedate-time | nullFin real.executionTimestring | nullPlazo de ejecución.salesBudgetnumberPresupuesto de venta.changeOrdersBudgetnumberPresupuesto de contradictorios.penaltiesstring | nullCondiciones de penalización.clientPaymentFormstring | nullCondiciones de pago del cliente.retentionsstring | nullCondiciones de retenciones.bankGuarantystring | nullCondiciones de aval bancario.paymentFormIduuid | nullForma de pago.vatTypeIduuid | nullTipo de IVA.pitRetentionTypeIduuid | nullTipo de retención IRPF.taxRemarksstring | nullObservaciones fiscales.overheadPercentagenumber | nullPorcentaje de gastos generales.industrialProfitPercentagenumber | nullPorcentaje de beneficio industrial.exportOverheadPercentagenumber | nullPorcentaje de gastos generales usado en exportaciones.exportIndustrialProfitPercentagenumber | nullPorcentaje de beneficio industrial usado en exportaciones.currencystring | nullCódigo de moneda.activebooleanEstado activo.closedbooleanIndica si el proyecto está cerrado.cloneProjectSituationsbooleanActiva esta opción de clonado.cloneInspectionPlanbooleanActiva esta opción de clonado.clonePlanningbooleanActiva esta opción de clonado.cloneBudgetbooleanActiva esta opción de clonado.cloneAdditionalPricesbooleanActiva esta opción de clonado.copyPurchaseGeneralDatabooleanActiva esta opción de clonado.clonePurchaseOffersbooleanActiva esta opción de clonado.cloneProjectDatabooleanActiva esta opción de clonado.cloneProjectCoordinatesbooleanActiva esta opción de clonado.cloneProjectTeambooleanActiva esta opción de clonado.cloneOtherComponentsbooleanActiva esta opción de clonado.Ejemplo JSON
{
"name": "Reforma Gran Vía — copia",
"numberingLineId": "89f378ce-b1fc-49ef-97f9-0806f32b8438",
"description": "Reforma integral de oficinas",
"clientId": "a4c7603a-8c87-46c8-a3f5-09fbbe79f82e",
"address": "Gran Vía 42",
"zipCode": "28013",
"town": "Madrid",
"latitude": 40.4201,
"longitude": -3.7058,
"gpsPrecision": 5,
"expectedStartDate": "2026-11-02T08:00:00",
"expectedEndDate": "2027-04-30T18:00:00",
"salesBudget": 350000,
"overheadPercentage": 7.5,
"industrialProfitPercentage": 6,
"currency": "EUR",
"active": true,
"closed": false,
"cloneProjectData": true,
"cloneProjectCoordinates": true,
"clonePlanning": true
}Respuesta
201Clonado completado en la petición.202Proyecto creado y clonado pesado en segundo plano.
PublicProject
Proyecto
Ficha pública completa del proyecto, con nombres de catálogos y estado del clonado.
PropiedadTipoDescripción
idobligatoriouuidIdentificador estable del proyecto.codestring | nullCódigo manual. Es obligatorio si no se indica una serie y no existe una serie predeterminada.nameobligatoriostringNombre del proyecto.numberingLineIduuid | nullSerie de proyectos usada para generar el código.descriptionstring | nullDescripción general.integrationCodestring | nullCódigo de referencia del sistema externo.colorstring | nullColor identificativo.clientIduuid | nullCliente asociado.projectStateIduuid | nullEstado del proyecto.projectTypeIduuid | nullTipo de proyecto.addressstring | nullDirección de la obra.zipCodestring | nullCódigo postal.countryIdinteger | nullPaís.regionIdinteger | nullRegión o provincia.townstring | nullLocalidad.latitudenumber | nullLatitud GPS.longitudenumber | nullLongitud GPS.gpsPrecisioninteger | nullPrecisión GPS en metros.expectedStartDatedate-time | nullInicio previsto.expectedEndDatedate-time | nullFin previsto.startWorkDatedate-time | nullInicio real de los trabajos.endWorkDatedate-time | nullFin de los trabajos.estimatedEndWorkDatedate-time | nullFin estimado actualizado.contractualEndDatedate-time | nullFin contractual.realEndWorkDatedate-time | nullFin real.executionTimestring | nullPlazo de ejecución.salesBudgetnumberPresupuesto de venta.changeOrdersBudgetnumberPresupuesto de contradictorios.penaltiesstring | nullCondiciones de penalización.clientPaymentFormstring | nullCondiciones de pago del cliente.retentionsstring | nullCondiciones de retenciones.bankGuarantystring | nullCondiciones de aval bancario.paymentFormIduuid | nullForma de pago.vatTypeIduuid | nullTipo de IVA.pitRetentionTypeIduuid | nullTipo de retención IRPF.taxRemarksstring | nullObservaciones fiscales.overheadPercentagenumber | nullPorcentaje de gastos generales.industrialProfitPercentagenumber | nullPorcentaje de beneficio industrial.exportOverheadPercentagenumber | nullPorcentaje de gastos generales usado en exportaciones.exportIndustrialProfitPercentagenumber | nullPorcentaje de beneficio industrial usado en exportaciones.currencystring | nullCódigo de moneda.activebooleanEstado activo.closedbooleanIndica si el proyecto está cerrado.clientNamestring | nullNombre del cliente.projectStateNamestring | nullNombre del estado.projectTypeNamestring | nullNombre del tipo de proyecto.countryNamestring | nullNombre del país.regionNamestring | nullNombre de la región.paymentFormNamestring | nullNombre de la forma de pago.vatTypeNamestring | nullNombre del tipo de IVA.pitRetentionTypeNamestring | nullNombre del tipo de retención.cloneStateIdobligatoriointegerEstado del proceso de clonado: 0 normal, -1 clonando y -2 fallido.createdAtobligatoriodate-timeFecha de creación.modifiedAtobligatoriodate-timeÚltima modificación.Ejemplo JSON
{
"id": "0d3fa80a-d8aa-4a95-84b7-8f6a157005ea",
"code": "OBR-2026-0042",
"name": "Reforma Gran Vía",
"numberingLineId": "89f378ce-b1fc-49ef-97f9-0806f32b8438",
"description": "Reforma integral de oficinas",
"clientId": "a4c7603a-8c87-46c8-a3f5-09fbbe79f82e",
"address": "Gran Vía 42",
"zipCode": "28013",
"town": "Madrid",
"latitude": 40.4201,
"longitude": -3.7058,
"gpsPrecision": 5,
"expectedStartDate": "2026-11-02T08:00:00",
"expectedEndDate": "2027-04-30T18:00:00",
"salesBudget": 350000,
"overheadPercentage": 7.5,
"industrialProfitPercentage": 6,
"currency": "EUR",
"active": true,
"closed": false,
"clientName": "Cliente SL",
"projectStateName": "En curso",
"projectTypeName": "Reforma",
"cloneStateId": 0,
"createdAt": "2026-10-10T12:00:00",
"modifiedAt": "2026-10-10T12:00:00"
}Ejemplo de respuesta
{
"id": "78315adf-87e5-47a6-a369-9de93065354b",
"code": "OBR-2026-0042",
"name": "Reforma Gran Vía — copia",
"numberingLineId": "89f378ce-b1fc-49ef-97f9-0806f32b8438",
"description": "Reforma integral de oficinas",
"clientId": "a4c7603a-8c87-46c8-a3f5-09fbbe79f82e",
"address": "Gran Vía 42",
"zipCode": "28013",
"town": "Madrid",
"latitude": 40.4201,
"longitude": -3.7058,
"gpsPrecision": 5,
"expectedStartDate": "2026-11-02T08:00:00",
"expectedEndDate": "2027-04-30T18:00:00",
"salesBudget": 350000,
"overheadPercentage": 7.5,
"industrialProfitPercentage": 6,
"currency": "EUR",
"active": true,
"closed": false,
"clientName": "Cliente SL",
"projectStateName": "En curso",
"projectTypeName": "Reforma",
"cloneStateId": -1,
"createdAt": "2026-10-10T12:00:00",
"modifiedAt": "2026-10-10T12:00:00"
}Errores
400Solicitud incorrectaapplication/json401Autenticación inválida o no proporcionadaapplication/json403Permisos insuficientesapplication/json404Recurso no encontradoapplication/json409Conflicto con el estado actualapplication/json410Recurso ya no disponibleapplication/json422Error de validaciónapplication/json429Límite de solicitudes excedidoapplication/jsonVer modelo de error
PublicApiError
Error de API
Formato estable de los errores públicos.
PropiedadTipoDescripción
statusobligatoriointegerCódigo HTTP.codeobligatoriostringCódigo estable para tratamiento automático.messageobligatoriostringMensaje legible.correlationIdobligatoriostringIdentificador para soporte y trazabilidad.currentConcurrencyTokenstring | nullToken actual cuando existe un conflicto.validationErrorsobject<string,string[]>Errores agrupados por campo.Ejemplo JSON
{
"status": 422,
"code": "validation_error",
"message": "The request is invalid.",
"correlationId": "01J9EXAMPLE",
"validationErrors": {
"unitCode": [
"The unit does not exist."
]
}
}