Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Facturear Webhooks API
description: 'API para emitir facturas electrónicas de ARCA (Argentina) desde tu sistema: facturas, notas de crédito y débito, lotes, PDF y XML, envío por email, borradores desde documentos, webhooks y reportes. Autenticación con API Key en el header x-api-key: la key de testing opera en homologación y la de producción emite comprobantes reales.'
version: 1.0.0
contact:
name: Facturear Support
email: support@facture.ar
url: https://facture.ar
license:
name: MIT
url: https://opensource.org/licenses/MIT
servers:
- url: https://www.facture.ar/api
description: Servidor de producción
security:
- apiKey: []
tags:
- name: Webhooks
description: Notificaciones a tu sistema cuando pasa algo con tus facturas
paths:
/webhooks:
get:
summary: Listar webhooks
description: 'Los webhooks de tu cuenta. El secreto de firma no se devuelve: se ve desde el dashboard.'
tags:
- Webhooks
responses:
'200':
description: Webhooks
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Webhook'
operationId: getWebhooks
x-operation-id-source: derived
post:
summary: Crear un webhook
description: Registra una URL que recibe los eventos elegidos. Facturear genera el secreto de firma (whsec_...), que se ve desde el dashboard en Webhooks → Secreto de firma.
tags:
- Webhooks
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
url:
type: string
format: uri
events:
type: array
minItems: 1
items:
$ref: '#/components/schemas/WebhookEvent'
headers:
type:
- object
- 'null'
additionalProperties:
type: string
required:
- url
- events
responses:
'201':
description: Webhook creado
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
'400':
description: URL o eventos inválidos
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: postWebhooks
x-operation-id-source: derived
/webhooks/{webhookId}:
put:
summary: Editar un webhook
description: 'Cambia la URL, los eventos, los headers o lo pausa (isActive: false). Solo se cambian los campos que mandás.'
tags:
- Webhooks
parameters:
- name: webhookId
in: path
description: ID del webhook
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
url:
type: string
format: uri
events:
type: array
minItems: 1
items:
$ref: '#/components/schemas/WebhookEvent'
headers:
type:
- object
- 'null'
additionalProperties:
type: string
isActive:
type: boolean
responses:
'200':
description: Webhook actualizado
content:
application/json:
schema:
$ref: '#/components/schemas/Webhook'
'400':
description: Datos inválidos
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: Webhook no encontrado
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: putWebhooksByWebhookId
x-operation-id-source: derived
delete:
summary: Borrar un webhook
tags:
- Webhooks
parameters:
- name: webhookId
in: path
description: ID del webhook
required: true
schema:
type: string
responses:
'200':
description: Webhook borrado
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
'404':
description: Webhook no encontrado
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
operationId: deleteWebhooksByWebhookId
x-operation-id-source: derived
components:
schemas:
WebhookEvent:
type: string
enum:
- delegation.completed
- invoice.completed
- invoice.failed
- batch.completed
- draft.review_required
Webhook:
type: object
properties:
id:
type: string
userId:
type: string
url:
type: string
format: uri
headers:
type:
- object
- 'null'
additionalProperties:
type: string
description: Headers propios que se agregan a cada envío
events:
type: array
items:
$ref: '#/components/schemas/WebhookEvent'
isActive:
type: boolean
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
Error:
type: object
description: Error de la API. Los errores de autenticación (401), validación (400), CUIT inexistente (404), conflicto (409) e internos (500) vienen como application/problem+json (RFC 9457) con code, message y resolution. Otros errores vienen como JSON con error y, a veces, details y code. En los dos casos está el campo error.
required:
- error
properties:
error:
type: string
description: Mensaje de error
code:
type: string
description: 'Código estable: unauthorized, invalid_request, cuit_not_found, conflict, internal_error, o códigos propios como SUBSCRIPTION_LIMIT_EXCEEDED'
message:
type: string
description: Qué pasó (problem+json)
resolution:
type: string
description: Qué hacer para resolverlo (problem+json)
type:
type: string
format: uri
description: URI del tipo de problema (problem+json)
title:
type: string
description: Título corto del problema (problem+json)
status:
type: integer
description: Código HTTP (problem+json)
detail:
type: string
description: Igual que message (problem+json)
details:
description: 'Detalle del error: un texto, o la lista de errores de validación'
securitySchemes:
apiKey:
type: apiKey
in: header
name: x-api-key
description: 'API Key para autenticación. Formato: test_sk_xxx para testing, prod_sk_xxx para producción.'