Ir al contenido principal

API: Presupuestos (estimates)

Crea, consulta, actualiza y elimina presupuestos mediante la API. Incluye ejemplos básicos y con formato simplificado.

Actualizado ayer

El recurso estimates te permite gestionar los presupuestos de tu empresa. Puedes crear presupuestos, consultarlos, actualizarlos, eliminarlos y enviarlos por email.

Los presupuestos tienen una estructura muy similar a las facturas de venta, por lo que si ya has trabajado con el recurso invoices, te resultará familiar.

💡 Recomendación: Antes de empezar a desarrollar, te recomendamos crear un entorno de pruebas (sandbox) para hacer tus primeras llamadas sin afectar tus datos reales.

Endpoints disponibles

Método

Endpoint

Descripción

GET

/{companyId}/estimates

Lista de presupuestos (con filtros y paginación)

POST

/{companyId}/estimates

Crear un presupuesto

GET

/{companyId}/estimates/{id}

Obtener un presupuesto por ID

PUT

/{companyId}/estimates/{id}

Actualizar un presupuesto

DELETE

/{companyId}/estimates/{id}

Eliminar un presupuesto

PUT

/{companyId}/estimates/{id}/pdf

Generar PDF del presupuesto

PUT

/{companyId}/estimates/{id}/send

Enviar presupuesto por email

PUT

/{companyId}/estimates/{id}/tags

Actualizar etiquetas del presupuesto

Ejemplos de código

Los siguientes ejemplos muestran cómo crear presupuestos para diferentes casos de uso. Todos los ejemplos usan el método POST a /{companyId}/estimates.

Presupuesto básico

El caso más simple: un presupuesto con una línea y formato estándar.

curl -X POST \
  -H "facturadirecta-api-key: TU_CLAVE_API" \
  -H "Content-Type: application/json" \
  -d '{
    "content": {
      "type": "estimate",
      "main": {
        "docNumber": {
          "series": "P"
        },
        "baseState": "pending",
        "contact": "con_10000000-0000-4000-8000-000000000000",
        "currency": "EUR",
        "lines": [
          {
            "quantity": 1,
            "unitPrice": 100,
            "tax": ["S_IVA_21"],
            "text": "Descripción del servicio"
          }
        ]
      }
    }
  }' \
  https://app.facturadirecta.com/api/TU_COMPANY_ID/estimates

Resultado: Un presupuesto de 100€ + 21% IVA = 121€ total, en estado "Pendiente".

Presupuesto con formato simplificado

Útil cuando solo quieres mostrar descripciones sin columnas de cantidad o producto.

{
  "content": {
    "type": "estimate",
    "main": {
      "showProductColumn": false,
      "showQuantityColumn": false,
      "docNumber": {
        "series": "P"
      },
      "baseState": "pending",
      "contact": "con_10000000-0000-4000-8000-000000000000",
      "currency": "EUR",
      "lines": [
        {
          "quantity": 1,
          "unitPrice": 100,
          "lineTotal": 100,
          "tax": ["S_IVA_21"],
          "text": "Descripción del servicio"
        }
      ]
    }
  }
}

Opciones de visualización:

  • showProductColumn: false oculta la columna de producto/referencia

  • showQuantityColumn: false oculta la columna de cantidad

Presupuesto con descuento

Aplica un descuento a una línea del presupuesto.

{
  "content": {
    "type": "estimate",
    "main": {
      "docNumber": {
        "series": "P"
      },
      "baseState": "pending",
      "contact": "con_10000000-0000-4000-8000-000000000000",
      "currency": "EUR",
      "lines": [
        {
          "quantity": 1,
          "unitPrice": 100,
          "discountRate": 10,
          "tax": ["S_IVA_21"],
          "text": "Servicio de consultoría (10% descuento)"
        }
      ]
    }
  }
}

Resultado:

  • Precio: 100€

  • Descuento 10%: -10€

  • Base: 90€

  • IVA 21%: 18,90€

  • Total: 108,90€

Presupuesto con validez

Indica la fecha de validez del presupuesto.

{
  "content": {
    "type": "estimate",
    "main": {
      "docNumber": {
        "series": "P"
      },
      "baseState": "pending",
      "contact": "con_10000000-0000-4000-8000-000000000000",
      "date": "2026-01-28",
      "dueDate": "2026-02-28",
      "currency": "EUR",
      "lines": [
        {
          "quantity": 1,
          "unitPrice": 500,
          "tax": ["S_IVA_21"],
          "text": "Desarrollo de aplicación web"
        }
      ]
    }
  }
}

Nota: El campo dueDate en presupuestos indica la fecha de validez, no la fecha de vencimiento de pago.

Campos importantes

Campos del objeto main

Campo

Tipo

Descripción

contact

string

ID del cliente (obligatorio)

currency

string

Código de moneda ISO 4217 (ej: EUR, USD)

date

string

Fecha de emisión (formato YYYY-MM-DD)

dueDate

string

Fecha de validez del presupuesto

docNumber

object

Número de documento: series (obligatorio), number (opcional)

baseState

string

Estado del presupuesto (ver sección Estados)

lines

array

Líneas del presupuesto (obligatorio, mínimo 1)

showProductColumn

boolean

Mostrar columna de producto en el PDF

showQuantityColumn

boolean

Mostrar columna de cantidad en el PDF

emails

string

Emails destinatarios separados por comas

Campos de cada línea

Campo

Tipo

Descripción

text

string

Descripción del producto o servicio (obligatorio)

quantity

number

Cantidad (obligatorio)

unitPrice

number

Precio unitario (obligatorio)

tax

array

Array de IDs de impuestos (obligatorio)

discount

number

Descuento en importe absoluto

discountRate

number

Descuento en porcentaje (0-100)

lineTotal

number

Total de la línea (calculado automáticamente si no se indica)

document

string

ID del producto de referencia

Estados de un presupuesto

Los presupuestos pueden tener los siguientes estados base:

Estado

Descripción

pending

Pendiente: enviado al cliente, esperando respuesta

accepted

Aceptado: el cliente ha aceptado el presupuesto

rejected

Rechazado: el cliente ha rechazado el presupuesto

closed

Cerrado: convertido a factura o finalizado

Nota: El estado final del presupuesto puede variar si existen documentos relacionados (por ejemplo, si se ha generado una factura a partir del presupuesto).

Convertir presupuesto a factura

Cuando un cliente acepta un presupuesto, puedes convertirlo a factura. El flujo típico es:

  1. Actualizar el presupuesto a estado "accepted"

  2. Crear una factura con las mismas líneas y referenciar el presupuesto

Al crear la factura, puedes indicar el origen de cada línea para que queden vinculados:

{
  "content": {
    "type": "invoice",
    "main": {
      "contact": "con_xxxxx",
      "currency": "EUR",
      "lines": [
        {
          "origin": "est_xxxxx",
          "quantity": 1,
          "unitPrice": 100,
          "tax": ["S_IVA_21"],
          "text": "Servicio aprobado en presupuesto"
        }
      ]
    }
  }
}

Errores comunes

Error: "contact is required"

El campo contact es obligatorio. Asegúrate de incluir el ID de un cliente existente.

Error: "Invalid baseState"

El valor de baseState no es válido. Usa uno de: pending, accepted, rejected, closed.

Error: "lines must have at least 1 item"

Un presupuesto necesita al menos una línea. Verifica que el array lines no está vacío.

¿Ha quedado contestada tu pregunta?