Ir al contenido

Desarrolladores

Facturación

Facturas de venta, rectificativas y presupuestos.

GET /billing

Listar documentos de venta

Devuelve las facturas de venta, rectificativas, presupuestos y proformas de tu cuenta. Las fechas filtran por `issueDate` (incluidas).

Permiso exigido: sales:invoices.read (Ventas › Facturas, proformas y rectificativas › Leer)

Paginación: Parámetros page y limit. La respuesta incluye total, page, limit, hasMore.

Parámetros

NombreEnTipoDescripción
kindquerystring
Valores: INVOICE, CREDIT_NOTE, QUOTE, PROFORMA, DELIVERY_NOTE
statusquerystring
Valores: DRAFT, ISSUED, PAID, PARTIALLY_PAID, OVERDUE, CANCELLED, VOID
dateFromquerystring (date)Fecha de emisión (issueDate) desde la que filtrar, incluida (AAAA-MM-DD).
dateToquerystring (date)Fecha de emisión (issueDate) hasta la que filtrar, incluida (AAAA-MM-DD).
pagequeryinteger
Por defecto: 1
limitqueryinteger
Por defecto: 50 · máximo: 500

Respuestas

200 Lista de documentos de venta · application/json

NombreTipoDescripción
documentsobject[]
documents[].idstring
documents[].numberstring
documents[].kindstring
Valores: INVOICE, CREDIT_NOTE, QUOTE, PROFORMA, DELIVERY_NOTE
documents[].statusstring
Valores: DRAFT, ISSUED, PAID, PARTIALLY_PAID, OVERDUE, CANCELLED, VOID
documents[].accountNamestring
puede ser null
documents[].accountNifstring
puede ser null
documents[].issuerNamestring
documents[].issueDatestring (date)
documents[].dueDatestring (date)
puede ser null
documents[].subtotalnumber
documents[].ivaAmountnumber
documents[].irpfAmountnumber
documents[].totalnumber
documents[].amountPaidnumber
documents[].currencystring
documents[].itemsobject[]
documents[].items[].idstring
documents[].items[].descriptionstring
documents[].items[].quantitynumber
documents[].items[].unitPricenumber
documents[].items[].discountnumber
puede ser null
documents[].items[].ivaRatenumber
documents[].items[].irpfRatenumber
documents[].items[].lineTotalnumber
documents[].items[].taxCodestring
puede ser null
Código de régimen del SII, p. ej. S1
documents[].items[].accountCodestring
puede ser null
Código de cuenta del PGC, p. ej. 700
totalintegerTotal de elementos que cumplen el filtro.
pageintegerPágina devuelta (empieza en 1).
limitintegerTamaño de página aplicado.
hasMorebooleanHay más páginas después de esta.

401 Falta el token Bearer o no es válido. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

403 El token no tiene el permiso exigido o el recurso queda fuera de su alcance. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

429 Se ha alcanzado un límite de uso. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

Ejemplos

curl
curl -X GET "https://app.bm.consulting/api/v1/billing?limit=50" \
  -H "Authorization: Bearer $BMC_TOKEN"
