Factuarea APIDevelopers

Ús

L'arbre de comandes de factuarea — list, show, create, accions de domini, plantilles PDF, escriptures condicionals, descàrregues binàries, pujades multipart, l'escape hatch genèric api i el manifest commands --json.

L'arbre de comandes cobreix tots els recursos de l'API (factuarea <recurs> [<sub-recurs>] <acció>), generat des de l'especificació OpenAPI perquè mai es desincronitzi de la superfície real.

Llegir dades

# Llistar (amb paginació automàtica per cursor)
factuarea invoices list --json
factuarea contacts list --paginate --json

# Obtenir-ne un
factuarea invoices show <uuid> --json

--json emet el cos cru de l'API per stdout. --paginate recorre totes les pàgines per tu, seguint next_cursor fins que has_more sigui fals. Consulta Paginació per a la semàntica del cursor subjacent.

Escriure dades

Passa el cos JSON amb -d (en línia) o --data-file (una ruta). L'API calcula els totals — no els arrodoneixis per endavant.

factuarea invoices create -d '{"client_id":"…","series_id":"…","lines":[…]}'

Cada mutació rep un Idempotency-Key automàtic perquè una petició reintentada mai creï el recurs dues vegades. Consulta Idempotència.

La clau es genera una vegada per invocació i es reutilitza en els reintents que fa el mateix CLI davant respostes 429 i 5xx, que esperen el que indica Retry-After. Per repetir una operació des d'una invocació posterior, per exemple quan el teu script torna a executar-se després d'un timeout, fixa la clau amb --idempotency-key <clau> i envia el mateix cos. L'enviament i la cancel·lació a FACe (invoices face-submissions submit i face-submissions cancel) fan una sola crida i mai es reintenten: si un falla, consulta l'enviament abans de tornar a enviar.

Accions de domini

Els canvis d'estat són accions discretes, no un flag d'estat genèric — reflectint el disseny propi de l'API:

factuarea invoices send <uuid>
factuarea invoices mark-paid <uuid>

Algunes accions són irreversibles (esborrats, void, conversions, emissió fiscal). El CLI et demana confirmar-les abans de la crida — consulta Operacions irreversibles i la guia de scopes i irreversibilitat.

Eixos d'empresa i de compte

Un recurs penja d'un de dos eixos, i el CLI omple el de la seva ruta a partir d'un flag perquè no l'hagis d'escriure a cada comanda:

EixRutaFlagComandes
Empresa/v1/companies/{company}/…--companyinvoices, contacts, time-entries, …
Compte/v1/accounts/{account}/…--accountaccount (members, invitations, api-keys, nif-transfers, owner, webhooks, request-logs, usage, provisioning-usage), companies, employee-seats, gestoria workforce-summary

--company omple l'eix d'empresa: passa l'empresa com a primer argument posicional o amb el flag, o no l'escriguis quan la teva credencial n'abasti una de sola (factuarea invoices list --company acme_co --json). Mai omple el buit del compte, i --account mai omple el de l'empresa.

--account omple l'eix de compte, amb aquestes regles:

  • Una lectura (GET) sense compte fa servir el compte propi de la teva credencial: el que GET /v1/me publica a data.account.id. Es consulta una vegada per invocació i no s'escriu mai a disc. whoami no mostra aquest id; factuarea account show --json sí.
  • Una escriptura no dedueix mai el compte: anomena'l com a argument posicional o amb --account. Sense cap dels dos, el CLI acaba amb un error d'ús (codi 2) i no envia res; el missatge anomena el compte propi de la teva credencial i les dues maneres de passar-lo. Donar-lo com a posicional i amb el flag també és un error d'ús.
  • Una operació irreversible l'últim paràmetre de ruta de la qual és el compte (account nif-transfers create, account nif-transfers accept i account owner transfer) el pren només com a argument posicional: allà el flag no val.
  • A managed-accounts el compte és el gestionat: un recurs obligatori que escrius sempre com a argument posicional i que el flag no omple mai.
  • Les rutes arrel d'aprovisionament i d'importació (GET i POST /v1/accounts, POST /v1/accounts/imports, POST /v1/accounts/imports/preview i GET /v1/accounts/imports/template) no porten compte, encara que passis --account.
