Fichas Técnicas
Visão Geral
O módulo Fichas Técnicas gerencia a composição de produtos fabricados, detalhando matérias-primas, embalagens, mão de obra, serviços e despesas envolvidos na produção. Permite atualizar custo, tabela de preços e imprimir a ficha do produto.
Base URL
Authorization: Bearer {token}
Endpoints
Descrição: Retorna uma lista paginada de fichas técnicas com filtros por nome, GTIN, código interno, grupo, subgrupo e tipo de item.
Parâmetros
| Nome | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
nome | string | query | — | Filtra pelo nome do produto |
gtin | string | query | — | Filtra pelo código GTIN/EAN |
codigoInterno | string | query | — | Filtra pelo código interno |
grupoId | integer (int64) | query | — | Filtra por grupo |
subGrupoId | integer (int64) | query | — | Filtra por subgrupo |
tipoItem | string | query | — | Tipo do item (ex: PA = Produto Acabado) |
property | string | query | — | Campo de ordenação |
orderBy | string | query | — | Direção: asc ou desc |
pageNumber | integer | query | — | Número da página (padrão: 1) |
pageSize | integer | query | — | Registros por página (padrão: 20) |
Resposta de Sucesso 200
{
"pagination": {
"currentPage": 1,
"totalPages": 3,
"pageSize": 20,
"totalCount": 52,
"hasPrevious": false,
"hasNext": true
},
"data": [
{
"id": 1,
"nome": "Produto Acabado A",
"descricao": "Descrição completa do produto",
"codigoInterno": "PA-001",
"gtin": "7891234567890",
"ncm": "1234.56.00",
"tipoItem": "PA",
"tipoItemDescricao": "Produto Acabado",
"valor": 59.90,
"precoCusto": 25.00,
"markup": 139.60,
"estoque": 150.0,
"ativo": true,
"unidadeId": 1,
"unidadeSigla": "UN",
"grupoId": 2,
"grupoDescricao": "Linha A",
"subGrupoId": 5,
"subGrupoDescricao": "Categoria X"
}
],
"summary": null
}
Campos da Resposta — data[]
| Campo | Tipo | Descrição |
|---|---|---|
id | integer (int64) | Identificador da ficha técnica |
nome | string | Nome do produto |
codigoInterno | string | Código interno |
gtin | string | Código de barras GTIN/EAN |
ncm | string | Código NCM |
tipoItem | string | Tipo do item (PA, MP, PI, etc.) |
valor | number | Preço de venda |
precoCusto | number | Custo calculado |
markup | number | Markup percentual |
estoque | number | Saldo em estoque |
ativo | boolean | Status do produto |
Códigos de Erro
| Código | Descrição |
|---|---|
401 | Token ausente ou inválido |
500 | Erro interno do servidor |
Exemplos de Código
cURL
curl -X GET "https://api.app.hooked.com.br/api/fichas-tecnicas" \
-H "Authorization: Bearer {token}"
JavaScript
const response = await fetch('https://api.app.hooked.com.br/api/fichas-tecnicas', {
headers: { 'Authorization': 'Bearer {token}' }
});
const data = await response.json();
Python
import requests
data = requests.get(
'https://api.app.hooked.com.br/api/fichas-tecnicas',
headers={'Authorization': 'Bearer {token}'}
).json()
Go
import (
"io"
"net/http"
)
req, _ := http.NewRequest("GET", "https://api.app.hooked.com.br/api/fichas-tecnicas", nil)
req.Header.Set("Authorization", "Bearer {token}")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
PHP
$ch = curl_init('https://api.app.hooked.com.br/api/fichas-tecnicas');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer {token}'],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
n8n
{
"name": "Hooked API — GET /api/fichas-tecnicas",
"nodes": [
{
"parameters": {
"method": "GET",
"url": "https://api.app.hooked.com.br/api/fichas-tecnicas",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer SEU_TOKEN_AQUI"
}
]
},
"options": {}
},
"id": "node-1",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
250,
300
]
}
],
"connections": {},
"pinData": {}
}
Descrição: Retorna a ficha técnica completa de um produto, incluindo todos os componentes: matérias-primas, embalagens, mão de obra, serviços, despesas e setores de produção.
Parâmetros
| Nome | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
id | integer (int64) | path | ✓ | ID da ficha técnica |
Resposta de Sucesso 200
{
"id": 1,
"nome": "Produto Acabado A",
"descricao": "Descrição completa",
"valor": 59.90,
"precoCusto": 25.00,
"markup": 139.60,
"lucroDesejado": 30.0,
"valorProposto": 32.50,
"materiasPrimas": [
{ "produtoId": 5, "quantidade": 2.0, "custo": 10.00 }
],
"embalagens": [],
"maoObra": [],
"servicos": [],
"despesas": [],
"setores": []
}
Códigos de Erro
| Código | Descrição |
|---|---|
401 | Token ausente ou inválido |
404 | Ficha técnica não encontrada |
500 | Erro interno do servidor |
Exemplos de Código
cURL
curl -X GET "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}" \
-H "Authorization: Bearer {token}"
JavaScript
const response = await fetch('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}', {
headers: { 'Authorization': 'Bearer {token}' }
});
const data = await response.json();
Python
import requests
data = requests.get(
'https://api.app.hooked.com.br/api/fichas-tecnicas/{id}',
headers={'Authorization': 'Bearer {token}'}
).json()
Go
import (
"io"
"net/http"
)
req, _ := http.NewRequest("GET", "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}", nil)
req.Header.Set("Authorization", "Bearer {token}")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
PHP
$ch = curl_init('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer {token}'],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
n8n
{
"name": "Hooked API — GET /api/fichas-tecnicas/{id}",
"nodes": [
{
"parameters": {
"method": "GET",
"url": "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer SEU_TOKEN_AQUI"
}
]
},
"options": {}
},
"id": "node-1",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
250,
300
]
}
],
"connections": {},
"pinData": {}
}
Descrição: Atualiza a composição completa de uma ficha técnica, incluindo matérias-primas, embalagens, mão de obra, serviços, despesas e setores.
Parâmetros
| Nome | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
id | integer (int64) | path | ✓ | ID da ficha técnica |
Corpo da Requisição
{
"id": 1,
"lucroDesejado": 35.0,
"valorProposto": 34.00,
"materiasPrimas": [
{ "produtoId": 5, "quantidade": 2.5, "custo": 12.00 }
],
"embalagens": [],
"maoObra": [],
"servicos": [],
"despesas": [],
"setores": []
}
Resposta de Sucesso 200
Retorna a ficha técnica atualizada.
Códigos de Erro
| Código | Descrição |
|---|---|
400 | Dados inválidos |
401 | Token ausente ou inválido |
404 | Ficha técnica não encontrada |
500 | Erro interno do servidor |
Exemplos de Código
cURL
curl -X PUT "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"id":1,"lucroDesejado":35.0,"valorProposto":34.0,"materiasPrimas":[{"produtoId":5,"quantidade":2.5,"custo":12.0}],"embalagens":[],"maoObra":[],"servicos":[],"despesas":[],"setores":[]}'
JavaScript
const response = await fetch('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}', {
method: 'PUT',
headers: {
'Authorization': 'Bearer {token}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"id": 1,
"lucroDesejado": 35.0,
"valorProposto": 34.0,
"materiasPrimas": [
{
"produtoId": 5,
"quantidade": 2.5,
"custo": 12.0
}
],
"embalagens": [],
"maoObra": [],
"servicos": [],
"despesas": [],
"setores": []
})
});
const data = await response.json();
Python
import requests
data = requests.put(
'https://api.app.hooked.com.br/api/fichas-tecnicas/{id}',
headers={'Authorization': 'Bearer {token}'},
json={'id': 1, 'lucroDesejado': 35.0, 'valorProposto': 34.0, 'materiasPrimas': [{'produtoId': 5, 'quantidade': 2.5, 'custo': 12.0}], 'embalagens': [], 'maoObra': [], 'servicos': [], 'despesas': [], 'setores': []}
).json()
Go
import (
"bytes"
"net/http"
)
payload := []byte(`{"id":1,"lucroDesejado":35.0,"valorProposto":34.0,"materiasPrimas":[{"produtoId":5,"quantidade":2.5,"custo":12.0}],"embalagens":[],"maoObra":[],"servicos":[],"despesas":[],"setores":[]}`)
req, _ := http.NewRequest("PUT", "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}", bytes.NewBuffer(payload))
req.Header.Set("Authorization", "Bearer {token}")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
PHP
$ch = curl_init('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => ['Authorization: Bearer {token}', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'lucroDesejado' => 35.0,
'valorProposto' => 34.0,
'materiasPrimas' => [
[
'produtoId' => 5,
'quantidade' => 2.5,
'custo' => 12.0
]
],
'embalagens' => [],
'maoObra' => [],
'servicos' => [],
'despesas' => [],
'setores' => []
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
n8n
{
"name": "Hooked API — PUT /api/fichas-tecnicas/{id}",
"nodes": [
{
"parameters": {
"method": "PUT",
"url": "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer SEU_TOKEN_AQUI"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "json",
"jsonBody": "{\"id\":1,\"lucroDesejado\":35.0,\"valorProposto\":34.0,\"materiasPrimas\":[{\"produtoId\":5,\"quantidade\":2.5,\"custo\":12.0}],\"embalagens\":[],\"maoObra\":[],\"servicos\":[],\"despesas\":[],\"setores\":[]}",
"options": {}
},
"id": "node-1",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
250,
300
]
}
],
"connections": {},
"pinData": {}
}
Descrição: Atualiza apenas o preço de custo de uma ficha técnica, sem alterar sua composição.
Parâmetros
| Nome | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
id | integer (int64) | path | ✓ | ID da ficha técnica |
Corpo da Requisição
{
"id": 1,
"precoCusto": 28.50
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | integer (int64) | ✓ | ID da ficha técnica |
precoCusto | number (double) | ✓ | Novo preço de custo |
Resposta de Sucesso 200
Retorna a ficha técnica com o custo atualizado.
Códigos de Erro
| Código | Descrição |
|---|---|
400 | Dados inválidos |
401 | Token ausente ou inválido |
404 | Ficha técnica não encontrada |
500 | Erro interno do servidor |
Exemplos de Código
cURL
curl -X PUT "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-custo" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"id":1,"precoCusto":28.5}'
JavaScript
const response = await fetch('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-custo', {
method: 'PUT',
headers: {
'Authorization': 'Bearer {token}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"id": 1,
"precoCusto": 28.5
})
});
const data = await response.json();
Python
import requests
data = requests.put(
'https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-custo',
headers={'Authorization': 'Bearer {token}'},
json={'id': 1, 'precoCusto': 28.5}
).json()
Go
import (
"bytes"
"net/http"
)
payload := []byte(`{"id":1,"precoCusto":28.5}`)
req, _ := http.NewRequest("PUT", "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-custo", bytes.NewBuffer(payload))
req.Header.Set("Authorization", "Bearer {token}")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
PHP
$ch = curl_init('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-custo');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => ['Authorization: Bearer {token}', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'precoCusto' => 28.5
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
n8n
{
"name": "Hooked API — PUT /api/fichas-tecnicas/{id}/atualizar-custo",
"nodes": [
{
"parameters": {
"method": "PUT",
"url": "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-custo",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer SEU_TOKEN_AQUI"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "json",
"jsonBody": "{\"id\":1,\"precoCusto\":28.5}",
"options": {}
},
"id": "node-1",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
250,
300
]
}
],
"connections": {},
"pinData": {}
}
Descrição: Atualiza os preços de uma ficha técnica em uma tabela de preços específica, definindo preço bruto, preço de compra e preço de venda.
Parâmetros
| Nome | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
id | integer (int64) | path | ✓ | ID da ficha técnica |
Corpo da Requisição
{
"id": 1,
"tabelaPrecoId": 2,
"precoBruto": 45.00,
"precoCompra": 28.50,
"precoVenda": 59.90
}
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | integer (int64) | ✓ | ID da ficha técnica |
tabelaPrecoId | integer (int64) | ✓ | ID da tabela de preços |
precoBruto | number (double) | ✓ | Preço bruto |
precoCompra | number (double) | ✓ | Preço de compra |
precoVenda | number (double) | ✓ | Preço de venda |
Resposta de Sucesso 200
Retorna os preços atualizados na tabela.
Códigos de Erro
| Código | Descrição |
|---|---|
400 | Dados inválidos |
401 | Token ausente ou inválido |
404 | Ficha técnica ou tabela de preços não encontrada |
500 | Erro interno do servidor |
Exemplos de Código
cURL
curl -X PUT "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-tabela-preco" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"id":1,"tabelaPrecoId":2,"precoBruto":45.0,"precoCompra":28.5,"precoVenda":59.9}'
JavaScript
const response = await fetch('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-tabela-preco', {
method: 'PUT',
headers: {
'Authorization': 'Bearer {token}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"id": 1,
"tabelaPrecoId": 2,
"precoBruto": 45.0,
"precoCompra": 28.5,
"precoVenda": 59.9
})
});
const data = await response.json();
Python
import requests
data = requests.put(
'https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-tabela-preco',
headers={'Authorization': 'Bearer {token}'},
json={'id': 1, 'tabelaPrecoId': 2, 'precoBruto': 45.0, 'precoCompra': 28.5, 'precoVenda': 59.9}
).json()
Go
import (
"bytes"
"net/http"
)
payload := []byte(`{"id":1,"tabelaPrecoId":2,"precoBruto":45.0,"precoCompra":28.5,"precoVenda":59.9}`)
req, _ := http.NewRequest("PUT", "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-tabela-preco", bytes.NewBuffer(payload))
req.Header.Set("Authorization", "Bearer {token}")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
PHP
$ch = curl_init('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-tabela-preco');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => ['Authorization: Bearer {token}', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'id' => 1,
'tabelaPrecoId' => 2,
'precoBruto' => 45.0,
'precoCompra' => 28.5,
'precoVenda' => 59.9
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
n8n
{
"name": "Hooked API — PUT /api/fichas-tecnicas/{id}/atualizar-tabela-preco",
"nodes": [
{
"parameters": {
"method": "PUT",
"url": "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/atualizar-tabela-preco",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer SEU_TOKEN_AQUI"
}
]
},
"sendBody": true,
"contentType": "json",
"specifyBody": "json",
"jsonBody": "{\"id\":1,\"tabelaPrecoId\":2,\"precoBruto\":45.0,\"precoCompra\":28.5,\"precoVenda\":59.9}",
"options": {}
},
"id": "node-1",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
250,
300
]
}
],
"connections": {},
"pinData": {}
}
Descrição: Gera o documento de impressão da ficha técnica com todos os componentes e custos detalhados.
Parâmetros
| Nome | Tipo | Local | Obrigatório | Descrição |
|---|---|---|---|---|
id | integer (int64) | path | ✓ | ID da ficha técnica |
Resposta de Sucesso 200
Retorna o arquivo da ficha técnica para impressão (PDF).
Códigos de Erro
| Código | Descrição |
|---|---|
401 | Token ausente ou inválido |
404 | Ficha técnica não encontrada |
500 | Erro interno do servidor |
Exemplos de Código
cURL
curl -X GET "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/imprimir" \
-H "Authorization: Bearer {token}"
JavaScript
const response = await fetch('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/imprimir', {
headers: { 'Authorization': 'Bearer {token}' }
});
const data = await response.json();
Python
import requests
data = requests.get(
'https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/imprimir',
headers={'Authorization': 'Bearer {token}'}
).json()
Go
import (
"io"
"net/http"
)
req, _ := http.NewRequest("GET", "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/imprimir", nil)
req.Header.Set("Authorization", "Bearer {token}")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
PHP
$ch = curl_init('https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/imprimir');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer {token}'],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
n8n
{
"name": "Hooked API — GET /api/fichas-tecnicas/{id}/imprimir",
"nodes": [
{
"parameters": {
"method": "GET",
"url": "https://api.app.hooked.com.br/api/fichas-tecnicas/{id}/imprimir",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer SEU_TOKEN_AQUI"
}
]
},
"options": {}
},
"id": "node-1",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
250,
300
]
}
],
"connections": {},
"pinData": {}
}
