GET /filings/, GET /companies/, and GET /isins/ endpoints automatically return only data for companies on the user's watchlist. This restriction is applied in addition to any existing country or source restrictions.POST /watchlist/companies/, DELETE /watchlist/companies/{id}/, POST /watchlist/companies/bulk-add/, POST /watchlist/companies/bulk-remove/) return 403 Forbidden with a descriptive error message when the watchlist is locked.GET /watchlist/ response now includes an is_locked boolean field, allowing client applications to adapt their UI accordingly (e.g., hiding edit controls).GET /companies/?search= endpoint has been significantly optimized, reducing worst-case response times from ~1,600ms to ~100ms. This improvement is most noticeable for search terms that previously triggered broad identifier lookups. No changes to the query parameter, search behavior, or response schema — this is a transparent backend optimization.GET /filings/?search= endpoint has been optimized using the same approach, reducing worst-case response times by up to 14x for common search terms. No changes required to existing integrations.GET /filings/?company_isin= filter has been re-architected, reducing response times from up to 18 seconds to under 25ms. Clients using ISIN-based filing lookups will see an immediate and significant improvement.GET /companies/?search= endpoint has been significantly optimized, reducing worst-case response times from ~1,600ms to ~100ms. This improvement is most noticeable for search terms that previously triggered broad identifier lookups. No changes to the query parameter, search behavior, or response schema — this is a transparent backend optimization.GET /isins/ endpoint now exposes 8 new fields sourced from the open OpenFIGI registry (ISO 23580), enabling security-level instrument resolution.
figi, composite_figi, share_class_figi — the three tiers of the Financial Instrument Global Identifier hierarchy (listing-level, country-composite, and global share class).security_type, security_type2, market_sector, exch_code — instrument metadata useful for filtering, routing, and portfolio analytics.figi_last_updated — timestamp of the last successful enrichment, allowing clients to assess data currency.null for figi_last_updated) where enrichment has not yet been performed.GET /filings/ returned 504 Gateway Timeout errors under complex multi-filter queries with large page sizes. Worst-case response times have been reduced from timeout to under 4 seconds. This improvement applies to all paginated API endpoints. No changes to existing integrations required.https://mcp.financialfilings.com now exposes all write endpoints from the 2026-03-29 API update, increasing the total tool count from 33 to 41.
watchlist_companies_create: Add a single company to your watchlist.watchlist_companies_bulk_add_create: Add up to 100 companies in a single request.watchlist_companies_bulk_remove_create: Remove up to 100 companies in a single request.webhooks_create: Create a new webhook subscription.webhooks_deliveries_replay_create: Re-send a failed webhook delivery.webhooks_regenerate_secret_create: Rotate a webhook's signing secret.webhooks_test_create: Send a test event to a webhook endpoint.chat_stream_create: Interact with the AI RAG agent via MCP.destructiveHint, openWorldHint) to help AI clients distinguish between read-only and mutating operations.GET /webhooks/{id}/deliveries/ endpoint returned 403 Forbidden for all users, including those with active paid subscriptions. Delivery logs are now correctly accessible for all Standard Access (Level 1) plans and above.request_headers, request_payload, response_headers) that were declared in the schema but did not exist in the data model. These ghost fields have been removed from the list response, eliminating misleading nulls.GET /webhooks/{id}/deliveries/{uuid}/ to retrieve full details for a single delivery attempt.
request_headers and request_payload that were sent to the user's endpoint, dynamically rebuilt from the referenced filing record.POST /webhooks/{id}/deliveries/{uuid}/replay/ to re-send a webhook event.
POST /watchlist/companies/bulk-add/: Add up to 100 companies in a single request. Companies already on the watchlist are silently skipped.POST /watchlist/companies/bulk-remove/: Remove up to 100 companies in a single request. Companies not on the watchlist are silently skipped.{"company_ids": [1, 2, 3]} request body and return the list of IDs actually affected.filing.received webhook event is now documented in the API schema alongside filing.processed, providing a complete data contract for both event types.GET /watchlist/ endpoint now returns paginated results using the standard pagination envelope (count, next, previous, results), consistent with all other list endpoints. Previously, large watchlists (up to 1,259 companies) were returned as a single unpaginated response.
?page= parameter will receive the first page of results. The response structure is additive./mcp/verify/ endpoint and internal chat views from the public schema.operationId collision between the delivery list and delivery detail endpoints.https://mcp.financialfilings.com, enabling direct integration with Claude and other MCP-compatible AI clients.
403 after authentication.https://financialreports.eu/accounts/api-dashboard/logs/) providing full per-request visibility for the last 7 days.
GET /filings/{id}/ and GET /filings/?view=full, now exposes three new fields providing structured financial period context.
fiscal_year (integer, e.g., 2025), fiscal_period (enum: FY, Q1, Q2, Q3, Q4, H1, H2), and period_ending_date (date, e.g., 2025-12-31).null for other filing types.GET /filings/ endpoint now supports filtering by fiscal_year, fiscal_period, period_ending_date, period_ending_date_from, and period_ending_date_to, enabling precise period-based data extraction (e.g., fetching all Q3 2024 filings across a portfolio).GET /companies/{id}/ and GET /companies/?view=full, now exposes legal entity data sourced from GLEIF where available.
legal_status, legal_form (ISO 20275 ELF code + name), jurisdiction (ISO 3166 code + name), legal_address, legal_city, legal_zip_code.null or an empty string and require no changes to existing integrations.GET /filings/{id}/, now exposes two new fields providing visibility into the automated classification system.
filing_type_confidence (float, 0.0–1.0) and filing_type_reasoning (string)./filings/render/{id}/ endpoint now natively handles all filing formats via intelligent routing.
file_extension.500 Internal Server Error timeouts during massive data ingestion spikes or high-frequency webhook bursts.POST /chat/stream/): A high-performance Server-Sent Events (SSE) endpoint that streams the agent's real-time reasoning, tool execution, and final markdown response.GET /chat/sessions/{id}/messages/), rename sessions (PATCH /chat/sessions/{id}/), and delete sessions (DELETE /chat/sessions/{id}/).company_id or filing_ids parameters to strictly constrain the AI's search space to specific entities or documents.citations mapping the exact source text, document URL, and metadata used to generate the answer, ensuring complete auditability.proxy_url): Added to GET /filings/ and GET /filings/{id}/. This dynamically extracts and serves the main renderable document (HTML/XHTML) from complex ZIP archives (e.g., ESEF, SEC), while safely falling back to the raw CDN link for flat files like PDFs.viewer_url): Added to list and detail responses, providing a direct deep link to the filing within the FinancialReports web platform for immediate visual analysis and AI Chat.document_url and document fields remain entirely unchanged. They continue to return the raw S3 bucket links to ensure zero disruption to existing automated data ingestion pipelines.GET /filings/{id}/history/ endpoint to provide full transparency into record evolution.
filing_type (classification), language, and processing_status.changes object that explicitly maps the old value and the new value for every updated field. This eliminates the need for clients to manually store and compare historical snapshots.GET /filings/{id}/markdown/ endpoint now provides explicit status visibility when a markdown file is unavailable.
processing_status key (e.g., PENDING, FAILED, SKIPPED).404 Not Found and the original detail key is preserved.GET /companies/{id}/next-annual-report/ endpoint.
start_date and end_date, a confidence score (0-100), and an is_overdue boolean to immediately flag companies that have missed their expected reporting cycle.GET /isins/ endpoint to resolve International Securities Identification Numbers to legal entities.
codes parameter for comma-separated bulk resolution (e.g., ?codes=US0378331005,DE000A1EWWW0). This allows clients to resolve an entire portfolio to Company IDs in a single HTTP request.company object (containing id, name, ticker, and country_code). This "Hybrid" design prevents the "N+1 query" problem, giving users immediate context without requiring secondary API calls.search parameter for fuzzy matching, enabling autocomplete experiences (e.g., searching "US03...").GET /filings/ endpoint now accepts a company_isin filter, allowing users to fetch regulatory documents directly using a security identifier.GET /companies/ endpoint now supports an isin filter for exact entity lookups (case-insensitive).GET /webhooks/{id}/deliveries/ endpoint.
status (success/failed), response_status_code (e.g., 200, 404, 500), and duration_ms for every event, allowing for automated health monitoring of your integration.secret_key field has been removed from the standard GET /webhooks/ and GET /webhooks/{id}/ responses.
POST /webhooks/) or regeneration (POST /webhooks/{id}/regenerate-secret/).POST /webhooks/{id}/test/ API endpoint now utilizes the exact same execution pipeline as the Dashboard's "Send Test Event" button.
WebhookDelivery record, ensuring that automated integration tests leave a visible trace in your delivery logs for debugging.GET /filings/ endpoint now supports precise filtering by the standardized FRCF categories.
category (e.g., ?category=1) for targeted queries.categories (e.g., ?categories=1,3,9) for multi-category data ingestion workflows (e.g., fetching both "M&A" and "Financial Reporting" simultaneously).GET /filing-categories/ endpoint.document_url field to both the filing list (GET /filings/) and detail (GET /filings/{id}/) responses.
filing.received and filing.processed) are now strictly isolated from heavy data processing tasks. This ensures near-instant delivery times (<500ms), even when the system is processing large queues of complex Annual Reports.trigger_on_filing_received option. This event fires milliseconds after ingestion, providing immediate awareness of a filing's existence (e.g., for headline trading) before analysis is complete.
null.trigger_on_filing_processed. This event fires only after deep analysis, classification, and markdown conversion are complete, guaranteeing rich metadata.Webhook object and POST /webhooks/ endpoints to support the new event triggers.
trigger_on_filing_received=False, trigger_on_filing_processed=True), ensuring no disruption to current integrations.filing_type, language) and markdown_content as nullable, accurately reflecting the data contract for "Fast Lane" events.500 Internal Server Error instead of a graceful 429 Too Many Requests.
retry_after_seconds field, allowing for proper exponential backoff.X-RateLimit tracking headers were occasionally omitted from responses (returning N/A) due to Nginx URL rewriting.
next and previous cursor URLs in all paginated API responses.
/api/api/...) due to upstream routing strictness. These URLs now correctly resolve to the root resource (https://api.financialreports.eu/filings/...).Configuration or ApiClient objects manually. A single FinancialReports(api_key="...") class now handles everything.client.filings.list()) are now standard, replacing the verbose generated names (e.g., filings_api.filings_list()).async/await syntax with proper context manager (async with ...) support for high-performance concurrent requests.X-RateLimit-Monthly-Limit, X-RateLimit-Monthly-Remaining, X-RateLimit-Burst-Limit) to help clients monitor their consumption in real-time./filings/ and /companies/ endpoints, replacing expensive full-table scans with efficient index-only scans where possible.count field in paginated responses is now capped at 10,000 for broad, unfiltered queries.next link, but total record counts for massive result sets are now instantaneous estimates rather than expensive precise counts.GET /filings/ endpoint would timeout (504 Gateway Timeout) when filtering by broad historical ranges or complex criteria. These queries now execute in under 500ms.GET /filings/ and GET /filings/{id}/ endpoints now expose two new high-value fields:
file_extension (e.g., "PDF", "HTML")file_size (in bytes)GET /filings/ endpoint has been upgraded with precision filtering capabilities for institutional workflows:
extensions parameter accepts single or comma-separated values (e.g., ?extensions=PDF,XBRL) to filter results by file type (case-insensitive).file_size_min and file_size_max parameters allow users to filter out empty placeholders or cap downloads based on file size (e.g., ?file_size_min=1024).GET /filings/ endpoint now exposes a processing_status field for every item in the list.
COMPLETED) versus those that are still PENDING or FAILED, eliminating the need to query individual detail endpoints to check for availability.track_all_companies configuration for webhook subscriptions.
filing.processed events for every company in the database, bypassing the need to add companies to a personal watchlist.POST /webhooks/ and PUT /webhooks/{id}/ now accept a track_all_companies boolean parameter to enable this mode./webhooks/) now includes distinct visual badges to differentiate between standard "Watchlist" alerts and "Global Firehose" subscriptions, providing immediate clarity on the notification scope.country_code field is now strictly mandatory. The API schema has been updated from string | null to string, guaranteeing a valid ISO 3166-1 alpha-2 code for every active company profile.GET /filing-categories/ endpoint.
GET /filing-types/ endpoint has been significantly enhanced to support the new classification structure.
category object (containing id, name, and sort_order). This is an additive, backwards-compatible change that provides immediate context without requiring additional API calls.category query parameter (e.g., ?category=1) to filter publication types by their broader disclosure category.search query parameter (e.g., ?search=Annual) to perform case-insensitive searches against filing type codes and names.markdown_url and document fields could generate incorrect paths when accessed via specific proxy configurations. These fields now strictly enforce absolute URLs (e.g., https://api.financialreports.eu/...), ensuring consistent reachability regardless of the client's network route.text/markdown) instead of a JSON-wrapped string.
Content-Disposition header to the response to support proper file naming (e.g., filing_12345.md) when saving the output.GET /filings/ endpoint now supports a new types query parameter.
?types=10-K,10-Q,10-Q).GET /webhooks/: List all configured webhooks.POST /webhooks/: Create a new webhook subscription.GET /webhooks/{id}/: Retrieve a specific webhook.PUT /webhooks/{id}/: Update a specific webhook.PATCH /webhooks/{id}/: Partially update a specific webhook.DELETE /webhooks/{id}/: Delete a webhook.POST /webhooks/{id}/regenerate-secret/: Invalidates the old secret and generates a new one for verifying payload signatures.POST /webhooks/{id}/test/: Sends a sample filing.processed.test event to the configured URL to help debug and validate the client's endpoint.POST /webhooks/ endpoint now enforces strict validation for the url field, including requiring HTTPS and performing DNS resolution to prevent SSRF (Server-Side Request Forgery) attacks against internal or reserved IP addresses.filing.processed event. This provides a clear data contract for the payload that will be sent to a user's endpoint, detailing the company and filing objects.type: ["string", "null"]) rather than the legacy nullable: true flag. This provides a more precise contract for data consumers.GET /filings/ endpoint now supports a new sources query parameter.?sources=38,40,51), allowing clients to efficiently query for filings from multiple sources in a single API call.GET /filings/ and GET /companies/ endpoints now support sorting by id (e.g., ?ordering=id or ?ordering=-id). This provides a consistent, incrementing key for more reliable pagination.ordering and source parameters on these endpoints has been updated to be more explicit and descriptive.id field.source, language, and filing_type objects returned by all endpoints (e.g., GET /filings/, GET /sources/) will now include their id.source object in a filing response will now appear as {"id": 38, "name": "Unternehmensregister", ...}.GET /sources/{id}/).on_watchlist query parameter to both the GET /filings/ and GET /companies/ list endpoints.?on_watchlist=true: Returns only items from companies on the user's watchlist.?on_watchlist=false: Returns only items from companies not on the user's watchlist.GET /companies/{id}/ and GET /companies/?view=full, has been updated to include additional data fields.description, description_last_updated, logoaddress, city, zip_codelocal_company_idshares_outstandingdesignated_sponsor, listed_stock_exchange, stock_indextagline field has been added to the Company object. This short, one-liner description is now available in both the summary and full views for the GET /companies/ and GET /companies/{id}/ endpoints, as well as in the nested company data within filing responses.GET /filings/ endpoint now supports a view=full query parameter. This allows clients to retrieve the complete filing object for each item in the list, providing more detail in a single request.updated_date_from and updated_date_to query parameters are now correctly implemented and documented for the GET /filings/ endpoint. This resolves a discrepancy from the 2025-08-12 changelog and enables proper data synchronization based on the last modified date.GET /companies/ endpoint now supports a view=full query parameter. This allows users to retrieve the complete company object for each item in the list, restoring access to detailed fields in response to user feedback.isins field on the Company object was not appearing in the API documentation for the /companies list and detail endpoints. This has been corrected, and the schema now accurately reflects that isins is an array of strings./filings/ and /companies/ now return a simplified "summary" response. This significantly reduces payload size and improves response times for list-based queries. The full object details remain available via the detail endpoints (e.g., /filings/{id}/).markdown_url field in the /filings/{id}/ response now links directly to a nested endpoint (/filings/{filing_id}/markdown/), logically connecting the content to its parent filing.GET /countries/: Returns a list of all supported countries and their ISO codes.GET /languages/: Returns a list of all supported filing languages.GET /filings/ endpoint to allow filtering by modification date, useful for data synchronization:
updated_date_fromupdated_date_toGET /processed-filings/{id}/ endpoint has been removed in favor of the new nested markdown content endpoint for better API design and performance.