# 1) Una lectura resol el compte sola
#    (GET /v1/me, després GET /v1/accounts/<el teu compte>/members)
factuarea account members list --json

# 2) Una escriptura l'ha d'anomenar. Sense el compte falla amb codi 2 i no envia
#    res; amb --account la petició va a POST /v1/accounts/<account>/webhooks
factuarea account webhooks create --url https://example.com/hooks --enabled-events account.member_added
factuarea account webhooks create --account <account> --url https://example.com/hooks --enabled-events account.member_added

# 3) Un compte gestionat és el recurs: sempre l'argument posicional
#    (GET /v1/accounts/<managed_account>); --account no l'omple
factuarea managed-accounts show <managed_account> --json

# 4) Una ruta arrel d'aprovisionament no porta compte (POST /v1/accounts)
factuarea managed-accounts create --external-ref cliente-0042 --plan emprendedor \
  --tax-id B12345674 --legal-name "Talleres García SL" --confirm create

factuarea commands --json publica l'argument ometible a optional_args ({"account": "--account"}, o {"company": "--company"} a l'eix d'empresa) a cada comanda on un flag l'omple; consulta Agents i scripting. Les comandes de managed-accounts i les irreversibles amb el compte com a últim paràmetre no el publiquen.

Comptes gestionats

Per a qui aprovisiona comptes per als seus propis clients. El token de --confirm és el literal create a les operacions arrel i l'id del recurs a la resta:

factuarea managed-accounts list --json
factuarea managed-accounts show <managed_account>
factuarea managed-accounts plan preview <managed_account> --plan empresario
factuarea managed-accounts plan update <managed_account> --plan empresario --confirm <managed_account>
factuarea managed-accounts access-level update <managed_account> --level view
factuarea managed-accounts claim-tokens create <managed_account> --send-email --confirm <managed_account>
factuarea managed-accounts management end <managed_account> --confirm <managed_account>

managed-accounts claim-tokens create reemet el val de reclamació d'un compte gestionat. El compte propi ja no té val de reclamació: el va substituir el traspàs de NIF (factuarea account nif-transfers create, accept, list i revoke).

Webhooks i registres de peticions del compte

Els endpoints de webhook del compte (account webhooks, amb les seves entregues a account webhooks deliveries) i els seus registres de peticions (account request-logs) fan servir l'eix de compte d'amunt: una lectura dedueix el compte, una escriptura el demana. Consulta Webhooks de compte per saber què rep un endpoint de compte.

factuarea account webhooks list --json
factuarea account webhooks create --account <account> --url https://example.com/hooks \
  --enabled-events account.member_added --account-relationship own
factuarea account webhooks deliveries list <webhook> --status failed --json
factuarea account webhooks deliveries retry --account <account> <webhook> <delivery>
factuarea account request-logs list --only_errors true --json
factuarea account request-logs show <request_id> --json

Control horari (fitxatges i absències)

L'add-on de control horari afegeix els recursos de jornada — empleats, horaris, fitxatges, absències, presència, festius, tancaments mensuals i el resum consolidat de personal del compte (gestoria workforce-summary). Cada comanda es genera des de l'especificació i queda protegida pel seu scope fi (employees:*, time_entries:*, absences:*, work_schedules:*, presence:read, holidays:read, payroll_exports:*).

# Fitxar entrada i sortida (cada assentament encadena la seva empremta — RD-llei 8/2019)
factuarea time-entries clock-in  -d '{"employee_id":"…","source":"web"}'
factuarea time-entries clock-out -d '{"employee_id":"…","source":"web"}'

# Sol·licitar una absència i aprovar-la
factuarea absence-requests create \
  -d '{"employee_id":"…","absence_type_id":"…","start_date":"2026-08-01","end_date":"2026-08-05"}'
factuarea absence-requests approve <uuid>

# Presència de l'equip en viu
factuarea presence live --json

# Tancar el registre mensual inalterable i exportar-lo (ITSS RD-llei 8/2019)
factuarea monthly-time-record-closes create -d '{"year":2026,"month":7}'
factuarea monthly-time-record-closes export <uuid> --format rdley_8_2019 --json

