Partes de trabajo · API PÚBLICA V1

Crear un parte

Crea siempre en estado pending. La numeración aplica manual, serie explícita y serie predeterminada, en ese orden.

Conectar con un entornoSin token

La petición sale de tu navegador hacia el entorno indicado. La API key y el token permanecen en la memoria de esta página.

Introduce las credenciales del entorno que quieras probar.
POST/api/public/v1/daily-reports
daily-reports:write

Body de entrada

PublicDailyReportWrite

Crear o actualizar un parte

Datos editables. La creación siempre usa el estado pending. Un número manual prevalece sobre la serie explícita y sobre la predeterminada.

PropiedadTipoDescripción
employeeIdobligatoriouuidGUID público EmployeeId del empleado.
dateobligatoriodate-time localFecha del parte en el huso del tenant.
projectIdobligatoriouuidProyecto abierto.
purchaseIduuid | nullCompra asociada.
estimatedBatchIduuid | nullDescompuesto estimado seleccionable.
timeInHoursobligatorionumberHoras imputadas.
hourTypeIdobligatoriouuidIdentificador del tipo de hora; debe existir una asignación activa única para empleado y fecha.
workTypeobligatoriobyMeasurement | byAdministrationTipo de trabajo.
operatingCostbooleanImputación a gasto de explotación.
descriptionstring | nullDescripción, máximo 256 caracteres.
numberstring | nullNúmero manual.
numberingLineIduuid | nullSerie de partes usada si no se informa number.
customFieldscustom field[]Valores completos que sustituyen los anteriores.
Ejemplo JSON
{
  "employeeId": "a5fc8a9c-66da-429d-9bed-5280a4185348",
  "date": "2026-10-16T08:00:00",
  "projectId": "0d3fa80a-d8aa-4a95-84b7-8f6a157005ea",
  "purchaseId": "d58ca62e-5277-487f-a26f-6d3ecdf13d57",
  "timeInHours": 8,
  "hourTypeId": "d886784c-c76f-4c76-9726-cf2f842c8c17",
  "workType": "byAdministration",
  "description": "Montaje de tabiquería",
  "numberingLineId": "89f378ce-b1fc-49ef-97f9-0806f32b8438",
  "customFields": []
}

Respuesta

201Parte creado.

PublicDailyReport

Parte de trabajo

Ficha completa con campos personalizados e historial. costPerHour y totalCost solo aparecen con daily-reports:costs:read o all:read.

PropiedadTipoDescripción
idobligatoriouuidIdentificador del parte.
numberstring | nullNúmero aplicado.
dateobligatoriodate-time localFecha del parte.
employeeIdobligatoriouuidGUID público del empleado.
projectIdobligatoriouuidProyecto.
timeInHoursobligatorionumberHoras.
hourTypeIduuid | nullIdentificador del tipo de hora. Puede ser nulo en partes heredados.
hourTypeSystemIdinteger | nullIdentificador opcional de un tipo predeterminado.
workTypeobligatoriobyMeasurement | byAdministrationTipo de trabajo.
stateobligatoriopending | validated | rejectedEstado actual.
customFieldsobligatoriocustom field[]Valores personalizados.
historyobligatoriohistory item[]Historial cronológico de estados.
costPerHournumberCoste protegido por scope.
totalCostnumberCoste total protegido por scope.
createdAtobligatoriodate-timeCreación.
modifiedAtobligatoriodate-timeÚltima modificación.
Ejemplo JSON
{
  "id": "29061c20-371c-4471-8648-c7332d57ed45",
  "number": "PT-2026-0042",
  "date": "2026-10-16T08:00:00",
  "employeeId": "a5fc8a9c-66da-429d-9bed-5280a4185348",
  "projectId": "0d3fa80a-d8aa-4a95-84b7-8f6a157005ea",
  "timeInHours": 8,
  "hourTypeId": "d886784c-c76f-4c76-9726-cf2f842c8c17",
  "hourTypeSystemId": 1,
  "workType": "byAdministration",
  "state": "pending",
  "customFields": [],
  "history": [
    {
      "createdAt": "2026-10-10T12:00:00",
      "state": "pending"
    }
  ],
  "createdAt": "2026-10-10T12:00:00",
  "modifiedAt": "2026-10-10T12:00:00"
}
Ejemplo de respuesta
{
  "id": "29061c20-371c-4471-8648-c7332d57ed45",
  "number": "PT-2026-0042",
  "date": "2026-10-16T08:00:00",
  "employeeId": "a5fc8a9c-66da-429d-9bed-5280a4185348",
  "projectId": "0d3fa80a-d8aa-4a95-84b7-8f6a157005ea",
  "timeInHours": 8,
  "hourTypeId": "d886784c-c76f-4c76-9726-cf2f842c8c17",
  "hourTypeSystemId": 1,
  "workType": "byAdministration",
  "state": "pending",
  "customFields": [],
  "history": [
    {
      "createdAt": "2026-10-10T12:00:00",
      "state": "pending"
    }
  ],
  "createdAt": "2026-10-10T12:00:00",
  "modifiedAt": "2026-10-10T12:00:00"
}

Errores

400Solicitud incorrectaapplication/json
401Autenticación inválida o no proporcionadaapplication/json
403Permisos insuficientesapplication/json
404Recurso no encontradoapplication/json
409Conflicto con el estado actualapplication/json
410Recurso ya no disponibleapplication/json
422Error de validaciónapplication/json
429Límite de solicitudes excedidoapplication/json
Ver 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."
    ]
  }
}
Probar endpointPetición directa desde el navegador

JSON resultante

{}

Petición

RespuestaSin ejecutar
Configura la conexión y ejecuta la petición.