@pipeworx/oneinfo-storage
Connect: https://gateway.pipeworx.io/oneinfo-storage/mcp · Install: one-click buttons
No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.
Tools: 2
Italian regulated company disclosures direct from 1INFO — a document index (title, issuer, category, timestamp, document link), updated same-day, covering the ~314 issuers that use 1INFO instead of eMarket Storage as their Officially Appointed Mechanism (OAM) for EU Transparency Directive filings.
Tools
oneinfo_search_disclosures(company?, ndg?, category?, date_from?, date_to?, limit?, offset?)— search disclosures by issuer (name, resolved against 1INFO’s own 314-issuer list, or a knownndg), category, and/or a publication date window. Returns newest first.oneinfo_get_disclosure(id, date)— fetch one disclosure by its protocolCode and publication date (both come from a prior search — this source has no by-id-only lookup).
Why this pack exists — and why it’s separate from emarket-storage
Italy has TWO Officially Appointed Mechanisms for Transparency Directive
disclosures: eMarket Storage (Teleborsa) and 1INFO. An issuer discloses
through exactly one of the two — there is no overlap, so neither pack can
be dropped in favor of the other. Confirmed live 2026-09-24: 1INFO’s own
314-issuer list includes IREN and SOMEC, both absent from eMarket Storage’s
picklist; roughly half of STAR-segment issuers use 1INFO. If a company
isn’t found here, try emarket-storage’s emarket_search_disclosures
instead (and vice versa — emarket-storage’s not-found note points back
here).
⚠️ Five things a caller must know
- 1INFO-covered issuers only — not the full Italian market. A company
search that matches nothing returns an explanatory
note, not a bare error, pointing atemarket-storageinstead. This pack does not merge eMarket Storage data. - This is a document index, not an XBRL-facts API. Every row is a
disclosure EVENT: a title, an issuer, a category, a publication timestamp,
and a link to the underlying document. There is no per-fact extraction.
For XBRL facts (net income, revenue…) from Italian ANNUAL reports, use
esef-filings(proxies filings.xbrl.org) — measured 2026-09-24: annual filings from 1INFO issuers (SOMEC, IREN, Softlab) reached filings.xbrl.org about 6 days after they were stored here. There is no XBRL-facts source anywhere for HALF-YEAR reports (ESEF is annual-only by construction), so this pack is the only structured way to see those land. - No ISIN. LEI appears only embedded in the filename of XBRL-tagged
annual-report ZIPs (
has_xbrl: truerows — e.g.81560001692D0424C949-2025-12-31-1-it.htmlinside SOMEC’s FY2025 ZIP). Identify issuers by name (resolved against 1INFO’s own list) or byndg(1INFO’s internal numeric id) directly once you have it from a prior search. date_tois INCLUSIVE (the last local-calendar day you want, Europe/Rome). Unlikeemarket-storage, this pack filters dates itself client-side rather than passing a range upstream, so there’s no exclusive-upstream-bound trap to work around — verified live 2026-09-24:date_from=2026-09-22&date_to=2026-09-22returns the one disclosure actually published that day (UNIDATA), proving the last day is included.- No server-side filter by issuer exists on this source. Verified live
2026-09-24: 1INFO’s
/API/Documentiendpoint honorsSearchFilter[categoria](it genuinely narrows the result set) but silently IGNORES bothSearchFilter[ndg]and the DataTables globalsearch[value]—recordsFilteredis identical with or without them. This pack resolves a company tondgand filters CLIENT-SIDE while paging the (always storage-date-descending) result set. Adate_from/date_towindow is scanned to completion (bounded to 6 upstream requests / ~6,000 rows as a safety cap); an open-ended company-only search stops as soon as it haslimitmatches, which is cheap but may miss an issuer’s older filings. Every response says honestly how far it scanned (scanned.oldest_date_local,scanned.stopped_reason) and whethermatched_in_scanned_rangeis an exact count for the range (range_fully_scanned: true) or only a lower bound — never a fabricated total.
Auth
Keyless. No account, no API key.
Data sources
- https://www.1info.it/PORTALE1INFO/ — 1INFO’s public disclosure storage portal (an EU Transparency Directive OAM for Italy). Pipeworx queries its JSON API live on every call; there is no bulk download.
Gotchas
- No formal REST API — this is a DataTables server-side endpoint.
POST /PORTALE1INFO/API/Documentirequires the standard DataTables form fields (draw,columns[0][...],order[0][...],start,length); a bare POST missing them fails with a server-sideNullReferenceException.GET /PORTALE1INFO/API/companies/documenti(314 issuers) andGET /PORTALE1INFO/API/documenti/Categoriesare plain GETs. - The download URL needs a
.pdfsuffix 1INFO’s own JSON does not show — a silent-404-shaped trap.PdfShow.aspxtakes afile(the document code) and ayear(the fiscal year) query parameter. When a row has an XBRL package (protocolCodeXbrlnon-null, e.g."165960_oneinfo.zip"), that value downloads as-is. But whenprotocolCodeXbrlis null — every half-year report, every ancillary filing, i.e. most rows — using the bareprotocolCode(e.g."171904_oneinfo") 302-redirects toError.aspx …documento non trovatowith no indication of what went wrong. Appending.pdf("171904_oneinfo.pdf") is what actually resolves — confirmed live 2026-09-24 on three different issuers/categories (UNIDATA REGEM, Banca Sistema 3.1, SOMEC 1.2), each 302 without the suffix and HTTP 200 with it. yearis the FISCAL year fromdataEsercizio, not the storage year — and it can differ between two filings stored on the very same day for the very same report: SOMEC’s FY2025 annual report was stored as two sibling rows (the ESEF-format ZIP and a plain-PDF twin) 2 minutes apart, withyear=2025for one andyear=2026for the other — both confirmed live to need exactly their own computed year, not the other’s.- Company-name resolution uses
rankMatches(exact > prefix > whole-wordsubstring) against 1INFO’s own issuer picklist, embedded at
/API/companies/documenti. An ambiguous match (multiple issuers tied at the same score) returnscandidatesinstead of guessing. - The
categoriafilter accepts multi-value rows — a single disclosure can carry more than one code (e.g."1.2,2.2");category_labelsreflects every code on the row, while filtering bycategorymatches on membership, not exact equality. - Dates are computed in Europe/Rome via
Intl.DateTimeFormat(DST-correct) rather than manual UTC offsets —dataStoccaggio/dataEsercizioare raw Unix-seconds timestamps with no timezone marker in the source JSON. oneinfo_get_disclosurehas no direct by-id endpoint on the source — it re-scans that day’s listing (up to 3 requests / 3,000 rows, far more than any single day’s market-wide volume — 33,444 rows measured over roughly 5 years) and matches onprotocolCode.
Tools
- oneinfo_search_disclosures — Search Italian regulated company disclosures from 1INFO, one of Italy’s two EU Transparency Directive Officially Appointed Mechanisms (the other is eMarket Storage — use emarket-storage’s emarket_sear
- oneinfo_get_disclosure — Fetch a single 1INFO disclosure by its protocolCode id and publication date, as returned by oneinfo_search_disclosures. This source has no by-id-only lookup endpoint, only by-day listings, so both id
Tools
oneinfo_get_disclosure— Fetch a single 1INFO disclosure by its protocolCode id and publication date, as returned by oneinfo_search_disclosures. This source has no by-id-only lookup endpoint, only by-day listings, so both idoneinfo_search_disclosures— Search Italian regulated company disclosures from 1INFO, one of Italy's two EU Transparency Directive Officially Appointed Mechanisms (the other is eMarket Storage — use emarket-storage's emarket_sear