Automatitzacions

L'add-on d'automations exposa el motor de regles: una regla escolta un esdeveniment, una condició decideix si actuar, i s'executa una llista ordenada d'accions. El mòdul protegeix tot el grup, i cada comanda porta el seu scope fi — automations:read (8 comandes), automations:write (6), automation_runs:read (3) i automations:delete (1). Quatre subgrups emmirallen l'API: catalog, rules (amb rules versions), runs (amb runs steps) i usage. Consulta la guia d'automatitzacions per al model.

Comença pel catàleg. Els camps avaluables d'un activador són una segona crida, una per activador — no viatgen dins del catàleg:

# Què es pot automatitzar: activadors, operadors i accions registrades.
factuarea automations catalog show --json

# Els camps avaluables d'un activador concret.
factuarea automations catalog trigger-fields invoice.paid --json

L'alta d'una regla va pel cos JSON complet. actions és una llista d'objectes, així que no es genera cap opció tipada per a ella, i el binari es nega a barrejar opcions de camp amb -d/--data-file — tria'n una. --skeleton imprimeix la plantilla del cos sense cridar l'API:

factuarea automations rules create --skeleton
{
  "actions": [],
  "conditions": {
    "<key>": "<string>"
  },
  "description": "<string>",
  "name": "<string>",
  "scope": "<empresa|cartera>",
  "trigger_type": "<string>"
}
# Omple-la i envia-la sencera. L'`scope` es tria aquí i després no es pot canviar.
factuarea automations rules create --json -d '{
  "name": "Warn me on a large payment",
  "scope": "empresa",
  "trigger_type": "invoice.paid",
  "conditions": {"field": "total", "operator": "gte", "value": 1000},
  "actions": [
    {"type": "notify_in_app", "order": 0, "parameters": {
      "recipient_type": "role", "role": "admin", "category": "invoice",
      "title": "Large payment", "message": "An invoice over 1000 EUR has been paid"
    }}
  ]
}'

# Assaja-la contra un esdeveniment d'exemple: torna la traça per pas i no materialitza res.
factuarea automations rules dry-run <rule_id> --json \
  -d '{"event_type":"invoice.paid","event_payload":{"total":1200,"status":"paid"}}'

# Una regla neix en draft i no dispara res fins que l'actives.
factuarea automations rules activate <rule_id>
factuarea automations rules pause <rule_id>

# Llegeix-la i edita-la — cada edició segella una versió nova.
factuarea automations rules show <rule_id> --json
factuarea automations rules update <rule_id> --json -d '{"name":"Warn me on a payment over 2000"}'

# Llista-les amb filtres, recorrent el cursor per tu.
factuarea automations rules list --paginate --json
factuarea automations rules list --status active --trigger_type invoice.paid --json

# Només les regles de cartera: les que vigilen els altres NIF del compte.
factuarea automations rules list --scope cartera --json

# Les versions segellades de la definició.
factuarea automations rules versions list <rule_id> --json
factuarea automations rules versions show <rule_id> 2 --json

# Què ha disparat, i què va fer cada pas.
factuarea automations runs list --paginate --json
factuarea automations runs list --automation_rule_id <rule_id> --status failed --json

# Què va fer una regla de cartera sobre un dels NIF que vigila.
factuarea automations runs list --subject_company_id <company_id> --json
factuarea automations runs show <run_id> --json
factuarea automations runs steps list <run_id> --json

# Consum davant del pressupost del pla per al període.
factuarea automations usage show --json

