Tipo de Entidade
Campos Obrigatórios
| Campo | Tipo | Descrição | Exemplo |
|---|
amount | Decimal | Valor da transação | 150.00 ou -75.50 |
description | String | Descrição da transação | "Pagamento a fornecedor" |
transaction_date | Date | Data da transação | "2025-10-01" |
external_id OU reference_number | String | Identificador único | "TXN-001" |
Parâmetro Obrigatório:
accountId (ID) - UUID da conta bancária
Campos Opcionais
| Campo | Tipo | Descrição |
|---|
category_name | String | Busca de categoria por nome |
cost_center_name | String | Busca de centro de custo por nome |
Convenção de Valores
- Valores positivos: Dinheiro saindo (despesas, pagamentos)
- Valores negativos: Dinheiro entrando (receitas, recebimentos)
Exemplo: Transação Básica
{
"transaction_date": "2025-10-01",
"amount": "150.00",
"description": "Pagamento a fornecedor XYZ",
"external_id": "TXN-001"
}
{
"transaction_date": "2025-10-03",
"amount": "850.50",
"description": "Compra de material de escritório",
"reference_number": "REF-12345",
"category_name": "Despesas de Escritório",
"cost_center_name": "Administração"
}
Mutação GraphQL
Validação (Dry Run)
mutation ValidarTransacoes {
importCreate(
input: {
data: [
{
transaction_date: "2025-10-01"
amount: "150.00"
description: "Pagamento a fornecedor"
external_id: "TXN-001"
}
]
entityType: TRANSACTION
accountId: "uuid-da-sua-conta"
dryRun: true
}
) {
success
previewData
validRecords
invalidRecords
}
}
Importação Real
mutation ImportarTransacoes {
importCreate(
input: {
data: [
{
transaction_date: "2025-10-01"
amount: "150.00"
description: "Pagamento a fornecedor"
external_id: "TXN-001"
}
]
entityType: TRANSACTION
accountId: "uuid-da-sua-conta"
dryRun: false
}
) {
success
import {
id
status
recordsTotal
}
}
}
Exemplo em JavaScript
const API_KEY = process.env.NOVAGESTAO_API_KEY;
const ORG_SLUG = "sua-organizacao";
async function importarTransacoes(accountId) {
const transacoes = [
{
transaction_date: "2025-10-01",
amount: "150.00",
description: "Pagamento a fornecedor",
external_id: "TXN-001",
},
];
// Passo 1: Validação (dry run)
const validacao = await fetch("https://api.novagestao.xyz/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`,
"X-ORGANIZATION-SLUG": ORG_SLUG,
},
body: JSON.stringify({
query: `
mutation ValidarTransacoes($data: [JSON!]!, $accountId: ID!) {
importCreate(input: {
data: $data
entityType: TRANSACTION
accountId: $accountId
dryRun: true
}) {
success
validRecords
invalidRecords
}
}
`,
variables: { data: transacoes, accountId },
}),
});
const resultado = await validacao.json();
if (resultado.data.importCreate.invalidRecords > 0) {
console.error("Validação falhou");
return;
}
console.log(
` Validadas ${resultado.data.importCreate.validRecords} transações`
);
// Passo 2: Criar importação real
const importResponse = await fetch("https://api.novagestao.xyz/graphql", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`,
"X-ORGANIZATION-SLUG": ORG_SLUG,
},
body: JSON.stringify({
query: `
mutation ImportarTransacoes($data: [JSON!]!, $accountId: ID!) {
importCreate(input: {
data: $data
entityType: TRANSACTION
accountId: $accountId
dryRun: false
}) {
success
import { id status }
}
}
`,
variables: { data: transacoes, accountId },
}),
});
const resultadoImport = await importResponse.json();
console.log(
`Importação criada: ${resultadoImport.data.importCreate.import.id}`
);
}
Erros Comuns
“Account is required for transaction imports”Parâmetro accountId ausente. Forneça-o nos argumentos da mutação, não no array de dados.
“Amount can’t be blank”Toda transação deve ter um campo amount válido.
Melhores Práticas
Sempre use dry run primeiro para validar os dados antes de criar
importações reais.
Inclua external_id para habilitar reconciliação e prevenir duplicatas.
Tamanho do lote: Mantenha abaixo de 1000 transações por importação para
desempenho ideal.
Entidades Relacionadas