Faxtal

Terceros y productos

Los terceros son tus clientes y proveedores. Los productos son los artículos que facturas. Desde la API puedes buscar terceros, darlos de alta o actualizarlos, y consultar tus productos.

Todas las llamadas usan la URL base https://app.faxtal.com/api/v1.1 y la cabecera X-API-Key (ver Autenticación).

OperaciónScope de la API key
Buscar terceros y productosinvoices:read
Alta o actualización de tercerosparties:write

Sin el scope necesario, la API responde 403 con el código scope_missing.


De dónde salen

  • Terceros: se registran solos al guardar una factura válida, emitida o recibida. La contraparte (el cliente en una emitida, el proveedor en una recibida) se identifica por su NIF. Las facturas simplificadas y las que no traen el NIF de la contraparte no registran tercero. También puedes darlos de alta tú.
  • Productos: se alimentan de las líneas con article_code de las facturas emitidas sin errores. Si el mismo article_code vuelve a aparecer, se queda la versión más reciente. La API no permite crear ni editar productos.

Una factura no se enlaza con un tercero por su identificador: en customer o supplier envías los datos de la parte (ver Formato canónico).


Buscar terceros

GET /api/v1.1/third-parties

ParámetroDescripción
searchTexto que se busca dentro de name y de tax_id. Hasta 200 caracteres.
rolecustomer o supplier. Sin él, devuelve ambos.
limitDe 1 a 200. Por defecto, 50.
offsetDesplazamiento. Por defecto, 0.
curl -G "https://app.faxtal.com/api/v1.1/third-parties" \
  -H "X-API-Key: fctXXXXXXXX_YYYYYYYYYYYYYYYY" \
  --data-urlencode "search=Cliente Prueba" \
  -d role=customer

Respuesta 200, resumida:

{
  "items": [
    {
      "id": 1234,
      "tax_id": "B10000016",
      "country_code": "ES",
      "person_type_code": "J",
      "name": "Cliente Prueba S.L.",
      "trade_name": null,
      "is_customer": true,
      "is_supplier": false,
      "eu_vat_id": null,
      "primary_address": null,
      "primary_contact": null,
      "created_at": "2026-11-02T09:15:00",
      "updated_at": "2026-11-02T09:15:00"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

Los resultados salen ordenados por name y tax_id. Campos principales de cada tercero:

CampoDescripción
idIdentificador del tercero. Es el third_party_id que devuelve el alta.
tax_id, country_codeNIF y país. Juntos identifican al tercero.
person_type_codeF (persona física) o J (persona jurídica).
name, trade_nameRazón social o nombre, y nombre comercial.
first_name, first_surname, second_surnameNombre y apellidos, en personas físicas.
is_customer, is_supplierSi es cliente, proveedor o ambos.
eu_vat_idNIF-IVA intracomunitario.
vies_status, vies_checked_at, vies_consultation_number, vies_nameResultado de la comprobación del NIF-IVA en VIES, si se ha hecho.
attachment_formatsFormatos que se adjuntan al enviar facturas a este tercero.
primary_address, primary_contactDirección y contacto principales, o null.
created_at, updated_atFechas de alta y de última modificación.

Dar de alta o actualizar un tercero

PUT /api/v1.1/third-parties

CampoObligatorioDescripción
tax_idSíNIF. De 1 a 32 caracteres.
nameSíRazón social o nombre. De 1 a 255 caracteres.
country_codeNoPaís, dos letras. Por defecto, ES.
person_type_codeNoF o J.
trade_nameNoNombre comercial. Hasta 255 caracteres.
is_customerNoSi es cliente.
is_supplierNoSi es proveedor.
eu_vat_idNoNIF-IVA intracomunitario. Hasta 32 caracteres.
curl -X PUT "https://app.faxtal.com/api/v1.1/third-parties" \
  -H "X-API-Key: fctXXXXXXXX_YYYYYYYYYYYYYYYY" \
  -H "Content-Type: application/json" \
  -d '{
    "tax_id": "B10000016",
    "country_code": "ES",
    "name": "Cliente Prueba S.L.",
    "person_type_code": "J",
    "is_customer": true
  }'

Respuesta 200:

{
  "third_party_id": 1234,
  "created": true
}

Cómo funciona:

  • La clave es tax_id más country_code. Si no existe un tercero con esa clave, se crea (created: true). Si existe, se actualiza (created: false).
  • En un alta, si no indicas el rol, el tercero queda como cliente (is_customer: true, is_supplier: false).
  • En una actualización, solo cambian los campos que envías. El NIF y el país no se modifican.
  • Lo que guardas por aquí prevalece: las facturas que entren después no sobrescriben esos datos.
  • No gestiona direcciones ni contactos.

Errores

HTTPcodeCausa
422request_validation_errorFalta tax_id o name, un valor supera su longitud, person_type_code no es F ni J, o hay un campo que no está en la tabla. El detalle trae errors.
403scope_missingLa API key no tiene parties:write.

Consultar productos

GET /api/v1.1/products

ParámetroDescripción
searchTexto que se busca dentro de article_code y de name. Hasta 200 caracteres.
limitDe 1 a 200. Por defecto, 50.
offsetDesplazamiento. Por defecto, 0.
curl -G "https://app.faxtal.com/api/v1.1/products" \
  -H "X-API-Key: fctXXXXXXXX_YYYYYYYYYYYYYYYY" \
  -d search=CONSULT

Respuesta 200, resumida:

{
  "items": [
    {
      "id": 88,
      "article_code": "CONSULT-SENIOR",
      "name": "Consultoría senior",
      "item_type": "service",
      "unit_of_measure": "HUR",
      "price_mode": "without_tax",
      "unit_price": 100.0,
      "tax_treatment_code": "TAXABLE_NON_EXEMPT",
      "tax_output_code": "IVA_G",
      "tax_withheld_code": null,
      "last_invoice_public_id": "00000000-0000-0000-0000-000000000001",
      "last_issue_date": "2026-11-02",
      "created_at": "2026-11-02T09:15:00",
      "updated_at": "2026-11-02T09:15:00"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

Los resultados salen ordenados por article_code. Campos de cada producto:

CampoDescripción
idIdentificador del producto.
article_codeCódigo del artículo, el mismo que el article_code de las líneas.
nameNombre.
item_typeTipo de artículo (bien o servicio).
unit_of_measureUnidad de medida.
price_modeSi unit_price incluye el impuesto (with_tax) o no.
unit_price, discount_rate, charge_ratePrecio unitario y descuento o recargo de línea.
tax_treatment_codeTratamiento fiscal.
tax_output_code, tax_withheld_codeCódigo del tipo de impuesto y del tipo de retención (por ejemplo, IVA_G).
exemption_reason_code, exemption_reason_text, non_taxable_reason, tax_regime_keyExención, no sujeción y régimen especial.
fiscal_classificationClasificación fiscal que deduce el sistema.
last_source, last_invoice_public_id, last_issue_dateOrigen y última factura que actualizó el producto.
created_at, updated_atFechas de alta y de última modificación.

El producto guarda el código del tipo de impuesto (tax_output_code). En una línea de factura se envía el porcentaje (tax_output_rate), nunca el código. La correspondencia está en la tabla de tipos del Formato canónico.

Errores

HTTPcodeCausa
402feature_outside_planEl plan de la empresa no incluye el catálogo de productos.
403scope_missingLa API key no tiene invoices:read.

Ver también

On this page