Una regla de cartera només la crea la titular del compte, i només quan el compte té concedit el mòdul gestoria. Vigila els altres NIF del compte (un d'addicional, un traspassat al compte) i els que un altre compte li cedeix amb el nivell d'accés operate, mai el NIF propi de la titular. En aquest abast una regla només avisa: notify_in_app, notify_channel, emit_webhook i create_calendar_event. Es desa a nom de la titular, que en rep els avisos, i cada execució porta el NIF subjecte sobre el qual va actuar.

Quatre llistats paginen per cursor —rules list, rules versions list, runs list i runs steps list— i --paginate recorre totes les pàgines per tu. L'historial de versions és l'únic el cursor del qual és una cadena numèrica opaca en comptes d'un UUID, perquè pagina per posició; torna el next_cursor que et van donar i no en construeixis cap a mà.

Tres comandes d'aquest grup són irreversibles i es neguen a endevinar:

# Rellançar torna a executar DE DEBÒ la feina aparcada: envia correu i entrega webhooks.
factuarea automations runs replay <run_id> --confirm <run_id>
factuarea automations runs steps replay <run_id> 0 --confirm 0

# Esborrar una regla la deixa sense disparar per sempre; les seves versions i execucions segueixen auditables.
factuarea automations rules delete <rule_id> --confirm <rule_id>

--confirm pren l'últim argument posicional de la comanda: l'id de la regla a rules delete, l'id de l'execució a runs replay i l'índex del pas a runs steps replay. Sense terminal interactiu (o amb --no-input) i sense --confirm, la comanda surt amb 2 en comptes d'endevinar. A més, tota mutació feta amb una clau fact_live_ necessita el flag explícit --live — consulta Mode de prova i Operacions irreversibles.

Tasques

El mòdul tasks —inclòs en tots els plans— afegeix a l'arbre 80 comandes en set grups, cadascuna protegida pel seu propi scope fi (projects:read|write|delete, tasks:read|write|delete, users:read i notifications:read|write), i projects time-invoices create necessita a més invoices:write, perquè crea una factura. Els grups surten dels operationId de l'spec:

GrupQuè cobreix
projectsProjectes, les seves columnes (projects columns), camps personalitzats, exportació i importació de tasques (projects tasks), el resum de temps i la factura de les hores imputades
tasksTasques i els seus subrecursos: comentaris, adjunts, imputacions de temps (tasks time-entries), temporitzador, etiquetes, relacions, vincles amb documents i contactes, activitat
task-labelsEl catàleg d'etiquetes de tasca de l'empresa
task-timersEl temporitzador en marxa de qui té la key
usersEls membres de l'empresa als quals es pot assignar una tasca
notificationsLes notificacions de qui té la key
agendaL'agenda combinada: tasques amb venciment, venciments de documents, terminis fiscals i absències
# Un projecte: la seva clau (una lletra més fins a nou lletres o dígits) prefixa les claus de les seves tasques (WEB-1, WEB-2…)
factuarea projects list --json
factuarea projects create --name "Web redesign" --key WEB --json
factuarea projects columns list <project_id> --json

# Crear una tasca. Amb el cos complet també pots vincular-la a un document o a un
# contacte a la mateixa crida amb `entity_link` (invoice, quote, contact, product…).
factuarea tasks create --json -d '{
  "project_id": "<project_id>",
  "title": "Prepare the quote",
  "priority": "high",
  "due_on": "2026-10-15",
  "entity_link": {"type": "quote", "id": "<quote_id>"}
}'

# Amb flags, cada camp personalitzat és `<id del camp>=<valor>` i tots els valors viatgen com a text.
factuarea tasks create --project-id <project_id> --title "Call the customer" \
  --custom-fields <field_id>=42 --custom-fields <other_field_id>=high

# Les comandes demanen l'UUID; resol abans una clau com WEB-1.
factuarea tasks find-by-key WEB-1 --json

# Canviar-ne l'estat: a una columna del projecte o a un estat virtual (`planned` és el backlog).
factuarea tasks status <task_id> --column-id <column_id>
factuarea tasks status <task_id> --status planned

# Cercar, recorrent el cursor per tu.
factuarea tasks search --project_id <project_id> --status active --paginate --json

# Les etiquetes de tasca de l'empresa.
factuarea task-labels list --json

# Imputar temps: un període tancat (ISO 8601 amb zona horària)…
factuarea tasks time-entries list <task_id> --paginate --json
factuarea tasks time-entries create <task_id> \
  --started-at 2026-09-28T09:00:00+02:00 --ended-at 2026-09-28T10:30:00+02:00 \
  --description "Quote review"

# …o amb el temporitzador de qui té la key, que en pot tenir només un en marxa.
factuarea tasks timer start <task_id>
factuarea task-timers current --json      # `{"data": null}` si no n'hi ha cap en marxa
factuarea task-timers stop --json

