{
  "generated": "2026-09-02T12:02:51.077Z",
  "sources": [
    {
      "id": "aliexpress",
      "name": "AliExpress",
      "service": "aliexpress",
      "categories": [
        "marketplace",
        "retail"
      ],
      "trust": "community",
      "beta": false,
      "domain": "aliexpress.com",
      "country": "global",
      "formats": [
        "html"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": "0.3.0",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-16",
          "changes": {
            "en": "Your AliExpress order history, with a printable invoice for each order.",
            "es": "Tu historial de pedidos de AliExpress, con una factura imprimible por cada pedido."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/aliexpress.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "98e9b859b1efed48"
    },
    {
      "id": "amazon",
      "name": "Amazon",
      "service": "amazon",
      "categories": [
        "marketplace"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "amazon.com",
      "country": "global",
      "formats": [
        "json",
        "pdf"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": "0.7.0.11",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-24",
          "changes": {
            "en": "No change to what is extracted. The definition is now public domain (CC0-1.0) and this guide's text CC-BY-4.0, stated once for the whole catalogue.",
            "es": "Sin cambios en lo que se extrae. La definición pasa a dominio público (CC0-1.0) y el texto de esta guía a CC-BY-4.0, declarado una sola vez para todo el catálogo."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/amazon.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "c7146f552e1247da"
    },
    {
      "id": "americanexpress",
      "name": "American Express",
      "service": "amex",
      "categories": [
        "banking"
      ],
      "trust": "community",
      "beta": true,
      "domain": "americanexpress.com",
      "country": "global",
      "formats": [],
      "crossDomain": [],
      "version": "2026-08-24",
      "minVersion": "0.5.0.24",
      "gaps": [],
      "contributors": [],
      "changelog": [],
      "url": "https://habeas-dev.github.io/sources/americanexpress.json",
      "updated": "2026-08-24T19:57:30+02:00",
      "behaviourHash": "0cd3f46c39b6dbf0"
    },
    {
      "id": "bipdrive-es",
      "name": "Bip&Drive — facturas",
      "service": "bipdrive",
      "categories": [
        "tolls"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "bipdrive.com",
      "country": "ES",
      "formats": [
        "pdf"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": null,
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-08",
          "changes": {
            "en": "Invoices via an AJAX table (from:html); PDF by form POST.",
            "es": "Facturas vía tabla AJAX (from:html); PDF por POST de formulario."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/bipdrive-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "3af13d40acf79399"
    },
    {
      "id": "caixabank-consumer-es",
      "name": "CaixaBank Consumer — extractos",
      "service": "caixabank-consumer",
      "categories": [
        "card"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "caixabankconsumer.com",
      "country": "ES",
      "formats": [
        "pdf"
      ],
      "crossDomain": [
        "api.caixabankpc.com"
      ],
      "version": "2026-08-26",
      "minVersion": "0.1.35",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-08",
          "changes": {
            "en": "Initial version: statements (cross-domain api.caixabankpc.com), DNI capture, PDF by absolute URL.",
            "es": "Versión inicial: extractos (cross-domain api.caixabankpc.com), captura de DNI, PDF por URL absoluta."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/caixabank-consumer-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "85a15cc6be7d34ed"
    },
    {
      "id": "carrefour-es",
      "name": "Carrefour España — tickets",
      "service": "carrefour",
      "categories": [
        "grocery",
        "fuel",
        "retail"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "carrefour.es",
      "country": "ES",
      "formats": [
        "pdf"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": null,
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-08",
          "changes": {
            "en": "Receipts and online orders (offset pagination); PDF where one exists.",
            "es": "Tickets y pedidos online (offset pagination); PDF cuando existe."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/carrefour-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "d250117a4b6f1246"
    },
    {
      "id": "decathlon-es",
      "name": "Decathlon España — tickets",
      "service": "decathlon",
      "categories": [
        "sports"
      ],
      "trust": "community",
      "beta": false,
      "domain": "decathlon.es",
      "country": "ES",
      "formats": [
        "json"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": null,
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-08",
          "changes": {
            "en": "Orders and receipts with JSON detail.",
            "es": "Pedidos/recibos con detalle JSON."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/decathlon-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "573802f8e8b2134a"
    },
    {
      "id": "degiro",
      "name": "DeGiro",
      "service": "degiro",
      "categories": [
        "investment"
      ],
      "trust": "community",
      "beta": true,
      "domain": "degiro.nl",
      "country": "EU",
      "formats": [],
      "crossDomain": [],
      "version": "2026-08-24",
      "minVersion": "0.5.0.24",
      "gaps": [],
      "contributors": [],
      "changelog": [],
      "url": "https://habeas-dev.github.io/sources/degiro.json",
      "updated": "2026-08-24T19:57:30+02:00",
      "behaviourHash": "e8f819112073dc24"
    },
    {
      "id": "dia-es",
      "name": "Dia España — tickets",
      "service": "dia",
      "categories": [
        "grocery"
      ],
      "trust": "community",
      "beta": false,
      "domain": "dia.es",
      "country": "ES",
      "formats": [
        "json",
        "pdf"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": null,
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-08",
          "changes": {
            "en": "Receipts from the SSR (Vike); per-item PDF invoice.",
            "es": "Tickets desde el SSR (Vike); factura en PDF por artículo."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/dia-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "31c6cd917ab353eb"
    },
    {
      "id": "financiera-elcorteingles-es",
      "name": "Financiera El Corte Inglés",
      "service": "financiera-elcorteingles",
      "categories": [
        "card",
        "loan"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "financieraelcorteingles.es",
      "country": "ES",
      "formats": [],
      "crossDomain": [],
      "version": "2026-08-26.1",
      "minVersion": "0.5.0",
      "gaps": [],
      "contributors": [
        "David Marín"
      ],
      "changelog": [
        {
          "version": "2026-08-26.1",
          "changes": {
            "en": "Trust level raised to first-party: written and verified against the real service by the project, not contributed unreviewed. The label describes provenance, not permission — the same-domain guard, the consent screen and every other rule apply identically whatever it says.",
            "es": "Confianza elevada a first-party: escrita y verificada contra el servicio real por el proyecto, no una aportación sin revisar. La etiqueta describe procedencia, no permisos — la guardia de mismo dominio, la pantalla de consentimiento y las demás reglas se aplican igual diga lo que diga."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-20.3",
          "changes": {
            "en": "First published version. Verified end to end by the contributor. Needs Habeas 0.5.0 or newer.",
            "es": "Primera versión publicada. Verificada de principio a fin por quien la aportó. Requiere Habeas 0.5.0 o posterior."
          }
        },
        {
          "version": "2026-07-20.2",
          "changes": {
            "en": "Fixes monthly statement PDFs that failed to download once the statement had already been saved.",
            "es": "Corrige los PDF de extracto mensual, que fallaban al descargarse si el extracto ya se había guardado antes."
          }
        },
        {
          "version": "2026-07-20.1",
          "changes": {
            "en": "The extension no longer touches the sign-in screen: it only starts looking once you are inside your account, so it cannot interfere with the bank's login.",
            "es": "La extensión ya no toca la pantalla de acceso: solo empieza a mirar cuando ya estás dentro de tu cuenta, así que no puede interferir con el login del banco."
          }
        },
        {
          "version": "2026-07-20",
          "changes": {
            "en": "Fixes instalment purchases and monthly statements coming back empty when you hold more than one card.",
            "es": "Corrige las compras aplazadas y los extractos mensuales, que llegaban vacíos si tienes más de una tarjeta."
          }
        },
        {
          "version": "2026-07-17.4",
          "changes": {
            "en": "Fixes the sign-in error that stopped this source from reading anything.",
            "es": "Corrige el error de acceso que impedía a esta fuente leer nada."
          }
        },
        {
          "version": "2026-07-17.3",
          "changes": {
            "en": "An attempt at the sign-in problem that did not work and was undone in the next version. Nothing changed for you.",
            "es": "Un intento de arreglar el acceso que no funcionó y se deshizo en la versión siguiente. Nada cambió para ti."
          }
        },
        {
          "version": "2026-07-17.2",
          "changes": {
            "en": "Fixes the monthly statement PDF failing to download. Needs Habeas 0.4.1.2 or newer.",
            "es": "Corrige el PDF del extracto mensual, que no se descargaba. Requiere Habeas 0.4.1.2 o posterior."
          }
        },
        {
          "version": "2026-07-17.1",
          "changes": {
            "en": "extractos generate-file POST sends the {} JSON body + application/json content-type the SPA sends. datePurchase correct (the raw item date, DD/MM/YYYY).",
            "es": "El POST a generate-file de extractos envía el cuerpo JSON {} y el content-type application/json que manda la SPA. datePurchase correcto (la fecha cruda del elemento, DD/MM/YYYY)."
          }
        },
        {
          "version": "2026-07-17",
          "changes": {
            "en": "Fixes aplazamientos and monthly statements coming back empty.",
            "es": "Corrige los aplazamientos y los extractos mensuales, que llegaban vacíos."
          }
        },
        {
          "version": "2026-07-16",
          "changes": {
            "en": "Your El Corte Ingles store-card movements, instalment purchases and monthly statement PDFs, for each card you hold.",
            "es": "Los movimientos de tu tarjeta de El Corte Inglés, las compras aplazadas y los PDF de extracto mensual, para cada tarjeta que tengas."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/financiera-elcorteingles-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "7f82d12f04f0e9d4"
    },
    {
      "id": "hover-com",
      "name": "Hover — Receipts",
      "service": "hover",
      "categories": [
        "domains"
      ],
      "trust": "community",
      "beta": false,
      "domain": "hover.com",
      "country": "global",
      "formats": [
        "json",
        "html"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": null,
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-13",
          "changes": {
            "en": "Bill in USD (Hover charges USD; was defaulting to EUR).",
            "es": "Factura en USD (Hover cobra en USD; antes se asumía EUR por defecto)."
          }
        },
        {
          "version": "2026-07-08",
          "changes": {
            "en": "Domain invoices (JSON + HTML receipt).",
            "es": "Facturas de dominios (JSON + recibo HTML)."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/hover-com.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "e1ac558d1e5ee029"
    },
    {
      "id": "ikea-es",
      "name": "IKEA España — compras y tiquets",
      "service": "ikea",
      "categories": [
        "home"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "ikea.com",
      "country": "ES",
      "formats": [
        "pdf"
      ],
      "crossDomain": [
        "cssom-prod.ingka.com"
      ],
      "version": "2026-08-26",
      "minVersion": "0.1.36",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-25.1",
          "changes": {
            "en": "Automatic sync now waits until you are properly signed in to IKEA before it starts. It used to begin too early and find nothing.",
            "es": "La sincronización automática espera ahora a que tengas bien iniciada la sesión de IKEA antes de empezar. Antes arrancaba demasiado pronto y no encontraba nada."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/ikea-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "266b3983f4125a18"
    },
    {
      "id": "ing-es",
      "name": "ING España",
      "service": "ing",
      "categories": [
        "banking"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "ingdirect.es",
      "country": "ES",
      "formats": [],
      "crossDomain": [],
      "version": "2026-08-26.1",
      "minVersion": "0.9.11.4",
      "gaps": [
        "inversión"
      ],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26.1",
          "changes": {
            "en": "Trust level raised to first-party: written and verified against the real service by the project, not contributed unreviewed. The label describes provenance, not permission — the same-domain guard, the consent screen and every other rule apply identically whatever it says.",
            "es": "Confianza elevada a first-party: escrita y verificada contra el servicio real por el proyecto, no una aportación sin revisar. La etiqueta describe procedencia, no permisos — la guardia de mismo dominio, la pantalla de consentimiento y las demás reglas se aplican igual diga lo que diga."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-09",
          "changes": {
            "en": "The guide now says plainly that ING serves only about 90 days of history, so nobody arrives expecting their whole statement archive. Also fixes the month that straddles that limit: its statements now download.",
            "es": "La guía dice ahora claramente que ING solo sirve unos 90 días de histórico, para que nadie llegue esperando todo su archivo de extractos. Corrige además el mes que queda a caballo de ese límite: sus extractos ya se descargan."
          }
        },
        {
          "version": "2026-08-08.2",
          "changes": {
            "en": "Corrects the history window by one day, so Habeas no longer asks ING for a day it will refuse. Needs Habeas 0.9.11.4 or newer.",
            "es": "Corrige la ventana de histórico en un día, para que Habeas no pida a ING un día que va a rechazar. Requiere Habeas 0.9.11.4 o posterior."
          }
        },
        {
          "version": "2026-08-08.1",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "Corrects the coverage note: card movements were already being extracted, so only investments remain uncovered.",
            "es": "Corrige la nota de cobertura: los movimientos de tarjeta ya se extraían, así que solo quedan fuera las inversiones."
          }
        },
        {
          "version": "2026-07-31.1",
          "changes": {
            "en": "Fixes syncs that stopped partway with an authorisation error. ING sometimes rejects a valid request and accepts the same one moments later; Habeas now retries, as ING's own app does. Needs Habeas 0.9.7 or newer.",
            "es": "Corrige las sincronizaciones que se cortaban a medias con un error de autorización. ING rechaza a veces una petición válida y acepta esa misma poco después; Habeas ahora reintenta, como hace la propia app de ING. Requiere Habeas 0.9.7 o posterior."
          }
        },
        {
          "version": "2026-07-23.3",
          "changes": {
            "en": "Fixes duplicated card movements. A purchase stays pending until the monthly settlement, and ING re-listed it under a new identifier on every sync, so it arrived again each time. Two genuinely separate charges on the same day for the same amount are still kept apart. Needs Habeas 0.7.0.25 or newer.",
            "es": "Corrige los movimientos de tarjeta duplicados. Una compra queda pendiente hasta la liquidación mensual, e ING la volvía a listar con un identificador nuevo en cada sincronización, así que llegaba otra vez. Dos cargos realmente distintos del mismo día y el mismo importe se siguen tratando por separado. Requiere Habeas 0.7.0.25 o posterior."
          }
        },
        {
          "version": "2026-07-16",
          "changes": {
            "en": "Map the movement's running balance to record.balanceAfter (promoted to a canonical field for the Cuéntamo contract). Requires extension >= 0.3.0.24.",
            "es": "Mapea el saldo tras el movimiento a record.balanceAfter (promovido a campo canónico para el contrato del consumidor). Requiere extensión >= 0.3.0.24."
          }
        },
        {
          "version": "2026-07-14",
          "changes": {
            "en": "Initial: movements (transactions), per-account monthly statements (PDF/Excel), and the integrated monthly statement (PDF). Grouped by account, 90-day window.",
            "es": "Inicial: movimientos (transactions), extractos mensuales por cuenta (PDF/Excel) y el extracto mensual integrado (PDF). Agrupada por cuenta, ventana de 90 días."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/ing-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "250c771b4746608e"
    },
    {
      "id": "leroymerlin-es",
      "name": "Leroy Merlin España",
      "service": "leroymerlin",
      "categories": [
        "diy"
      ],
      "trust": "community",
      "beta": false,
      "domain": "leroymerlin.es",
      "country": "ES",
      "formats": [],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": "0.1.53.13",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-10.3",
          "changes": {
            "en": "Receipts: do not stop on reaching a year with no purchases (stopAfterEmpty) — it previously stopped at 2025 (no purchases) and hid the older receipts.",
            "es": "Tickets: no cortar al llegar a un año sin compras (stopAfterEmpty) — antes se paraba en 2025 (sin compras) y ocultaba los tickets más antiguos."
          }
        },
        {
          "version": "2026-07-10.2",
          "changes": {
            "en": "\"Orders\" stream: show ALL orders from \"my orders\" (removes the filter that kept only the ONLINE ones and hid in-store orders that appear there too).",
            "es": "Stream «Pedidos»: mostrar TODOS los pedidos de «mis pedidos» (se quita el filtro que dejaba solo los ONLINE y ocultaba pedidos de tienda que también aparecen ahí)."
          }
        },
        {
          "version": "2026-07-10.1",
          "changes": {
            "en": "In-store receipts: start from the current year (yearOffset 0) — it previously started two years back and skipped this year's purchases and last year's.",
            "es": "Tickets de tienda: empezar en el año actual (yearOffset 0) — antes empezaba 2 años atrás y se saltaba las compras de este año y el anterior."
          }
        },
        {
          "version": "2026-07-10",
          "changes": {
            "en": "Adds online purchases (the \"Online orders\" stream via /order-followup/backend/v2/orders, filtered to ONLINE) alongside the existing in-store receipts; multi-output source (streams).",
            "es": "Añade compras online (stream «Pedidos online» vía /order-followup/backend/v2/orders, filtradas a ONLINE) junto a los tickets de tienda existentes; fuente multi-salida (streams)."
          }
        },
        {
          "version": "2026-07-08",
          "changes": {
            "en": "Receipts via a JSON API (cookie).",
            "es": "Recibos vía API JSON (cookie)."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/leroymerlin-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "428015c7f5e5803e"
    },
    {
      "id": "n26",
      "name": "N26",
      "service": "n26",
      "categories": [
        "banking"
      ],
      "trust": "community",
      "beta": true,
      "domain": "n26.com",
      "country": "EU",
      "formats": [],
      "crossDomain": [
        "api.tech26.de"
      ],
      "version": "2026-08-24",
      "minVersion": "0.5.0.24",
      "gaps": [],
      "contributors": [],
      "changelog": [],
      "url": "https://habeas-dev.github.io/sources/n26.json",
      "updated": "2026-08-24T19:57:30+02:00",
      "behaviourHash": "4d859f0996f58744"
    },
    {
      "id": "openbank-es",
      "name": "Openbank España",
      "service": "openbank",
      "categories": [
        "banking"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "openbank.es",
      "country": "ES",
      "formats": [],
      "crossDomain": [],
      "version": "2026-08-26.1",
      "minVersion": "0.3.0.24",
      "gaps": [
        "tarjetas"
      ],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26.1",
          "changes": {
            "en": "Trust level raised to first-party: written and verified against the real service by the project, not contributed unreviewed. The label describes provenance, not permission — the same-domain guard, the consent screen and every other rule apply identically whatever it says.",
            "es": "Confianza elevada a first-party: escrita y verificada contra el servicio real por el proyecto, no una aportación sin revisar. La etiqueta describe procedencia, no permisos — la guardia de mismo dominio, la pantalla de consentimiento y las demás reglas se aplican igual diga lo que diga."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-16",
          "changes": {
            "en": "Map the movement's running balance (saldo.importe) to record.balanceAfter (promoted to a canonical field for the Cuéntamo contract). Requires extension >= 0.3.0.24.",
            "es": "Mapea el saldo tras el movimiento (saldo.importe) a record.balanceAfter (promovido a campo canónico para el contrato del consumidor). Requiere extensión >= 0.3.0.24."
          }
        },
        {
          "version": "2026-07-15.1",
          "changes": {
            "en": "Fixes the first page of movements coming back empty.",
            "es": "Corrige la primera página de movimientos, que llegaba vacía."
          }
        },
        {
          "version": "2026-07-15",
          "changes": {
            "en": "Adds account movements (last 90 days) and monthly statements in PDF and Excel, one per account. Stops before any step that would ask you for a one-time code.",
            "es": "Añade los movimientos por cuenta (últimos 90 días) y los extractos mensuales en PDF y Excel, uno por cuenta. Se detiene antes de cualquier paso que te pediría un código de un solo uso."
          }
        },
        {
          "version": "2026-07-14",
          "changes": {
            "en": "Initial: integrated monthly statements (PDF) across all accounts. Movements/cards/investments are declared gaps for community contribution.",
            "es": "Inicial: extractos mensuales integrados (PDF) de todas las cuentas. Movimientos, tarjetas e inversiones quedan como carencias declaradas, abiertas a la comunidad."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/openbank-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "4b06808638f531d0"
    },
    {
      "id": "pagatelia-es",
      "name": "Pagatelia — facturas",
      "service": "pagatelia",
      "categories": [
        "tolls"
      ],
      "trust": "community",
      "beta": false,
      "domain": "pagatelia.com",
      "country": "ES",
      "formats": [
        "pdf"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": "0.7.0.48",
      "gaps": [],
      "contributors": [
        "David Marín Carreño"
      ],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/pagatelia-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "a3445d821787542f"
    },
    {
      "id": "paypal",
      "name": "PayPal",
      "service": "paypal",
      "categories": [
        "banking"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "paypal.com",
      "country": "global",
      "formats": [
        "json"
      ],
      "crossDomain": [],
      "version": "2026-08-26.1",
      "minVersion": "0.7.0.10",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26.1",
          "changes": {
            "en": "Trust level raised to first-party: written and verified against the real service by the project, not contributed unreviewed. The label describes provenance, not permission — the same-domain guard, the consent screen and every other rule apply identically whatever it says.",
            "es": "Confianza elevada a first-party: escrita y verificada contra el servicio real por el proyecto, no una aportación sin revisar. La etiqueta describe procedencia, no permisos — la guardia de mismo dominio, la pantalla de consentimiento y las demás reglas se aplican igual diga lo que diga."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-13",
          "changes": {
            "en": "Declares country: global. PayPal works in any country, but leaving it undeclared left it unclassified just as the extension and the website began ordering sources by geographic relevance.",
            "es": "Declara country: global. PayPal funciona en cualquier país, pero al no declararlo quedaba sin clasificar justo cuando la extensión y la web han empezado a ordenar las fuentes por relevancia geográfica."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/paypal.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "296abe9ffd4bdebb"
    },
    {
      "id": "pepeenergy-es",
      "name": "Pepe Energy — facturas",
      "service": "pepeenergy",
      "categories": [
        "energy"
      ],
      "trust": "community",
      "beta": false,
      "domain": "pepeenergy.com",
      "country": "ES",
      "formats": [
        "pdf"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": "0.8.0",
      "gaps": [],
      "contributors": [
        "David Marín Carreño"
      ],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/pepeenergy-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "ece1fe023254272a"
    },
    {
      "id": "pepephone-es",
      "name": "Pepephone — facturas",
      "service": "pepephone",
      "categories": [
        "telecom"
      ],
      "trust": "community",
      "beta": false,
      "domain": "pepephone.com",
      "country": "ES",
      "formats": [
        "pdf"
      ],
      "crossDomain": [],
      "version": "2026-08-26",
      "minVersion": "0.9.2",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/pepephone-es.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "57acad32816ff973"
    },
    {
      "id": "raisin",
      "name": "Raisin",
      "service": "raisin",
      "categories": [
        "banking",
        "investment"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "raisin.com",
      "country": "global",
      "formats": [],
      "crossDomain": [
        "api2.weltsparen.de"
      ],
      "version": "2026-08-26.1",
      "minVersion": "0.5.0.32",
      "gaps": [],
      "contributors": [
        "David Marín Carreño"
      ],
      "changelog": [
        {
          "version": "2026-08-26.1",
          "changes": {
            "en": "Trust level raised to first-party: written and verified against the real service by the project, not contributed unreviewed. The label describes provenance, not permission — the same-domain guard, the consent screen and every other rule apply identically whatever it says.",
            "es": "Confianza elevada a first-party: escrita y verificada contra el servicio real por el proyecto, no una aportación sin revisar. La etiqueta describe procedencia, no permisos — la guardia de mismo dominio, la pantalla de consentimiento y las demás reglas se aplican igual diga lo que diga."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-21",
          "changes": {
            "en": "Declared country: \"global\" — the field was missing since the multi-market rename (raisin-es -> raisin), so the catalog showed no 🌐 badge and country filters didn't treat it as worldwide.",
            "es": "Declara country: \"global\" — el campo faltaba desde el renombrado multimercado (raisin-es -> raisin), así que el catálogo no mostraba el distintivo 🌐 y los filtros por país no la trataban como mundial."
          }
        },
        {
          "version": "2026-07-20.18",
          "changes": {
            "en": "Product names now appear in your language, in any Raisin country. Needs Habeas 0.5.0.32 or newer.",
            "es": "Los nombres de producto aparecen ahora en tu idioma, en cualquier país de Raisin. Requiere Habeas 0.5.0.32 o posterior."
          }
        },
        {
          "version": "2026-07-20.17",
          "changes": {
            "en": "Now works for every Raisin country, not only Spain, and follows your browser's language. Needs Habeas 0.5.0.30 or newer.",
            "es": "Ahora funciona en todos los países de Raisin, no solo España, y sigue el idioma de tu navegador. Requiere Habeas 0.5.0.30 o posterior."
          }
        },
        {
          "version": "2026-07-20.16",
          "changes": {
            "en": "A deposit now shows the same full name everywhere: in its records, in its documents and in the account picker.",
            "es": "Un depósito muestra ahora el mismo nombre completo en todas partes: en sus registros, en sus documentos y en el selector de cuentas."
          }
        },
        {
          "version": "2026-07-20.15",
          "changes": {
            "en": "Deposits and savings accounts now carry names that match what each one actually is, and each deposit's documents are filed under it. Needs Habeas 0.5.0.29 or newer.",
            "es": "Los depósitos y las cuentas de ahorro llevan ahora nombres acordes a lo que es cada uno, y los documentos de cada depósito quedan archivados bajo él. Requiere Habeas 0.5.0.29 o posterior."
          }
        },
        {
          "version": "2026-07-20.14",
          "changes": {
            "en": "Requires 0.5.0.28: group-field templates now resolve (the account picker AND the Account column show the readable name instead of a raw id).",
            "es": "Requiere 0.5.0.28: las plantillas de campo de grupo ya se resuelven (tanto el selector de cuentas como la columna Cuenta muestran el nombre legible en vez de un id crudo)."
          }
        },
        {
          "version": "2026-07-20.13",
          "changes": {
            "en": "Deposit names now read in your language, with the rate and the term written out. Needs Habeas 0.5.0.27 or newer.",
            "es": "Los nombres de los depósitos se leen ahora en tu idioma, con el tipo y el plazo escritos. Requiere Habeas 0.5.0.27 o posterior."
          }
        },
        {
          "version": "2026-07-20.12",
          "changes": {
            "en": "Accounts and deposits now have readable names, with the real bank, the rate and the opening date, instead of an internal code.",
            "es": "Las cuentas y los depósitos tienen ya nombres legibles, con el banco real, el tipo y la fecha de apertura, en vez de un código interno."
          }
        },
        {
          "version": "2026-07-20.11",
          "changes": {
            "en": "Cancelled and finished deposits are included now, with all their documents. Needs Habeas 0.5.0.26 or newer.",
            "es": "Se incluyen ahora los depósitos cancelados y finalizados, con todos sus documentos. Requiere Habeas 0.5.0.26 o posterior."
          }
        },
        {
          "version": "2026-07-20.10",
          "changes": {
            "en": "Savings and deposit accounts show the bank's name instead of an internal identifier. Needs Habeas 0.5.0.25 or newer.",
            "es": "Las cuentas de ahorro y los depósitos muestran el nombre del banco en lugar de un identificador interno. Requiere Habeas 0.5.0.25 o posterior."
          }
        },
        {
          "version": "2026-07-20.9",
          "changes": {
            "en": "Fixes deposits, savings and documents coming back empty. Needs Habeas 0.5.0.24 or newer.",
            "es": "Corrige los depósitos, el ahorro y los documentos, que llegaban vacíos. Requiere Habeas 0.5.0.24 o posterior."
          }
        },
        {
          "version": "2026-07-20.8",
          "changes": {
            "en": "Fixes the account list failing to load. Needs Habeas 0.5.0.19 or newer.",
            "es": "Corrige la lista de cuentas, que no cargaba. Requiere Habeas 0.5.0.19 o posterior."
          }
        },
        {
          "version": "2026-07-20.7",
          "changes": {
            "en": "Fixes an 'unauthorised' error that was blocking every listing.",
            "es": "Corrige un error de 'no autorizado' que bloqueaba todos los listados."
          }
        },
        {
          "version": "2026-07-20.6",
          "changes": {
            "en": "Fixes sign-in errors on the request that reads your Raisin data.",
            "es": "Corrige los errores de acceso en la petición que lee tus datos de Raisin."
          }
        },
        {
          "version": "2026-07-20.5",
          "changes": {
            "en": "Restores the session fix, this time correctly: a long sync no longer stops partway.",
            "es": "Restaura el arreglo de la sesión, esta vez bien: una sincronización larga ya no se detiene a medias."
          }
        },
        {
          "version": "2026-07-20.4",
          "changes": {
            "en": "Undoes the previous change, which caused sign-in errors. Nothing new for you.",
            "es": "Deshace el cambio anterior, que provocaba errores de acceso. Nada nuevo para ti."
          }
        },
        {
          "version": "2026-07-20.3",
          "changes": {
            "en": "Another step in the same sign-in fix, superseded two versions later. Nothing new for you.",
            "es": "Otro paso del mismo arreglo de acceso, sustituido dos versiones después. Nada nuevo para ti."
          }
        },
        {
          "version": "2026-07-20.2",
          "changes": {
            "en": "Keeps your session valid through a long sync. It used to expire after a few minutes and the sync stopped.",
            "es": "Mantiene tu sesión válida durante una sincronización larga. Antes caducaba a los pocos minutos y la sincronización se detenía."
          }
        },
        {
          "version": "2026-07-20.1",
          "changes": {
            "en": "Fixes an 'unauthorised' error when listing your accounts.",
            "es": "Corrige un error de 'no autorizado' al listar tus cuentas."
          }
        },
        {
          "version": "2026-07-20",
          "changes": {
            "en": "Raisin (WeltSparen): your account movements, fixed-term deposits, flexible savings movements and your deposit documents. Last 90 days, without asking you for a one-time code.",
            "es": "Raisin (WeltSparen): los movimientos de tu cuenta, los depósitos a plazo, los movimientos del ahorro flexible y los documentos de tus depósitos. Últimos 90 días, sin pedirte código de un solo uso."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/raisin.json",
      "updated": "2026-08-27T16:51:51+02:00",
      "behaviourHash": "906bed24463093d2"
    },
    {
      "id": "revolut",
      "name": "Revolut",
      "service": "revolut",
      "categories": [
        "banking"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "revolut.com",
      "country": "global",
      "formats": [],
      "crossDomain": [
        "storage.googleapis.com"
      ],
      "version": "2026-08-28",
      "minVersion": "0.10.2",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-28",
          "changes": {
            "en": "Each movement now keeps the same identity between syncs, so it is not saved twice. Revolut issues a new internal reference for the same completed movement from one visit to the next, and that reference was what identified it, so the same purchase came back as a new one. It is now identified by the account, date, amount, currency and description instead. One consequence, once: on the first sync after this update your Revolut movements are treated as new, because their identity has changed.",
            "es": "Cada movimiento conserva ahora la misma identidad entre sincronizaciones, así que deja de guardarse dos veces. Revolut emite una referencia interna nueva para el mismo movimiento ya completado de una visita a otra, y esa referencia era lo que lo identificaba, así que la misma compra volvía como si fuera nueva. Ahora se identifica por la cuenta, la fecha, el importe, la divisa y el concepto. Una consecuencia, una sola vez: en la primera sincronización tras esta actualización tus movimientos de Revolut se tratan como nuevos, porque su identidad ha cambiado."
          }
        },
        {
          "version": "2026-08-26.6",
          "changes": {
            "en": "Movements now show the amount that actually left your account, fees included. Payments that carried one — a card payment in another currency at the weekend, for instance — used to arrive slightly below what you were really charged. Needs Habeas 0.10.1 or newer.",
            "es": "Los movimientos muestran ahora el importe que realmente salió de tu cuenta, comisiones incluidas. Los pagos que llevaban alguna —una compra con tarjeta en otra divisa en fin de semana, por ejemplo— llegaban algo por debajo de lo que te cobraron. Requiere Habeas 0.10.1 o posterior."
          }
        },
        {
          "version": "2026-08-26.4",
          "changes": {
            "en": "Trust level raised to first-party: written and verified against the real service by the project, not contributed unreviewed. The label describes provenance, not permission — the same-domain guard, the consent screen and every other rule apply identically whatever it says.",
            "es": "Confianza elevada a first-party: escrita y verificada contra el servicio real por el proyecto, no una aportación sin revisar. La etiqueta describe procedencia, no permisos — la guardia de mismo dominio, la pantalla de consentimiento y las demás reglas se aplican igual diga lo que diga."
          }
        },
        {
          "version": "2026-08-26.3",
          "changes": {
            "en": "Documents a limit rather than fixing it: a card payment made abroad at the weekend arrived about 1% short, because Revolut's out-of-hours surcharge left the balance without ever appearing in the data. Fixed later, in 2026-08-26.6.",
            "es": "Documenta un límite en vez de arreglarlo: un pago con tarjeta en divisa hecho en fin de semana llegaba un 1% corto, porque el recargo de Revolut fuera de horario salía del saldo sin aparecer nunca en los datos. Corregido después, en la 2026-08-26.6."
          }
        },
        {
          "version": "2026-08-26.1",
          "changes": {
            "en": "Three kinds of entry stop being listed as movements, because they are not. The 0 EUR authorisation a shop makes to check your card is alive; declined and reverted charges, whose successful retry also arrives, so the purchase was counted up to three times. And money coming back from a savings vault no longer arrives negative, nor carrying the vault's balance instead of your account's.",
            "es": "Tres tipos de apunte dejan de listarse como movimientos, porque no lo son. La autorización de 0 € que hace un comercio para comprobar que tu tarjeta está viva; los cargos denegados y revertidos, cuyo reintento correcto también llega, de modo que la compra se contaba hasta tres veces. Y el dinero que vuelve de un bolsillo de ahorro ya no llega en negativo, ni arrastrando el saldo del bolsillo en lugar del de tu cuenta."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-12",
          "changes": {
            "en": "Automatic sync no longer starts until app.revolut.com/home has finished loading. The app fires authenticated requests on earlier screens, so a sync could begin before the view holding the data existed.",
            "es": "La sincronización automática ya no arranca hasta que app.revolut.com/home ha terminado de cargar. La app dispara peticiones autenticadas en pantallas anteriores, así que una sincronización podía empezar antes de que existiera la vista con los datos."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-16",
          "changes": {
            "en": "Each movement now carries the account balance left after it, and the date it was settled. Needs Habeas 0.3.0.24 or newer.",
            "es": "Cada movimiento lleva ahora el saldo que queda en la cuenta después de él, y la fecha en que se liquidó. Requiere Habeas 0.3.0.24 o posterior."
          }
        },
        {
          "version": "2026-07-15.2",
          "changes": {
            "en": "Add account statements (PDF/CSV) per account × month: async-generated (poll account-statements until READY) then download the signed Google Storage URL (crossDomainHosts + consent). Statements bounded to the last ~12 months.",
            "es": "Añade extractos de cuenta (PDF/CSV) por cuenta × mes: se generan de forma asíncrona (se consulta account-statements hasta READY) y luego se descarga la URL firmada de Google Storage (crossDomainHosts + consentimiento). Los extractos se limitan a los últimos ~12 meses."
          }
        },
        {
          "version": "2026-07-15.1",
          "changes": {
            "en": "Add per-account (pocket) filter with a currency-labelled Accounts picker.",
            "es": "Añade filtro por cuenta (bolsillo) con un selector de cuentas etiquetado por divisa."
          }
        },
        {
          "version": "2026-07-15",
          "changes": {
            "en": "Your Revolut movements across all of your accounts.",
            "es": "Tus movimientos de Revolut en todas tus cuentas."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/revolut.json",
      "updated": "2026-08-28T17:15:35+02:00",
      "behaviourHash": "7232204f9f330738"
    },
    {
      "id": "traderepublic",
      "name": "Trade Republic",
      "service": "traderepublic",
      "categories": [
        "banking",
        "investment"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "traderepublic.com",
      "country": "global",
      "formats": [],
      "crossDomain": [],
      "version": "2026-09-02",
      "minVersion": "0.10.6",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-09-02",
          "changes": {
            "en": "Habeas now waits until your portfolio board is actually open before asking Trade Republic for anything. Your transactions only exist behind that page, so an attempt from the login screen or from anywhere else could never work — and asking anyway disturbs a session you have just opened. Nothing is requested until you are on it.",
            "es": "Habeas espera ahora a que tu cartera esté realmente abierta antes de pedirle nada a Trade Republic. Tus movimientos sólo existen detrás de esa página, así que un intento desde la pantalla de acceso o desde cualquier otro sitio no podía funcionar — y hacerlo igualmente molesta a una sesión recién abierta. No se pide nada hasta que estés en ella."
          }
        },
        {
          "version": "2026-08-26.1",
          "changes": {
            "en": "Trust level raised to first-party: written and verified against the real service by the project, not contributed unreviewed. The label describes provenance, not permission — the same-domain guard, the consent screen and every other rule apply identically whatever it says.",
            "es": "Confianza elevada a first-party: escrita y verificada contra el servicio real por el proyecto, no una aportación sin revisar. La etiqueta describe procedencia, no permisos — la guardia de mismo dominio, la pantalla de consentimiento y las demás reglas se aplican igual diga lo que diga."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-17",
          "changes": {
            "en": "Trades now arrive with the number of shares, the price and the commission as separate figures instead of only as text. Needs Habeas 0.3.0.24 or newer.",
            "es": "Las operaciones llegan ahora con el número de títulos, el precio y la comisión como cifras separadas, en vez de solo como texto. Requiere Habeas 0.3.0.24 o posterior."
          }
        },
        {
          "version": "2026-07-16",
          "changes": {
            "en": "Your timeline now arrives as investment records: each one says whether it was a trade or a cash movement, which instrument it concerned and into which account it settled. The quantity, price and fees of a trade still arrive only as the text Trade Republic shows. Needs Habeas 0.3.0.24 or newer.",
            "es": "Tu timeline llega ya como registros de inversión: cada uno indica si fue una operación o un movimiento de efectivo, sobre qué instrumento y en qué cuenta se liquidó. La cantidad, el precio y las comisiones de una operación siguen llegando solo como el texto que muestra Trade Republic. Requiere Habeas 0.3.0.24 o posterior."
          }
        },
        {
          "version": "2026-07-15.3",
          "changes": {
            "en": "Adds the monthly account statement as a PDF and the month's transactions as a CSV, one of each per completed month.",
            "es": "Añade el extracto mensual de la cuenta en PDF y las transacciones del mes en CSV, uno de cada por cada mes cerrado."
          }
        },
        {
          "version": "2026-07-15.2",
          "changes": {
            "en": "Extract the traded instrument ISIN from the timeline icon into record.isin.",
            "es": "Extrae el ISIN del instrumento negociado desde el icono del timeline a record.isin."
          }
        },
        {
          "version": "2026-07-15.1",
          "changes": {
            "en": "Enrich each timeline transaction with its timelineDetailV2 detail in record.extra.detail.",
            "es": "Enriquece cada transacción del timeline con su detalle de timelineDetailV2 en record.extra.detail."
          }
        },
        {
          "version": "2026-07-15",
          "changes": {
            "en": "Initial: the whole transaction timeline via Trade Republic’s WebSocket API.",
            "es": "Inicial: el timeline completo de transacciones a través de la API WebSocket de Trade Republic."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/traderepublic.json",
      "updated": "2026-09-02T14:02:23+02:00",
      "behaviourHash": "3682c9c4d4c51cd4"
    },
    {
      "id": "wizink-es",
      "name": "WiZink España",
      "service": "wizink",
      "categories": [
        "card",
        "banking"
      ],
      "trust": "first-party",
      "beta": false,
      "domain": "wizink.es",
      "country": "ES",
      "formats": [],
      "crossDomain": [],
      "version": "2026-08-28",
      "minVersion": "0.10.2",
      "gaps": [],
      "contributors": [],
      "changelog": [
        {
          "version": "2026-08-28",
          "changes": {
            "en": "Pending charges are no longer collected, and each movement now keeps the same identity between syncs. A pending charge is provisional — its amount, date and wording can all still change — and WiZink lists it a second time inside the statement that bills it, so the same purchase was being saved twice. From now on a movement is collected once, from its statement, with its final values. Its identity is also built from what the values mean rather than from how the page painted them, so a change of styling on the website can no longer turn one movement into two. One consequence, once: on the first sync after this update your card movements are treated as new, because their identity has changed.",
            "es": "Ya no se recogen los cargos pendientes, y cada movimiento conserva la misma identidad entre sincronizaciones. Un cargo pendiente es provisional — su importe, su fecha y su texto todavía pueden cambiar — y WiZink lo lista una segunda vez dentro del extracto que lo liquida, así que la misma compra se guardaba dos veces. A partir de ahora un movimiento se recoge una sola vez, desde su extracto y con sus valores definitivos. Su identidad, además, se construye con lo que significan los valores y no con cómo los pintaba la web, así que un cambio de estilo en la página ya no puede convertir un movimiento en dos. Una consecuencia, una sola vez: en la primera sincronización tras esta actualización tus movimientos de tarjeta se tratan como nuevos, porque su identidad ha cambiado."
          }
        },
        {
          "version": "2026-08-26",
          "changes": {
            "en": "Records authorship: the session was recorded and the definition written by the maintainer. No change to extraction.",
            "es": "Registra la autoría: la sesión la grabó y la definición la escribió el mantenedor. No cambia la extracción."
          }
        },
        {
          "version": "2026-08-08",
          "changes": {
            "en": "No change to what this source extracts. This version gave it its guide page on habeas.dev.",
            "es": "Sin cambios en lo que extrae esta fuente. Esta versión le dio su página de guía en habeas.dev."
          }
        },
        {
          "version": "2026-07-10",
          "changes": {
            "en": "Statements now show a readable label (\"Statement <date>\") instead of the internal identifier, and carry the type \"Statement\".",
            "es": "Los extractos ahora muestran una etiqueta legible («Extracto <fecha>») en lugar del identificador interno, y llevan el tipo «Extracto»."
          }
        },
        {
          "version": "2026-07-09",
          "changes": {
            "en": "One WiZink source instead of three. You now choose what you want from it: your card movements, or your statements as PDF or as Excel. Needs Habeas 0.1.52 or newer.",
            "es": "Una sola fuente de WiZink en lugar de tres. Ahora eliges qué quieres de ella: los movimientos de tu tarjeta, o tus extractos en PDF o en Excel. Requiere Habeas 0.1.52 o posterior."
          }
        }
      ],
      "url": "https://habeas-dev.github.io/sources/wizink-es.json",
      "updated": "2026-08-28T17:15:35+02:00",
      "behaviourHash": "6e437127a24f9028"
    }
  ]
}