TypeScript (fetch)
const res = await fetch("https://app.bm.consulting/api/v1/billing?limit=50", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.BMC_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
Python (requests)
import os
import requests

res = requests.get(
    "https://app.bm.consulting/api/v1/billing?limit=50",
    headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
    timeout=30,
)
res.raise_for_status()
data = res.json()

POST /billing

Crear un documento de venta

Permiso exigido: sales:invoices.create (Ventas › Facturas, proformas y rectificativas › Crear)

Paginación: Sin paginación: devuelve el conjunto completo.

Cuerpo de la petición application/json

NombreTipoDescripción
kindobligatoriostring
Valores: INVOICE, CREDIT_NOTE, QUOTE, PROFORMA
issueDatestring (date)
dueDatestring (date)
puede ser null
currencystring
notesstring
puede ser null
itemsobligatorioobject[]
items[].descriptionobligatoriostring
items[].quantityobligatorionumber
items[].unitPriceobligatorionumber
items[].ivaRatenumberp. ej. 21
items[].irpfRatenumber
puede ser null
items[].accountCodestring
puede ser null
Cuenta del PGC, p. ej. 700

Respuestas

201 Documento creado · application/json

NombreTipoDescripción
idstring
numberstring
kindstring
Valores: INVOICE, CREDIT_NOTE, QUOTE, PROFORMA, DELIVERY_NOTE
statusstring
Valores: DRAFT, ISSUED, PAID, PARTIALLY_PAID, OVERDUE, CANCELLED, VOID
accountNamestring
puede ser null
accountNifstring
puede ser null
issuerNamestring
issueDatestring (date)
dueDatestring (date)
puede ser null
subtotalnumber
ivaAmountnumber
irpfAmountnumber
totalnumber
amountPaidnumber
currencystring
itemsobject[]
items[].idstring
items[].descriptionstring
items[].quantitynumber
items[].unitPricenumber
items[].discountnumber
puede ser null
items[].ivaRatenumber
items[].irpfRatenumber
items[].lineTotalnumber
items[].taxCodestring
puede ser null
Código de régimen del SII, p. ej. S1
items[].accountCodestring
puede ser null
Código de cuenta del PGC, p. ej. 700

400 Error de validación · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

401 Falta el token Bearer o no es válido. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

403 El token no tiene el permiso exigido o el recurso queda fuera de su alcance. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

429 Se ha alcanzado un límite de uso. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

Ejemplos

curl
curl -X POST "https://app.bm.consulting/api/v1/billing" \
  -H "Authorization: Bearer $BMC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"kind":"INVOICE","items":[{"description":"string","quantity":1,"unitPrice":1}]}'
TypeScript (fetch)
const res = await fetch("https://app.bm.consulting/api/v1/billing", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BMC_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "kind": "INVOICE",
    "items": [
      {
        "description": "string",
        "quantity": 1,
        "unitPrice": 1
      }
    ]
  }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
Python (requests)
import os
import requests

res = requests.post(
    "https://app.bm.consulting/api/v1/billing",
    headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
    json={
        "kind": "INVOICE",
        "items": [{
            "description": "string",
            "quantity": 1,
            "unitPrice": 1,
        }],
    },
    timeout=30,
)
res.raise_for_status()
data = res.json()

GET /billing/{id}

Consultar un documento de venta

Documento completo, con sus líneas y sus líneas de impuestos.

Permiso exigido: sales:invoices.read (Ventas › Facturas, proformas y rectificativas › Leer)

Paginación: Sin paginación: devuelve el conjunto completo.

Parámetros

NombreEnTipoDescripción
idobligatoriorutastring

Respuestas

200 Documento de venta · application/json

NombreTipoDescripción
idstring
numberstring
kindstring
Valores: INVOICE, CREDIT_NOTE, QUOTE, PROFORMA, DELIVERY_NOTE
statusstring
Valores: DRAFT, ISSUED, PAID, PARTIALLY_PAID, OVERDUE, CANCELLED, VOID
accountNamestring
puede ser null
accountNifstring
puede ser null
issuerNamestring
issueDatestring (date)
dueDatestring (date)
puede ser null
subtotalnumber
ivaAmountnumber
irpfAmountnumber
totalnumber
amountPaidnumber
currencystring
itemsobject[]
items[].idstring
items[].descriptionstring
items[].quantitynumber
items[].unitPricenumber
items[].discountnumber
puede ser null
items[].ivaRatenumber
items[].irpfRatenumber
items[].lineTotalnumber
items[].taxCodestring
puede ser null
Código de régimen del SII, p. ej. S1
items[].accountCodestring
puede ser null
Código de cuenta del PGC, p. ej. 700

401 Falta el token Bearer o no es válido. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

403 El token no tiene el permiso exigido o el recurso queda fuera de su alcance. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

404 El recurso no existe o queda fuera del alcance del token. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

429 Se ha alcanzado un límite de uso. · application/json

NombreTipoDescripción
errorstringMensaje de error legible
required_permissionstringSolo en el 403: el permiso que falta (área:recurso.acción)

Ejemplos

curl
curl -X GET "https://app.bm.consulting/api/v1/billing/<id>" \
  -H "Authorization: Bearer $BMC_TOKEN"
TypeScript (fetch)
const res = await fetch("https://app.bm.consulting/api/v1/billing/<id>", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.BMC_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
Python (requests)
import os
import requests

res = requests.get(
    "https://app.bm.consulting/api/v1/billing/<id>",
    headers={"Authorization": f"Bearer {os.environ['BMC_TOKEN']}"},
    timeout=30,
)
res.raise_for_status()
data = res.json()
Email
Contacto