# Previsualitzar i després crear l'esborrany de factura de les hores facturables d'un mes.
factuarea projects time-invoices preview <project_id> \
  -d '{"period":{"from":"2026-09-01","to":"2026-09-30"},"grouping":"per_task"}' --json

# Esborrar una columna amb tasques exigeix una destinació per a elles. És irreversible: sense
# terminal interactiu cal confirmar amb --confirm, i el que es confirma és l'ÚLTIM argument
# posicional (aquí, la columna esborrada).
factuarea projects columns delete <project_id> <column_id> \
  --move_to_column_id <other_column_id> --confirm <column_id>

Esborrar projectes, columnes, camps personalitzats, etiquetes, tasques (també tasks bulk-delete), comentaris, adjunts i imputacions de temps és irreversible i demana confirmació. Consulta la guia de projectes i tasques per al model.

task-timers no és el fitxatge de jornada. El temporitzador i les comandes tasks time-entries registren el temps dedicat a una tasca, per mesurar-lo i facturar-lo. No són el registre del mòdul de control horari (factuarea time-entries clock-in, més amunt), que té el seu propi scope i el seu propi registre inalterable. Consulta Temps imputat a tasques.

Plantilles PDF i presentació de documents

La biblioteca de plantilles PDF i la presentació de cada document tenen les seves pròpies comandes, generades des de l'spec com la resta de l'arbre:

GrupComandes
pdf-templateslist, create, find, update, duplicate, archive, restore, impact, publish-revision, revision, defaults-get, defaults-set, contact-default-get, contact-default-set, asset-upload, asset-get
pdf-commercial-identitieslist, create, find, update, archive, restore, impact, publish-revision, revision
pdf-template-previewscreate
pdf-artifactsprepare, render, show, download
invoices, quotes, proformas, delivery-notesget-presentation, assign-presentation, list-presentations, revise-presentation
seriesget-pdf-template, assign-pdf-template

Totes pengen de l'eix d'empresa (/v1/companies/{company}/pdf-templates, /v1/companies/{company}/pdf-artifacts, /v1/companies/{company}/invoices/{invoice}/presentation…), així que reben l'empresa com qualsevol altra comanda d'empresa: com a primer argument posicional, amb --company o sense indicar-la quan la teva credencial arriba a una sola empresa. Consulta Eixos d'empresa i de compte i el segment d'empresa. Els binaris anteriors no tenen aquestes comandes: comprova que factuarea commands --json les inclou.

# Create a template in the company library: only --name is required.
factuarea pdf-templates create --company "$COMPANY_ID" \
  --name "Factura clásica" --base-preset classic --json

# Template lists paginate by page: one request per call, without --paginate.
factuarea pdf-templates list --company "$COMPANY_ID" --page 1 --per_page 20 --json

# Rename it, with the ETag of the last read as the If-Match precondition.
ETAG=$(factuarea pdf-templates find --company "$COMPANY_ID" "$TEMPLATE_ID" \
  --show-etag --json 2>&1 >/dev/null | sed -n 's/^etag: //p')
factuarea pdf-templates update --company "$COMPANY_ID" "$TEMPLATE_ID" \
  --name "Factura clásica 2026" --if-match "$ETAG" --json

# Pin that template on an invoice: expected_version is the selection_version
# of get-presentation…
factuarea invoices get-presentation --company "$COMPANY_ID" "$INVOICE_ID" --json
factuarea invoices assign-presentation --company "$COMPANY_ID" "$INVOICE_ID" \
  --template-id "$TEMPLATE_ID" --expected-version 1 --json

# …or hand the choice back to the defaults: template_id is required and accepts null.
factuarea invoices assign-presentation --company "$COMPANY_ID" "$INVOICE_ID" \
  --null-template-id --expected-version 2 --json

# Exact PDF of the invoice: prepare it from the id of its presentation, render it
# and download it.
factuarea pdf-artifacts prepare --company "$COMPANY_ID" --document-type invoice \
  --document-id "$INVOICE_ID" --presentation-id "$PRESENTATION_ID" \
  --purpose complete --format a4 --variant official --json
