Associa a uma solicitação de trabalho existente um ou vários anexos: arquivos já enviados ao armazenamento da Fracttal e/ou links. Arquivos e links podem ser combinados na mesma requisição. Não são aceitos anexos do tipo nota.
Anexar um arquivo é um processo de 3 passos. Este serviço corresponde ao passo 3:
- Solicite as credenciais de envio com Obter credenciais de envio de arquivos (
POST /api/s3_object), enviandonameesizedo arquivo. - Envie o arquivo diretamente ao armazenamento com uma requisição
POSTdo tipomultipart/form-data, usando as credenciais recebidas e enviando o campofilepor último. - Chame este serviço enviando em
pathso valorkeyrecebido no passo 1 (arquivo) ou a URL (link).
Para anexar apenas links, não é necessário executar os passos 1 e 2.
Uso geral — sem add-on específico.
POST https://app.fracttal.com/api/work_requests_attachments_files/{id_request}Parâmetros de entrada
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id_request | inteiro | Sim | Código da solicitação de trabalho (campo id_code) retornado por GET /api/work_requests. É enviado na rota; se for enviado no body, é ignorado. |
id_status | inteiro | Sim | Status registrado com o anexo. Deve existir no catálogo de status de solicitação (pode ser consultado com GET /api/work_requests_status). |
paths | array de objeto | Sim | Lista de anexos a associar. Cada elemento é um arquivo ou um link. Veja a estrutura nas tabelas seguintes. |
Estrutura de cada elemento em paths — Arquivo:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | texto | Sim | Valor key retornado por Obter credenciais de envio de arquivos para o arquivo já enviado. |
description | texto | Não | Descrição do anexo. |
Estrutura de cada elemento em paths — Link:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url | texto | Sim | Endereço do link. Deve começar com http:// ou https://. Máximo de 2048 caracteres. |
label | texto | Não | Texto visível do link. Máximo de 500 caracteres. Se não for enviado, a URL é utilizada. |
Regras depaths
- Cada elemento deve incluir
name(arquivo) ouurl(link). Se incluirurl, é tratado como link mesmo que também incluaname.- A operação é atômica: se algum elemento de
pathsfor inválido, nenhum anexo é criado.- Para anexar um arquivo, as credenciais de envio devem ter sido solicitadas antes com o seu
size(passo 1).
Regras da solicitação
- Só é possível associar anexos a solicitações com status Aberta (1), Em andamento (2) ou Resolvida sem OS (4).
- A solicitação deve pertencer à empresa do token utilizado.
- O usuário do token deve ter permissão de edição em Solicitações.
Parâmetros de saída
A resposta inclui todos os anexos da solicitação (os que já existiam e os novos), não apenas os recém-associados. O campo total é retornado como 0.
| Parâmetro | Tipo | Descrição |
|---|---|---|
success | booleano | Indica se a operação foi bem-sucedida. |
message | texto | Código de resultado ("ACTION_DONE" se bem-sucedida). |
data | array de objeto | Anexos da solicitação. Veja a estrutura na tabela seguinte. |
total | inteiro | É retornado como 0. |
Estrutura de cada elemento em data:
| Parâmetro | Tipo | Descrição |
|---|---|---|
id | inteiro | Identificador do anexo. |
id_company | inteiro | Identificador da empresa. |
id_request | inteiro | Identificador da solicitação à qual o anexo pertence. |
id_status | inteiro | Status registrado com o anexo. |
path | texto | Para um arquivo, o key do arquivo. Para um link, a URL. |
description | texto | Descrição (arquivo) ou texto visível (link). |
date | texto | Data de criação do anexo. |
size | inteiro | Tamanho do arquivo em bytes. 0 para links. |
type | inteiro | Tipo de anexo: 1 = Arquivo, 2 = Link. |
name | texto | Nome do anexo. |
id_personnel_log / id_contacts_log | inteiro | Usuário ou contato que criou o anexo. |
id_action_account | inteiro | Conta a partir da qual a ação foi realizada. |
Erros
| Código | Causa |
|---|---|
400 — REQUEST_NOT_FOUND | A solicitação não existe ou pertence a outra empresa. |
400 — REQUEST_NOT_EDITABLE | O status atual da solicitação não permite anexos. |
400 — INVALID_STATUS | O id_status enviado não existe no catálogo de status de solicitação. |
400 — INVALID_URL | A url de um link não começa com http:// ou https://. |
400 — URL_TOO_LONG | A url de um link excede 2048 caracteres. |
400 — INVALID_PATH | Um elemento de paths não inclui name nem url. |
400 — FILE_NOT_FOUND | O name enviado não corresponde a um arquivo cujas credenciais de envio tenham sido solicitadas pela empresa. |
400 — body is required | O body da requisição não foi enviado. |
400 — The request is poorly formed | O header Authorization não foi enviado. |
401 — INVALID_TOKEN | O token é inválido. |
Nota sobre os códigos de erroOs erros de validação são retornados com
success: falsee o código do erro no campomessage(por exemplo,"REQUEST_NOT_EDITABLE"). Use esse valor para identificar a causa.
Exemplo
Request body
POST /api/work_requests_attachments_files/4010
{
"id_status": 1,
"paths": [
{
"name": "company_100/informe-mantenimiento.pdf",
"description": "Relatório da inspeção"
},
{
"url": "https://ejemplo.com/manual-equipo",
"label": "Manual do equipamento"
}
]
}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": "Relatório da inspeção",
"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 do equipamento",
"date": "2026-10-06",
"size": 0,
"type": 2
}
],
"total": 0
}Response — Solicitação em um status que não permite anexos (400)
400){
"success": false,
"message": "REQUEST_NOT_EDITABLE",
"data": [],
"total": 0
}Response — Arquivo sem credenciais de envio prévias (400)
400){
"success": false,
"message": "FILE_NOT_FOUND",
"data": [],
"total": 0
}OpenAPI definition
{
"openapi": "3.1.0",
"info": {
"title": "work_requests_attachments_files",
"version": "3-pt"
},
"servers": [
{
"url": "https://app.fracttal.com/api/work_requests_attachments_files"
}
],
"security": [
{}
],
"paths": {
"/{id_request}": {
"post": {
"summary": "Associar anexos a uma solicitação de trabalho",
"description": "",
"operationId": "associar-anexos-a-uma-solicitacao-de-trabalho",
"parameters": [
{
"name": "id_request",
"in": "path",
"required": true,
"description": "Código da solicitação de trabalho (campo id_code).",
"schema": {
"type": "integer"
}
}
],
"deprecated": false,
"security": []
}
}
},
"x-readme": {
"headers": [],
"explorer-enabled": false,
"proxy-enabled": true
},
"x-readme-fauxas": true
}