List Company Publications
List Company Publications
Lists Bundesanzeiger filings (Jahresabschluss, Konzernabschluss, Hauptversammlung, etc.) attached to a German Handelsregister company id. Each entry carries an opaque publication_id that you pass to get_publication to fetch parsed financials.
A mirror cache is checked first: any rows already stored for the (company_id, source) pair within the last 365 days are returned immediately without contacting the upstream registry. Otherwise the company name is resolved from the local mirror and the Bundesanzeiger search list is scraped live — each parsed publication is upserted into the mirror.
Try it
Pricing
Endpoint
DE-{REGISTER_TYPE}-{COURT_CODE}-{REGISTER_NUMBER}
Call get_company first to populate the mirror — list_company_publications reads the canonical company name from the mirror to drive the Bundesanzeiger search.
Examples
Synchronous request
curl -X POST https://api.skael.de/api/enrichments/list_company_publications \
-H "Authorization: Bearer eak_..." \
-H "Content-Type: application/json" \
-d '{"company_id": "DE-HRB-F1103-267645"}'
Async with polling
# Step 1: queue the enrichment
curl -X POST https://api.skael.de/api/enrichments/list_company_publications \
-H "Authorization: Bearer eak_..." \
-d '{"company_id": "DE-HRB-F1103-267645", "async": true}'
# → 202 {"id": 12345, "status": "queued"}
# Step 2: long-poll for completion
curl "https://api.skael.de/api/enrichments/12345?wait=true&wait_time=50" \
-H "Authorization: Bearer eak_..."
Async with webhook callback
curl -X POST https://api.skael.de/api/enrichments/list_company_publications \
-H "Authorization: Bearer eak_..." \
-d '{
"company_id": "DE-HRB-F1103-267645",
"async": true,
"callback_url": "https://yourapp.com/webhook"
}'
Output Fields
Mirror Cache Behavior
The _registry_meta object describes the freshness of the returned list:
| Field |
Description |
source |
Provider used to fetch the publications (currently always bundesanzeiger) |
cache_hit |
true if the list was served from the mirror within the 365-day TTL |
scrape_duration_ms |
Wall-clock duration of the live scrape (0 on cache hit) |
proxy_used |
Hostname of the residential proxy used for the live scrape (null on cache hit) |
Error Responses
Validation Error (422)
{
"message": "The company id format is invalid.",
"errors": {
"company_id": ["The company id format is invalid."]
}
}
Company Not in Mirror (422)
When the company id has not yet been fetched via get_company:
{
"id": 123,
"type": "list_company_publications",
"status": "failed",
"error_message": "Company DE-HRB-F1103-999999 not found in mirror — call get_company first to populate it."
}
Typical Response Times
- Mirror cache hit: under 100 ms
- Live scrape (typical): 3-10 seconds
- Live scrape (worst case): up to 60 seconds
The first request for a given company id always pays the live-scrape cost. Subsequent requests within 365 days are served from the mirror.