factuarea pdf-artifacts render --company "$COMPANY_ID" "$ARTIFACT_ID" --mode async --json
factuarea pdf-artifacts download --company "$COMPANY_ID" "$ARTIFACT_ID" -o invoice.pdf --show-etag

Consulta la biblioteca de plantilles PDF, Presentació de documents i Vistes prèvies i artefactes PDF per al model.

Escriptures condicionals i null explícit

Quan l'spec declara una capçalera condicional en una operació, la seva comanda rep un flag amb el mateix nom: --if-match a les escriptures que l'accepten (pdf-templates update, defaults-set i contact-default-set, pdf-commercial-identities update, series assign-pdf-template i assign-presentation de cada document) i --if-none-match a les lectures que poden respondre 304, com les descàrregues de PDF. El valor viatja tal qual, cometes incloses; un valor buit és un error d'ús (sortida 2).

--show-etag, a les comandes la resposta de les quals porta un ETag, escriu etag: <valor> a stderr i deixa stdout intacte, així que el pots capturar al costat de --json, com a l'exemple anterior. El CLI mai omple un ETag ni una versió per tu:

EnviesQuan ja no es compleix
--if-match amb un ETag antic412
--expected-version amb una versió antiga409
Cap de les dues, en una escriptura que exigeix precondició428

Consulta Concurrència per als codis d'error i com recuperar-te'n.

Null explícit. El cos distingeix un camp omès de null, d'un valor buit, de 0 i de false. Un flag de camp que no passes no s'envia, i un valor que passes viatja tal qual, fins i tot --description "". Per enviar null, fes servir --null-<camp>, que només existeix als camps que admeten null, o escriu null a -d/--data-file. Passar --<camp> i --null-<camp> alhora és un error d'ús.

# Clear the description (null). --name is not passed, so the name is kept.
factuarea pdf-templates update --company "$COMPANY_ID" "$TEMPLATE_ID" \
  --null-description --if-match "$ETAG" --json

Un camp obligatori que admet null, com template_id d'assign-presentation, se satisfà amb el seu flag --null-<camp> (--null-template-id).

Descàrregues binàries i pujades

Els endpoints de PDF, ZIP i XML transmeten un binari que deses amb -o. Les pujades multipart prenen el fitxer amb un flag --file-<camp>:

# Descarregar un PDF
factuarea invoices pdf <uuid> -o invoice.pdf

# Pujar un certificat (multipart)
factuarea verifactu certificates upload \
  -d '{"certificate_password":"…"}' --file-certificate_file cert.p12

# Importar comptes gestionats en bloc (multipart). Cada fitxer va amb --file-<camp>:
# `accounts_file` és obligatori, `customers_file` opcional. Les opcions viatgen a -d
# com un objecte JSON pla les claus del qual són els noms de camp del formulari: només
# s'accepten `options[send_email]`, `options[apply_customers_to_own_company]` i
# `options[confirm_plan_changes]` (booleanes, `false` per defecte).
factuarea managed-accounts imports template -o plantilla.csv
factuarea managed-accounts imports preview \
  --file-accounts_file comptes.csv --file-customers_file clients.csv   # no escriu
factuarea managed-accounts imports create \
  --file-accounts_file comptes.csv --file-customers_file clients.csv \
  -d '{"options[send_email]":true}' --confirm create                   # irreversible

Quan un PDF no està llest o no ha canviat

Una comanda binària escriu els bytes exactes a -o, o a stdout quan stdout no és un terminal. Les altres respostes d'una descàrrega de PDF mai deixen un fitxer a mitges:

EstatQuè fa el CLI
200Escriu els bytes.
202El PDF del document (invoices pdf, quotes pdf, proformas pdf, delivery-notes pdf) encara s'està generant. Imprimeix el JSON d'estat a stdout i retry-after: <segons> a stderr, no crea cap fitxer i surt amb 0. Torna a llançar la mateixa comanda passat aquest temps.
304Has passat --if-none-match amb l'ETag vigent. Surt amb 0 sense res a stdout i deixa el teu fitxer com estava.
503pdf-artifacts download d'un artefacte que encara no està llest (pdf_artifact_not_ready). El CLI el reintenta, esperant el que indica Retry-After; si continua sense estar llest, l'error a stderr inclou el valor de Retry-After.
# Keep the ETag of the copy you download…
factuarea invoices pdf --company "$COMPANY_ID" "$INVOICE_ID" -o invoice.pdf --show-etag

