Automatiza la facturación electrónica VeriFactu desde Ruby on Rails o scripts Ruby. Guía paso a paso con net/http nativo.
La API REST de InvoCash se integra de forma idiomática con Ruby. Puedes usar net/http de la librería estándar o la gema faraday según las convenciones de tu proyecto Rails.
Ideal para SaaS B2B en Rails, scripts de automatización contable o servicios Sinatra que necesiten emitir facturas homologadas con VeriFactu sin gestionar la normativa fiscal internamente.
Rails ActiveJob, Sidekiq, y el resto del stack Ruby se integran sin fricción.
Encola la facturación con ActiveJob o tu job framework favorito sin bloqueos.
InvoCash gestiona firma, hashes y envío a la AEAT. Tu código solo crea facturas.
Desde startups hasta SaaS maduros. Ruby y Rails te acompañan.
require 'net/http'
require 'json'
require 'uri'
BASE_URL = 'https://{su-tenant}.invo.cash/api'
def get_token
uri = URI("#{BASE_URL}/auth/login")
resp = Net::HTTP.post(uri,
{ email: 'usuario@empresa.com', password: 'tu_contraseña' }.to_json,
'Content-Type' => 'application/json')
JSON.parse(resp.body)['access_token']
end
# Alternativa: API Key
HEADERS = { 'X-API-Key' => 'tu_api_key', 'Content-Type' => 'application/json' }Calcula tax_base, tax_amount y total antes de enviar — la API no los calcula.
def crear_factura(token, customer_id, descripcion, precio, iva = 21)
tax_base = precio
tax_amount = (tax_base * iva / 100.0).round(2)
payload = {
customer_id: customer_id,
verifactu_issuer_territory: 'MAINLAND',
simplified: false,
lines: [{
description: descripcion,
quantity: 1,
unit_price: precio,
tax_base: tax_base,
tax_pctge: iva,
tax_amount: tax_amount,
tax_withholding_pctge: 0,
tax_withholding_amount: 0,
tax_type: 'IVA',
clave_regimen: '01',
qualification_operation: 'S1',
exempt_operation: nil,
total: tax_base
}],
total: (tax_base + tax_amount).round(2)
}
uri = URI("#{BASE_URL}/invoices")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Post.new(uri, {
'Content-Type' => 'application/json',
'Authorization' => "Bearer #{token}"
})
req.body = payload.to_json
JSON.parse(http.request(req).body)['data'][0]
enddef api_get(token, path)
uri = URI("#{BASE_URL}#{path}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
req = Net::HTTP::Get.new(uri, 'Authorization' => "Bearer #{token}")
http.request(req)
end
# Estado VeriFactu
vf = JSON.parse(api_get(token, "/invoice/#{id}/verifactu").body)
# Descargar PDF
pdf = api_get(token, "/invoice/#{id}/downloadPdf")
File.binwrite('factura.pdf', pdf.body)VeriFactu incluido automáticamente: todas las facturas creadas mediante la API de InvoCash se procesan con el sistema VeriFactu de la AEAT. Cumplimiento de la Ley Antifraude y el RD 1007/2023 sin ningún desarrollo adicional por tu parte.
¿Dudas durante la integración?
Nuestro equipo técnico te da respuesta ágil dentro del horario laboral. No hace falta que seas cliente.
Los endpoints que usarás con más frecuencia en tu integración. La documentación completa está disponible dentro de la plataforma.
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/auth/login | Autenticar y obtener token JWT |
| GET | /api/customers | Listar clientes |
| POST | /api/invoices | Crear una o varias facturas |
| GET | /api/invoices | Listar facturas (paginado, con filtros) |
| GET | /api/invoice/{id} | Detalle de una factura |
| PUT | /api/invoice/{id} | Actualizar factura (solo si no está validada) |
| GET | /api/invoice/{id}/verifactu | Estado de validación VeriFactu en la AEAT |
| GET | /api/invoice/{id}/downloadPdf | Descargar el PDF de la factura |
| POST | /api/invoice/{id}/communicate/email | Enviar la factura por email al cliente |
| POST | /api/invoice/{id}/validate | Enviar manualmente a VeriFactu |
Un SaaS B2B en Rails encola un ActiveJob al confirmar el pago de una suscripción. El job llama a la API de InvoCash con los datos de la factura, la valida con VeriFactu y almacena el número de factura en el registro de la suscripción — sin bloquear el hilo principal de Rails.
Nuestro equipo técnico te acompaña en todo el proceso. Sin compromiso.