Factuarea API

API keys d'empreses filles

Emet, rota i revoca API keys acotades a una sola empresa filla, derivant els seus scopes de la key que crida — els endpoints api_keys sota una empresa gestionada.

Cada empresa gestionada té el seu propi joc d'API keys. Una key filla autentica peticions en nom d'aquesta única empresa — mai arriba a les empreses germanes ni al tenant mestre. És l'alternativa a manejar una filla amb el header X-Active-Profile: una key filla queda lligada a una empresa per sempre, en comptes de canviar-se per petició.

Cinc endpoints sota /v1/companies/{id}/api-keys cobreixen el seu cicle de vida.

OperacióEndpointScope
Llistar keys fillesGET /v1/companies/{id}/api-keysapi_keys:read
Crear una key fillaPOST /v1/companies/{id}/api-keysapi_keys:write
Recuperar una key fillaGET /v1/companies/{id}/api-keys/{key}api_keys:read
Rotar el secretPOST /v1/companies/{id}/api-keys/{key}/rotate-secretapi_keys:write
Revocar una key fillaDELETE /v1/companies/{id}/api-keys/{key}api_keys:write

Això replica l'autoservei d'API keys a nivell de compte, però acotat a una empresa filla en comptes del teu propi compte. Tant {id} (l'empresa) com {key} (l'API key) són valors UUID v7 opacs.

Crea una key filla

POST /v1/companies/{id}/api-keys emet una key per a l'empresa i retorna el seu secret en text pla exactament un cop. Requereix el scope api_keys:write.

curl -X POST \
  https://api.factuarea.com/v1/companies/01931b3e-7c4a-7f2e-9a8b-4d6e7f8a9b0c/api-keys \
  -H "Authorization: Bearer fact_live_8KqW3pXnR2VbY7TcA9eFmN5z" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "name": "Producción Talleres García",
    "scopes": ["invoices:read", "invoices:write"]
  }'

Resposta (201):

{
  "data": {
    "object": "api_key",
    "id": "0190f2c0-77aa-7b21-8c33-1d2e3f405162",
    "name": "Producción Talleres García",
    "prefix": "fact_live_1OSf9KdP",
    "secret": "fact_live_1OSf9KdPR2VbY7TcA9eFmN5z",
    "scopes": ["invoices:read", "invoices:write"],
    "tier": "scale",
    "environment": "live"
  }
}

El secret es mostra només en aquesta resposta 201 i després d'una rotació. Cap endpoint el retorna després. Persisteix-lo en un gestor de secrets tan bon punt el reps — mai en un log ni en un repositori. Si el perds, rota la key.

Els scopes han de ser un subconjunt de la key pare

Els scopes que demanes per a una key filla han de ser un subconjunt dels de la key que fa la crida. Demanar un scope que la key que crida no té retorna 422 amb errors per camp — sense retallada silenciosa: la key no es crea amb una llista de scopes escurçada, falla la petició sencera.

{
  "error": {
    "type": "validation_error",
    "code": "validation_failed",
    "message": "No puedes conceder un scope que tu propia key no tiene.",
    "param": "scopes"
  }
}

Així, una key amb invoices:read invoices:write pot emetre keys filles amb qualsevol subconjunt d'aquests dos scopes, però mai amb clients:write. Aprovisiona primer una key mestra amb scopes suficients i deriva'n keys filles més estretes. L'environment i el tier mai es prenen del cos — s'hereten de la key que crida.

CampObligatoriNotes
nameEtiqueta llegible (1–120 caràcters).
scopesUn o més scopes, cadascun subconjunt dels de la key que crida.
expires_atnoInstant futur ISO 8601 a partir del qual la key deixa d'autenticar.
ip_allowlistnoLlista opcional d'IPs / CIDR permeses (IPv4, IPv6, /N).

Rota el secret

POST /v1/companies/{id}/api-keys/{key}/rotate-secret invalida de seguida el secret actual, genera un nou prefix + secret, i retorna el nou secret en text pla exactament un cop. Requereix el scope api_keys:write.

curl -X POST \
  https://api.factuarea.com/v1/companies/01931b3e-7c4a-7f2e-9a8b-4d6e7f8a9b0c/api-keys/0190f2c0-77aa-7b21-8c33-1d2e3f405162/rotate-secret \
  -H "Authorization: Bearer fact_live_8KqW3pXnR2VbY7TcA9eFmN5z"

La rotació té efecte a l'instant: qualsevol petició que segueixi fent servir el secret anterior deixa d'autenticar tan bon punt rotes. Desplega el nou secret abans de — o de manera atòmica amb — la rotació per evitar downtime. És irreversible.

Revoca una key filla

DELETE /v1/companies/{id}/api-keys/{key} revoca una key filla de manera permanent. Les peticions posteriors autenticades amb ella deixen de funcionar. Requereix el scope api_keys:write.

curl -X DELETE \
  https://api.factuarea.com/v1/companies/01931b3e-7c4a-7f2e-9a8b-4d6e7f8a9b0c/api-keys/0190f2c0-77aa-7b21-8c33-1d2e3f405162 \
  -H "Authorization: Bearer fact_live_8KqW3pXnR2VbY7TcA9eFmN5z"

La revocació és irreversible. Un cop revocada, la key no es pot restaurar — emet-ne una de nova si l'empresa encara necessita accés a l'API.

Scopes i aïllament

Les keys filles es protegeixen amb els scopes d'api_keys:

  • api_keys:read — llistar i recuperar keys filles.
  • api_keys:write — crear, rotar i revocar keys filles.

Tota operació està acotada al teu tenant mestre. Un id d'empresa que pertany a un altre mestre retorna 404 — mai 403, ni un endpoint de key filla d'una empresa que no gestiones. És el mateix aïllament entre mestres que regeix les empreses en si: un mestre només veu i actua sobre les seves pròpies empreses i les seves keys.

En aquesta pàgina