# …and download it again only if it changed: a 304 leaves invoice.pdf untouched.
factuarea invoices pdf --company "$COMPANY_ID" "$INVOICE_ID" -o invoice.pdf \
  --if-none-match "$PDF_ETAG"

Un codi de sortida 0 per si sol no demostra que s'hagi escrit un fitxer: cerca la línia retry-after: a stderr, o el mateix fitxer. Consulta Com responen les descàrregues.

L'escape hatch api

Qualsevol endpoint és accessible directament amb factuarea api <mètode> <ruta>, fins i tot els que encara no tenen una comanda dedicada:

factuarea api get /v1/me --json
factuarea api post /v1/companies/acme_co/invoices -d '{…}'

El manifest de comandes

factuarea commands --json aboca el manifest complet de comandes en una sola crida — path, args, flags, si cadascuna muta, si és binària o paginada, el seu scope requerit, si és irreversible, i un exemple. Un agent descobreix tota la superfície en una sola crida:

factuarea commands --json

Consulta Agents i scripting per als camps del manifest i el contracte JSON.

Referència de l'API incrustada

Una referència ràpida de l'API viatja amb el binari — les cerques no surten de la teva màquina:

factuarea docs search invoice

docs search consulta l'especificació OpenAPI incrustada al binari i respon a «quina comanda crido?». Retorna operacions — comanda, resum, mètode i ruta — i no toca mai la xarxa.

Cercar a la documentació publicada

docs list, docs grep i docs get consulten la documentació publicada —el corpus llms-full de docs.factuarea.com— i responen a «què diu la documentació sobre això?». Retornen pàgines i seccions, de les guies, la referència de l'API i el catàleg d'errors:

factuarea docs list                    # totes les pàgines: <ruta> — <títol>
factuarea docs list /guides            # només les que pengen d'aquest prefix
factuarea docs grep "idempotency-key"  # seccions de documentació que coincideixen
factuarea docs get /guides/idempotency # la pàgina sencera, en Markdown

El corpus es descarrega sencer i una sola vegada, es desa al directori de memòria cau del sistema (~/Library/Caches/factuarea/docs/ a macOS, ~/.cache/factuarea/docs/ a Linux) i es filtra en local. Mentre la còpia tingui menys de 15 minuts, no hi ha cap petició de xarxa, així que una sessió que encadeni list, grep i get descarrega una vegada.

El teu terme de cerca no surt mai de la màquina. La URL que es demana és fixa i no depèn del que teclegis — no hi ha cap servidor de cerca a l'altre costat. Cap de les quatre subcomandes de docs llegeix ni envia una API key.

OpcióQuè fa
--refreshTorna a descarregar, ignorant una còpia encara vigent
--langIdioma de les guies: en, es o ca (per defecte en, l'idioma font). La referència de l'API no es tradueix i surt sempre
--jsonSortida estable per stdout: path/title a list, path/title/section/snippet a grep, path/title/markdown a get

Si la descàrrega falla i hi ha una còpia a la memòria cau —encara que hagi caducat—, es fa servir aquesta còpia, l'avís va a stderr perquè el JSON de stdout continuï essent parsejable, i l'exit code és 0. Sense cap còpia, l'exit code és 10 (xarxa). Apunta FACTUAREA_DOCS_URL a un altre origen per descarregar el corpus des d'allà.

Alternativa mitjançant REST

El catàleg de comandes del CLI prové del seu spec integrat. A la referència de setembre de 2026 està disponible la versió v0.2.0 i el spec de la branca principal conté 414 entrades; falten 38 endpoints REST a les comandes generades. Consulta factuarea commands --json per a la versió instal·lada. Fes servir la comanda HTTP genèrica per a un endpoint REST disponible que falti en aquest catàleg:

factuarea api get /v1/companies/acme_co/stores

En aquesta pàgina

Et donem un cop de mà?Contactar amb suport