Asocia a una solicitud de trabajo existente uno o varios adjuntos: archivos ya subidos al almacenamiento de Fracttal y/o links. Archivos y links se pueden combinar en una misma petición. No se admiten adjuntos de tipo nota.
Adjuntar un archivo es un proceso de 3 pasos. Este servicio corresponde al paso 3:
- Solicite las credenciales de subida con Obtener credenciales de subida de archivos (
POST /api/s3_object), enviandonameysizedel archivo. - Suba el archivo directamente al almacenamiento con una petición
POSTde tipomultipart/form-data, usando las credenciales recibidas y enviando el campofileal final. - Llame a este servicio enviando en
pathsel valorkeyrecibido en el paso 1 (archivo) o la URL (link).
Para adjuntar únicamente links no es necesario ejecutar los pasos 1 y 2.
Parámetros de entrada
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id_request | entero | Sí | Código de la solicitud de trabajo (campo id_code) devuelto por GET /api/work_requests. Se envía en la ruta; si se envía en el body, se ignora. |
id_status | entero | Sí | Estado que se registra con el adjunto. Debe existir en el catálogo de estados de solicitud (se puede consultar con GET /api/work_requests_status). |
paths | array de objeto | Sí | Lista de adjuntos a asociar. Cada elemento es un archivo o un link. Ver estructura en las tablas siguientes. |
Estructura de cada elemento en paths — Archivo:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
name | texto | Sí | Valor key devuelto por Obtener credenciales de subida de archivos para el archivo ya subido. |
description | texto | No | Descripción del adjunto. |
Estructura de cada elemento en paths — Link:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
url | texto | Sí | Dirección del link. Debe comenzar con http:// o https://. Máximo 2048 caracteres. |
label | texto | No | Texto visible del link. Máximo 500 caracteres. Si no se envía, se usa la URL. |
Reglas depaths
- Cada elemento debe incluir
name(archivo) ourl(link). Si incluyeurl, se trata como link aunque también incluyaname.- La operación es atómica: si algún elemento de
pathses inválido, no se crea ningún adjunto.- Para adjuntar un archivo, primero deben haberse solicitado las credenciales de subida con su
size(paso 1).
Reglas de la solicitud
- Solo se pueden asociar adjuntos a solicitudes en estado Abierta (1), En proceso (2) o Resuelta sin OT (4).
- La solicitud debe pertenecer a la compañía del token utilizado.
- El usuario del token debe tener permiso de edición sobre Solicitudes.
Parámetros de salida
La respuesta incluye todos los adjuntos de la solicitud (los que ya tenía y los nuevos), no solo los recién asociados. El campo total se devuelve en 0.
| Parámetro | Tipo | Descripción |
|---|---|---|
success | booleano | Indica si la operación fue exitosa. |
message | texto | Código de resultado ("ACTION_DONE" si fue exitosa). |
data | array de objeto | Adjuntos de la solicitud. Ver estructura en la tabla siguiente. |
total | entero | Se devuelve en 0. |
Estructura de cada elemento en data:
| Parámetro | Tipo | Descripción |
|---|---|---|
id | entero | Identificador del adjunto. |
id_company | entero | Identificador de la compañía. |
id_request | entero | Identificador de la solicitud a la que pertenece el adjunto. |
id_status | entero | Estado registrado con el adjunto. |
path | texto | Para un archivo, el key del archivo. Para un link, la URL. |
description | texto | Descripción (archivo) o texto visible (link). |
date | texto | Fecha de creación del adjunto. |
size | entero | Tamaño del archivo en bytes. 0 para links. |
type | entero | Tipo de adjunto: 1 = Archivo, 2 = Link. |
name | texto | Nombre del adjunto. |
id_personnel_log / id_contacts_log | entero | Usuario o contacto que creó el adjunto. |
id_action_account | entero | Cuenta desde la que se realizó la acción. |
Errores
| Código | Causa |
|---|---|
400 — REQUEST_NOT_FOUND | La solicitud no existe o pertenece a otra compañía. |
400 — REQUEST_NOT_EDITABLE | El estado actual de la solicitud no admite adjuntos. |
400 — INVALID_STATUS | El id_status enviado no existe en el catálogo de estados de solicitud. |
400 — INVALID_URL | La url de un link no comienza con http:// o https://. |
400 — URL_TOO_LONG | La url de un link supera los 2048 caracteres. |
400 — INVALID_PATH | Un elemento de paths no incluye name ni url. |
400 — FILE_NOT_FOUND | El name enviado no corresponde a un archivo cuyas credenciales de subida hayan sido solicitadas por la compañía. |
400 — body is required | No se envió el body de la petición. |
400 — The request is poorly formed | No se envió el header Authorization. |
401 — INVALID_TOKEN | El token es inválido. |
Nota sobre los códigos de errorLos errores de validación se devuelven con
success: falsey el código del error en el campomessage(por ejemplo,"REQUEST_NOT_EDITABLE"). Use ese valor para identificar la causa.
Ejemplo
Request body
POST /api/work_requests_attachments_files/4010
{
"id_status": 1,
"paths": [
{
"name": "company_100/informe-mantenimiento.pdf",
"description": "Informe de la inspección"
},
{
"url": "https://ejemplo.com/manual-equipo",
"label": "Manual del equipo"
}
]
}Response 200
200{
"success": true,
"message": "ACTION_DONE",
"data": [
{
"id": 101,
"id_company": 100,
"id_request": 4010,
"id_status": 1,
"path": "company_100/informe-mantenimiento.pdf",
"description": "Informe de la inspección",
"date": "2026-10-06",
"size": 245760,
"type": 1
},
{
"id": 102,
"id_company": 100,
"id_request": 4010,
"id_status": 1,
"path": "https://ejemplo.com/manual-equipo",
"description": "Manual del equipo",
"date": "2026-10-06",
"size": 0,
"type": 2
}
],
"total": 0
}Response — Solicitud en un estado que no admite adjuntos (400)
400){
"success": false,
"message": "REQUEST_NOT_EDITABLE",
"data": [],
"total": 0
}Response — Archivo sin credenciales de subida previas (400)
400){
"success": false,
"message": "FILE_NOT_FOUND",
"data": [],
"total": 0
}OpenAPI definition
{
"openapi": "3.1.0",
"info": {
"title": "work_requests_attachments_files",
"version": "1-Es"
},
"servers": [
{
"url": "https://app.fracttal.com/api/work_requests_attachments_files"
}
],
"security": [
{}
],
"paths": {
"/{id_request}": {
"post": {
"summary": "Asociar adjuntos a una solicitud de trabajo",
"description": "",
"operationId": "asociar-adjuntos-a-una-solicitud-de-trabajo",
"parameters": [
{
"name": "id_request",
"in": "path",
"required": true,
"description": "Código de la solicitud de trabajo (campo id_code).",
"schema": {
"type": "integer"
}
}
],
"deprecated": false,
"security": []
}
}
},
"x-readme": {
"headers": [],
"explorer-enabled": false,
"proxy-enabled": true
},
"x-readme-fauxas": true
}