@firmenakte/api-client 2.11.9 → 2.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +27 -0
  2. package/client.d.ts +1215 -1099
  3. package/client.d.ts.map +1 -1
  4. package/client.js +237 -230
  5. package/index.d.ts +77 -79
  6. package/index.d.ts.map +1 -1
  7. package/keyfigure-labels.d.ts +10 -6
  8. package/keyfigure-labels.d.ts.map +1 -1
  9. package/keyfigure-labels.js +10 -6
  10. package/package.json +13 -2
  11. package/v2/generated/client/client.gen.d.ts +3 -0
  12. package/v2/generated/client/client.gen.d.ts.map +1 -0
  13. package/v2/generated/client/client.gen.js +220 -0
  14. package/v2/generated/client/index.d.ts +11 -0
  15. package/v2/generated/client/index.d.ts.map +1 -0
  16. package/v2/generated/client/index.js +17 -0
  17. package/v2/generated/client/types.gen.d.ts +121 -0
  18. package/v2/generated/client/types.gen.d.ts.map +1 -0
  19. package/v2/generated/client/types.gen.js +3 -0
  20. package/v2/generated/client/utils.gen.d.ts +38 -0
  21. package/v2/generated/client/utils.gen.d.ts.map +1 -0
  22. package/v2/generated/client/utils.gen.js +241 -0
  23. package/v2/generated/client.gen.d.ts +13 -0
  24. package/v2/generated/client.gen.d.ts.map +1 -0
  25. package/v2/generated/client.gen.js +6 -0
  26. package/v2/generated/core/auth.gen.d.ts +26 -0
  27. package/v2/generated/core/auth.gen.d.ts.map +1 -0
  28. package/v2/generated/core/auth.gen.js +18 -0
  29. package/v2/generated/core/bodySerializer.gen.d.ts +26 -0
  30. package/v2/generated/core/bodySerializer.gen.d.ts.map +1 -0
  31. package/v2/generated/core/bodySerializer.gen.js +60 -0
  32. package/v2/generated/core/params.gen.d.ts +44 -0
  33. package/v2/generated/core/params.gen.d.ts.map +1 -0
  34. package/v2/generated/core/params.gen.js +112 -0
  35. package/v2/generated/core/pathSerializer.gen.d.ts +34 -0
  36. package/v2/generated/core/pathSerializer.gen.d.ts.map +1 -0
  37. package/v2/generated/core/pathSerializer.gen.js +115 -0
  38. package/v2/generated/core/queryKeySerializer.gen.d.ts +19 -0
  39. package/v2/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
  40. package/v2/generated/core/queryKeySerializer.gen.js +98 -0
  41. package/v2/generated/core/serverSentEvents.gen.d.ts +72 -0
  42. package/v2/generated/core/serverSentEvents.gen.d.ts.map +1 -0
  43. package/v2/generated/core/serverSentEvents.gen.js +135 -0
  44. package/v2/generated/core/types.gen.d.ts +84 -0
  45. package/v2/generated/core/types.gen.d.ts.map +1 -0
  46. package/v2/generated/core/types.gen.js +3 -0
  47. package/v2/generated/core/utils.gen.d.ts +20 -0
  48. package/v2/generated/core/utils.gen.d.ts.map +1 -0
  49. package/v2/generated/core/utils.gen.js +93 -0
  50. package/v2/generated/index.d.ts +3 -0
  51. package/v2/generated/index.d.ts.map +1 -0
  52. package/v2/generated/index.js +6 -0
  53. package/v2/generated/sdk.gen.d.ts +674 -0
  54. package/v2/generated/sdk.gen.d.ts.map +1 -0
  55. package/v2/generated/sdk.gen.js +1433 -0
  56. package/v2/generated/types.gen.d.ts +9439 -0
  57. package/v2/generated/types.gen.d.ts.map +1 -0
  58. package/v2/generated/types.gen.js +3 -0
  59. package/v2/index.d.ts +46 -0
  60. package/v2/index.d.ts.map +1 -0
  61. package/v2/index.js +80 -0
package/client.d.ts CHANGED
@@ -1,3 +1,9 @@
1
+ /** The standard Passiva position a WeitererPassivposten follows in the filing. */
2
+ export declare enum PassivpostenNach {
3
+ Eigenkapital = "eigenkapital",
4
+ Rueckstellungen = "rueckstellungen",
5
+ Verbindlichkeiten = "verbindlichkeiten"
6
+ }
1
7
  /** Conservative Firmenbuch evidence state: open, closed, absent, uncertain or conflicting. Conflicting means a known court closure and an active administrator role coexist. Absent means no classified court event and no active role, not certified solvency. */
2
8
  export declare enum InsolvencyEvidenceStatus {
3
9
  Absent = "absent",
@@ -73,6 +79,9 @@ export interface AggregatedChangesResponse {
73
79
  export interface AssignmentFunctionItemResponse {
74
80
  code?: string;
75
81
  text?: string;
82
+ label?: string | null;
83
+ roleLabel?: string | null;
84
+ roleLabelPlural?: string | null;
76
85
  }
77
86
  export interface Bilanz {
78
87
  documentKey?: string;
@@ -134,6 +143,10 @@ export interface Bilanz {
134
143
  kurzfristigeForderungen?: number | null;
135
144
  /** @format double */
136
145
  passiveRechnungsabgrenzungen?: number | null;
146
+ /** @format double */
147
+ investitionszuschuesse?: number | null;
148
+ /** The remaining Passiva positions in filing order, stored as jsonb. Null for a filing read before these positions were; an empty list when the filing has none. */
149
+ weiterePassivposten?: WeitererPassivposten[] | null;
137
150
  }
138
151
  /** The balance-sheet (Bilanz) positions of one filed Jahresabschluss, in EUR. Every figure is nullable and null means the position was not reported in that filing — abridged accounts leave most of them out — never that it is zero. The filing the figures belong to is the documentDate of the enclosing parsedJahresabschluss. */
139
152
  export interface BilanzDto {
@@ -175,6 +188,13 @@ export interface BilanzDto {
175
188
  bilanzgewinn?: number | null;
176
189
  /** @format double */
177
190
  vortrag?: number | null;
191
+ /**
192
+ * Investitionszuschüsse, listed on the Passivseite after the Eigenkapital.
193
+ * @format double
194
+ */
195
+ investitionszuschuesse?: number | null;
196
+ /** The Passiva positions no other field carries — unversteuerte Rücklagen, an atypisch stille Beteiligung, Substanzgenussrechte, a freely named position — in filing order, each with its label, its amount and the standard position it follows. Empty when the filing has none; null when the filing was read before these positions were. */
197
+ weiterePassivposten?: WeitererPassivpostenDto[] | null;
178
198
  /** @format double */
179
199
  rueckstellungen?: number | null;
180
200
  /** @format double */
@@ -219,6 +239,7 @@ export interface BusinessAssignment {
219
239
  fnr?: string;
220
240
  vnr?: string;
221
241
  pnr?: string;
242
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
222
243
  personId?: string;
223
244
  functionCode?: string;
224
245
  functionText?: string | null;
@@ -239,12 +260,22 @@ export interface BusinessAssignmentDetailResponse {
239
260
  fnr?: string;
240
261
  vnr?: string;
241
262
  pnr?: string;
263
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
242
264
  personId?: string;
243
265
  functionCode?: string | null;
244
266
  /** @format double */
245
267
  capitalAmount?: number | null;
246
268
  currency?: string | null;
247
269
  person?: PersonResponse | null;
270
+ /** Firmenbuchnummer of the holder when the holder is itself a company, e.g. the GmbH of a GmbH & Co KG — the fnr GET /businesses/{fnr} takes. Absent for a natural person. */
271
+ personFnr?: string | null;
272
+ /** Function status on the Vienna day: current, ended, upcoming or superseded by a newer register version. Open enum. Absent inside historical filings. */
273
+ status?: string | null;
274
+ /**
275
+ * Date the Firmenbuch first entered this holder in this function: the execution date of the earliest stored Eintragung (vnr) among the holder's rows for the function at this company. Absent when no such Eintragung is stored, and inside historical filings.
276
+ * @format date
277
+ */
278
+ since?: string | null;
248
279
  }
249
280
  /** One Firmenbuch change: a new legal record (Eintragung) was filed for a company. */
250
281
  export interface BusinessChange {
@@ -267,6 +298,7 @@ export interface BusinessChange {
267
298
  }
268
299
  /** The complete Firmenakte of one company: Firmenbuch master data, addresses, officers, GISA licences, Ediktsdatei notices, filed documents and the parsed annual accounts. */
269
300
  export interface BusinessDetailResponse {
301
+ ownerships?: OwnershipDto[];
270
302
  /** Firmenbuchnummer in normalised form: lower case, no spaces, no leading zeros and no "FN" prefix, e.g. "34853f". */
271
303
  fnr?: string;
272
304
  /** European Unique Identifier — the EU-wide id for a company registered in a member state's business register. Null when the Firmenbuch extract carries none. */
@@ -277,7 +309,7 @@ export interface BusinessDetailResponse {
277
309
  websites?: BusinessWebsiteDto[];
278
310
  /** Current company name as registered in the Firmenbuch, including the legal-form suffix. */
279
311
  name?: string;
280
- /** Business purpose (Geschäftszweig) as filed with the Firmenbuch, free text. Null when none is on file. */
312
+ /** Business purpose (Unternehmensgegenstand) as filed with the Firmenbuch, free text. Null when none is on file. */
281
313
  purpose?: string | null;
282
314
  /** A company's legal form (Rechtsform), as the Firmenbuch's code and its German label. Filter by it with legalFormCode on /businesses; the full catalogue is GET /legalforms. */
283
315
  legalForm?: LegalForm | null;
@@ -331,7 +363,7 @@ export interface BusinessDetailResponse {
331
363
  rechtstatsachen?: BusinessRechtstatsacheDto[];
332
364
  /** The five most recent Jahresabschluss PDFs filed for the company. Download one with GET /documents/download/{documentKey}. */
333
365
  documents?: DocumentMetadata[];
334
- /** Parsed Jahresabschluesse, at most one per calendar year for the last five filing years, newest first. Each carries the documentDate of the filing it was read from. */
366
+ /** Parsed Jahresabschluesse for the last five fiscal closing dates, newest first. XML is preferred within the same period. Each carries its documentDate. */
335
367
  parsedJahresabschluesse?: ParsedJahresabschlussDto[];
336
368
  /** Balance-sheet and P&L figures read from the company's most recent filed Jahresabschluss — the ones keyFigureFilters, orderBy and the map dot size all read. They come from one filing, the one named by documentKey and dated documentDate, so two companies here are only comparable if their documentDate is comparable. Every figure is nullable and null means the same thing throughout: that position was not reported in that filing (small companies file abridged accounts). Null is never a zero, and never "the company has none" — do not sum or average it as 0. Amounts are EUR; employees is a headcount. GET /businesses/{fnr}/jahresabschluesse returns the full per-year history; the detail response carries the latest five years. */
337
369
  latestKeyFigures?: BusinessLatestKeyFiguresDto | null;
@@ -368,6 +400,8 @@ export interface BusinessExportColumns {
368
400
  none?: boolean;
369
401
  }
370
402
  export interface BusinessFacetGroup {
403
+ /** Counting exceeded the request budget. Values are empty; existing chips remain usable. */
404
+ timedOut?: boolean;
371
405
  /** The group name, echoed back. */
372
406
  group?: string;
373
407
  /** The largest top values of the group, largest count first, followed by any currently selected value that did not make that cut — so a chip the caller filters on is always there, with count 0 when nothing in the rest of the filter set carries it. */
@@ -672,13 +706,13 @@ export interface CityResponse {
672
706
  }
673
707
  /** The Firmenbuch court (Sitzgericht) a company is registered at. Filter by it with courtCode on /businesses; the full catalogue is GET /courts. */
674
708
  export interface Court {
675
- /** Court code, e.g. "90001". The value courtCode takes. */
709
+ /** Three-digit court code from VOLLZ/HG, e.g. "007" for Handelsgericht Wien. */
676
710
  code?: string;
677
711
  /** @format date-time */
678
712
  createdAt?: string;
679
713
  /** @format date-time */
680
714
  updatedAt?: string;
681
- /** German name of the court, e.g. "Wien". */
715
+ /** German name of the court, e.g. "Handelsgericht Wien". */
682
716
  text: string;
683
717
  }
684
718
  export interface CourtCatalogItemResponse {
@@ -729,6 +763,8 @@ export interface Edikt {
729
763
  updatedAt?: string;
730
764
  /** @format int32 */
731
765
  ediktArt?: number;
766
+ /** The German name of the Ediktart, e.g. "Offenkundige Zahlungsunfähigkeit". Filled on the company and person dossiers; null elsewhere and for an Art without a name. */
767
+ artLabel?: string | null;
732
768
  displayName?: string | null;
733
769
  hinweis?: string | null;
734
770
  ergaenzung?: string | null;
@@ -746,6 +782,7 @@ export interface Edikt {
746
782
  caseDepartment?: string | null;
747
783
  /** @format int32 */
748
784
  caseYear?: number | null;
785
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. Null where no person is named. */
749
786
  personId?: string | null;
750
787
  fnr?: string | null;
751
788
  courtCode?: string | null;
@@ -883,7 +920,16 @@ export interface FoerderungenSummaryDto {
883
920
  */
884
921
  stichtag?: string | null;
885
922
  }
886
- /** One row of the Gemeinde catalogue — see AustrianGemeinden for where it comes from. */
923
+ /** A Gemeindebezirk: Wien's "Innere Stadt" under 1010. */
924
+ export interface GemeindeDistrictResponse {
925
+ /** The Gemeindecode of STATISTIK AUSTRIA: 90101 for Wien's first Bezirk. */
926
+ code?: string;
927
+ /** The Bezirk's name: "Innere Stadt". */
928
+ name?: string;
929
+ /** The PLZ the Bezirk is addressed by. */
930
+ zipCode?: string;
931
+ }
932
+ /** One row of the Gemeinde catalogue, the Statistik Austria Gemeindeliste the database holds. */
887
933
  export interface GemeindeResponse {
888
934
  /** The Gemeinde's path segment, unique across the catalogue: "klagenfurt-am-woerthersee". */
889
935
  slug?: string;
@@ -891,12 +937,16 @@ export interface GemeindeResponse {
891
937
  name?: string;
892
938
  /** Bundesland, the same nine names the state filter on GET /businesses takes. */
893
939
  state?: string;
940
+ /** The Bundesland's path segment: "kaernten", "niederoesterreich". */
941
+ stateSlug?: string;
894
942
  /** The Gemeindekennziffer of STATISTIK AUSTRIA, five digits. */
895
943
  kennziffer?: string;
896
944
  /** The PLZ that resolve to this Gemeinde, the Gemeindeamt's first. Fold a zipCode bucket of GET /businesses/aggregate through these to count companies per Gemeinde without a second query. */
897
945
  zipCodes?: string[];
898
946
  /** Slugs that name this Gemeinde without being its canonical one — "klagenfurt", "sankt-poelten". A Gemeinde page redirects these to Slug; no alias is shared by two Gemeinden. */
899
947
  aliases?: string[];
948
+ /** The Gemeinde's Bezirke, each addressed by one PLZ; Wien's 23, empty for every other Gemeinde. */
949
+ districts?: GemeindeDistrictResponse[];
900
950
  }
901
951
  export interface GisaChange {
902
952
  /** @format int64 */
@@ -925,6 +975,7 @@ export interface GisaLicense {
925
975
  isActive?: boolean | null;
926
976
  /** @format int32 */
927
977
  addressId?: number | null;
978
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. Null where no person is named. */
928
979
  personId?: string | null;
929
980
  }
930
981
  export interface GisaLicenseItemDto {
@@ -967,28 +1018,32 @@ export interface GlobalChange {
967
1018
  updatedAt?: string;
968
1019
  }
969
1020
  export interface GraphEdgeDto {
1021
+ /** Evidence sources for the ownership component, without duplicating functions. */
1022
+ ownershipSources?: string[];
1023
+ ownershipUncertainty?: string | null;
970
1024
  source?: string;
971
1025
  target?: string;
972
- /** Whether the connection still holds today. An "assignment" edge is active while at least one of the person's functions at that company has no end date or ends in the future; a function that ended in the past makes it false. The other two kinds are always true, for two different reasons: an "ownership" edge whose holding has ended is not drawn at all, and an "address" carries no validity date, so a shared address cannot be dated. */
1026
+ /** Whether the connection still holds on today's Vienna calendar day (Europe/Vienna). For an "assignment" edge, the newest register row of each function decides: the numerically highest Vnr, then the lowest Pnr as text. The edge is active if at least one function has not ended before that day; an absent end date, an end date today and a future start all count as running. The other two kinds are always true, for two different reasons: an "ownership" edge whose holding has ended is not drawn at all, and an "address" carries no validity date, so a shared address cannot be dated. */
973
1027
  isActive?: boolean;
974
1028
  /** "assignment" (a person holds a function in a company), "ownership" (a company holds shares in another — source is the shareholder, target the company it holds) or "address". */
975
1029
  relationshipType?: string;
976
1030
  /** The function codes the person holds at the company, current ones first — GF, PR, GS, AR … as in the Assignment function catalog. Empty on any edge but "assignment". */
977
1031
  functionCodes?: string[];
978
1032
  /**
979
- * The shareholder's übernommene Stammeinlage. Null on any edge but "ownership", and on an ownership edge whose Firmenbuch entry carries no KAPITAL.
1033
+ * The shareholder's übernommene Stammeinlage, on corporate ownership edges and the GS component of natural-person assignment edges. Null when unsupported.
980
1034
  * @format double
981
1035
  */
982
1036
  capitalAmount?: number | null;
983
1037
  /** The currency of CapitalAmount — ATS occurs in this data, not only EUR. */
984
1038
  currency?: string | null;
985
1039
  /**
986
- * The stake as a percentage, 0–100. Only where it is a real ownership share: a GmbH or Flexible Kapitalgesellschaft whose Gesellschafter all carry an amount in the same currency and the same Firmenbuch version. Null everywhere else, including on every non-ownership edge.
1040
+ * The stake as a percentage, 0–100. Only where it is a real ownership share: a GmbH or Flexible Kapitalgesellschaft whose Gesellschafter all carry an amount in the same currency and the same Firmenbuch version, or a coherent EVI state. Also applies to the GS component of natural-person assignment edges. Null when unsupported; never a paid-in ratio.
987
1041
  * @format double
988
1042
  */
989
1043
  sharePercent?: number | null;
990
1044
  }
991
1045
  export interface GraphNodeDto {
1046
+ /** A company's fnr, or a person's Firmenakte-ID ("P-7K3M-QX91"). */
992
1047
  id?: string;
993
1048
  type?: string;
994
1049
  label?: string;
@@ -1110,6 +1165,10 @@ export interface LegalRecordChangeDto {
1110
1165
  type?: string;
1111
1166
  /** Payload; shape depends on Type (string, LegalForm, Court, Address, or list of assignments). */
1112
1167
  value?: any;
1168
+ /** What changed, as the company history labels it, e.g. "Rechtsform". */
1169
+ label?: string | null;
1170
+ /** The change as the heading of its history entry, e.g. "Änderung der Rechtsform". */
1171
+ title?: string | null;
1113
1172
  }
1114
1173
  export interface LegalRecordDetailDto {
1115
1174
  fnr?: string;
@@ -1164,6 +1223,40 @@ export interface OenaceDto {
1164
1223
  code?: string | null;
1165
1224
  numericCode?: string | null;
1166
1225
  }
1226
+ export interface OwnershipDto {
1227
+ fnr?: string;
1228
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. Null where no person is named. */
1229
+ personId?: string | null;
1230
+ holderFnr?: string | null;
1231
+ displayName?: string | null;
1232
+ functionCode?: string;
1233
+ /** @format double */
1234
+ subscribedContribution?: number | null;
1235
+ /** @format double */
1236
+ paidInContribution?: number | null;
1237
+ currency?: string | null;
1238
+ /** @format double */
1239
+ sharePercent?: number | null;
1240
+ sources?: string[];
1241
+ sourceUrls?: string[];
1242
+ evidence?: OwnershipEvidenceDto[];
1243
+ uncertainty?: string | null;
1244
+ }
1245
+ /** A current holding, not a synthetic Firmenbuch assignment or history entry. */
1246
+ export interface OwnershipEvidenceDto {
1247
+ source?: string;
1248
+ sourceUrl?: string | null;
1249
+ version?: string | null;
1250
+ /** @format date */
1251
+ effectiveDate?: string | null;
1252
+ /** @format date-time */
1253
+ observedAt?: string | null;
1254
+ /** @format double */
1255
+ subscribedContribution?: number | null;
1256
+ /** @format double */
1257
+ paidInContribution?: number | null;
1258
+ currency?: string | null;
1259
+ }
1167
1260
  /** One page of a list endpoint's result, plus the counters needed to fetch the rest. */
1168
1261
  export interface PagedResponseOfAddressLocationResponse {
1169
1262
  /** The rows on this page. Empty when the page is past the end, or when countOnly was requested. */
@@ -1595,6 +1688,7 @@ export interface ParsedJahresabschlussDto {
1595
1688
  guv?: GuvDto | null;
1596
1689
  }
1597
1690
  export interface Person {
1691
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91", in every public answer — the id GET /people/{personId} takes. */
1598
1692
  id?: string;
1599
1693
  /** @format date-time */
1600
1694
  createdAt?: string;
@@ -1604,7 +1698,6 @@ export interface Person {
1604
1698
  firstName?: string | null;
1605
1699
  /** @maxLength 200 */
1606
1700
  lastName?: string | null;
1607
- birthDate?: string | null;
1608
1701
  titlePrefix?: string | null;
1609
1702
  titleSuffix?: string | null;
1610
1703
  assignments?: BusinessAssignment[];
@@ -1616,19 +1709,23 @@ export interface PersonAssignmentItemDto {
1616
1709
  fnr?: string;
1617
1710
  vnr?: string;
1618
1711
  pnr?: string;
1712
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1619
1713
  personId?: string;
1620
1714
  functionCode?: string;
1621
1715
  /** @format double */
1622
1716
  capitalAmount?: number | null;
1623
1717
  currency?: string | null;
1718
+ /** Function status on the Vienna day: current, ended, upcoming or superseded by a newer register version. Open enum. */
1719
+ status?: string | null;
1624
1720
  business?: BusinessSummaryDto | null;
1625
1721
  businessEdikte?: Edikt[];
1626
1722
  }
1627
1723
  export interface PersonDetailResponse {
1724
+ ownerships?: OwnershipDto[];
1725
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1628
1726
  id?: string;
1629
1727
  firstName?: string | null;
1630
1728
  lastName?: string | null;
1631
- birthDate?: string | null;
1632
1729
  titlePrefix?: string | null;
1633
1730
  titleSuffix?: string | null;
1634
1731
  assignments?: PersonAssignmentItemDto[];
@@ -1636,14 +1733,15 @@ export interface PersonDetailResponse {
1636
1733
  edikte?: any[];
1637
1734
  }
1638
1735
  export interface PersonNameItem {
1736
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1639
1737
  id?: string;
1640
1738
  name?: string;
1641
1739
  }
1642
1740
  export interface PersonResponse {
1741
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1643
1742
  id?: string;
1644
1743
  firstName?: string | null;
1645
1744
  lastName?: string | null;
1646
- birthDate?: string | null;
1647
1745
  titlePrefix?: string | null;
1648
1746
  titleSuffix?: string | null;
1649
1747
  }
@@ -1719,7 +1817,7 @@ export interface ScheinunternehmenKundmachung {
1719
1817
  uid?: string | null;
1720
1818
  /** Firmenbuch number for company entries; null for natural persons. */
1721
1819
  fnr?: string | null;
1722
- /** Person ID for natural-person entries; null for companies. */
1820
+ /** The person's Firmenakte-ID ("P-7K3M-QX91") for natural-person entries; null for companies. */
1723
1821
  personId?: string | null;
1724
1822
  displayName?: string | null;
1725
1823
  /** @format date-time */
@@ -1740,6 +1838,7 @@ export interface ScheinunternehmenKundmachungDto {
1740
1838
  guid?: string;
1741
1839
  uid?: string | null;
1742
1840
  fnr?: string | null;
1841
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. Null where no person is named. */
1743
1842
  personId?: string | null;
1744
1843
  displayName?: string | null;
1745
1844
  /** @format date-time */
@@ -1790,6 +1889,30 @@ export interface UpdateListRequest {
1790
1889
  removedFnrs?: string[] | null;
1791
1890
  settings?: JsonDocument | null;
1792
1891
  }
1892
+ /** A Passiva position outside Eigenkapital, Investitionszuschüsse, Rückstellungen, Verbindlichkeiten and passive Rechnungsabgrenzung — unversteuerte Rücklagen, an atypisch stille Beteiligung, Substanzgenussrechte or a freely named position — with the label the filing gives it. */
1893
+ export interface WeitererPassivposten {
1894
+ /** The position's label as filed, or the schema's name for it. */
1895
+ bezeichnung: string;
1896
+ /**
1897
+ * The amount in EUR; a position without an amount or with 0 is not listed.
1898
+ * @format double
1899
+ */
1900
+ betrag: number;
1901
+ /** The standard Passiva position a WeitererPassivposten follows in the filing. */
1902
+ nach: PassivpostenNach;
1903
+ }
1904
+ /** One further Passiva position of a Bilanz. */
1905
+ export interface WeitererPassivpostenDto {
1906
+ /** The position's label as filed, or the schema's name for it. */
1907
+ bezeichnung: string;
1908
+ /**
1909
+ * The amount in EUR, never 0.
1910
+ * @format double
1911
+ */
1912
+ betrag: number;
1913
+ /** The standard Passiva position a WeitererPassivposten follows in the filing. */
1914
+ nach: PassivpostenNach;
1915
+ }
1793
1916
  export interface ZipCodeResponse {
1794
1917
  zipCode?: string;
1795
1918
  /** @format int32 */
@@ -2029,7 +2152,7 @@ export declare namespace Api {
2029
2152
  type ResponseBody = Blob;
2030
2153
  }
2031
2154
  /**
2032
- * @description Returns the global catalog of GISA Trade Definitions with pagination. Ohne API-Key abrufbar und kostet keine Credits.
2155
+ * @description Returns the global catalog of GISA Trade Definitions with pagination. Kostet 1 Credit.
2033
2156
  * @tags Trades
2034
2157
  * @name V1TradesList
2035
2158
  * @summary GISA trade catalog
@@ -2172,20 +2295,55 @@ export declare namespace Api {
2172
2295
  type ResponseBody = PagedResponseOfGisaChange;
2173
2296
  }
2174
2297
  /**
2175
- * @description The autocomplete read: /businesses and /people for one term, ranked together, so a search field costs one request per keystroke rather than two and does not have to merge two orders itself. Each row carries either business or person, whichever type names. Ordered by where the term sits in the name, then by the shorter name, then companies before people. pageSize is per side, so the answer holds up to twice as many rows. An empty search answers an empty list; use /businesses to page through the whole dataset. Ohne API-Key abrufbar und kostet keine Credits.
2176
- * @tags Search
2177
- * @name V1SearchList
2178
- * @summary Companies and people in one ranked list
2179
- * @request GET:/api/v1/search
2298
+ * @description Kostet 1 Credit.
2299
+ * @tags Foerderungen
2300
+ * @name V1FoerderungenChangesDetail
2301
+ * @summary Funding change by id
2302
+ * @request GET:/api/v1/foerderungen/changes/{id}
2180
2303
  * @secure
2181
2304
  */
2182
- namespace V1SearchList {
2305
+ namespace V1FoerderungenChangesDetail {
2306
+ type RequestParams = {
2307
+ /** @format int64 */
2308
+ id: number;
2309
+ };
2310
+ type RequestQuery = {};
2311
+ type RequestBody = never;
2312
+ type RequestHeaders = {};
2313
+ type ResponseBody = FoerderungChange;
2314
+ }
2315
+ /**
2316
+ * @description New payments and amount corrections for matched companies. A source's initial import is excluded. Ordered by ascending id. Poll with sinceId set to the previous watermark, deduplicate by id, and stop on a short page. since is inclusive and filters the recorded date, not the payment year. Both cursors apply together. fnr is normalised as on GET /businesses. totalRecords is capped at 1000 × pageSize; at that cap it means at least that many. Kostet 1 Credit.
2317
+ * @tags Foerderungen
2318
+ * @name V1FoerderungenChangesList
2319
+ * @summary Funding change feed
2320
+ * @request GET:/api/v1/foerderungen/changes
2321
+ * @secure
2322
+ */
2323
+ namespace V1FoerderungenChangesList {
2183
2324
  type RequestParams = {};
2184
2325
  type RequestQuery = {
2185
- /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
2186
- search?: string;
2326
+ /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
2327
+ fnr?: string;
2187
2328
  /**
2188
- * How many rows to take from each side before they are ranked together, so the answer holds at most twice this many; defaults to 10 when omitted.
2329
+ * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
2330
+ * @format date-time
2331
+ */
2332
+ since?: string;
2333
+ /**
2334
+ * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
2335
+ * @format int64
2336
+ */
2337
+ sinceId?: number;
2338
+ /**
2339
+ * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
2340
+ * @format int32
2341
+ * @min 1
2342
+ * @max 1000
2343
+ */
2344
+ page?: number;
2345
+ /**
2346
+ * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2189
2347
  * @format int32
2190
2348
  * @min 1
2191
2349
  * @max 100
@@ -2194,10 +2352,70 @@ export declare namespace Api {
2194
2352
  };
2195
2353
  type RequestBody = never;
2196
2354
  type RequestHeaders = {};
2197
- type ResponseBody = SearchResponse;
2355
+ type ResponseBody = PagedResponseOfFoerderungChange;
2356
+ }
2357
+ /**
2358
+ * @description Returns one Ediktsdatei change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "edikt" answers 404 here. Kostet 1 Credit.
2359
+ * @tags Edikte
2360
+ * @name V1EdikteChangesDetail
2361
+ * @summary Edikt change by id
2362
+ * @request GET:/api/v1/edikte/changes/{id}
2363
+ * @secure
2364
+ */
2365
+ namespace V1EdikteChangesDetail {
2366
+ type RequestParams = {
2367
+ /** @format int64 */
2368
+ id: number;
2369
+ };
2370
+ type RequestQuery = {};
2371
+ type RequestBody = never;
2372
+ type RequestHeaders = {};
2373
+ type ResponseBody = EdiktChange;
2374
+ }
2375
+ /**
2376
+ * @description Feed of Ediktsdatei changes — insolvency and other court notices published about a company or a person. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the publication date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss an insolvency notice resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
2377
+ * @tags Edikte
2378
+ * @name V1EdikteChangesList
2379
+ * @summary Ediktsdatei change feed
2380
+ * @request GET:/api/v1/edikte/changes
2381
+ * @secure
2382
+ */
2383
+ namespace V1EdikteChangesList {
2384
+ type RequestParams = {};
2385
+ type RequestQuery = {
2386
+ /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
2387
+ fnr?: string;
2388
+ /**
2389
+ * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
2390
+ * @format date-time
2391
+ */
2392
+ since?: string;
2393
+ /**
2394
+ * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
2395
+ * @format int64
2396
+ */
2397
+ sinceId?: number;
2398
+ /**
2399
+ * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
2400
+ * @format int32
2401
+ * @min 1
2402
+ * @max 1000
2403
+ */
2404
+ page?: number;
2405
+ /**
2406
+ * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2407
+ * @format int32
2408
+ * @min 1
2409
+ * @max 100
2410
+ */
2411
+ pageSize?: number;
2412
+ };
2413
+ type RequestBody = never;
2414
+ type RequestHeaders = {};
2415
+ type ResponseBody = PagedResponseOfEdiktChange;
2198
2416
  }
2199
2417
  /**
2200
- * @description Returns (id, name) pairs for all people with at least one business assignment. For client-side name index. Kostet 1 Credit.
2418
+ * @description Returns (id, name) pairs for all people with at least one business assignment. For client-side name index. id is the person's Firmenakte-ID, e.g. "P-7K3M-QX91". Kostet 1 Credit.
2201
2419
  * @tags People
2202
2420
  * @name V1PeopleNamesList
2203
2421
  * @summary Person name index
@@ -2212,7 +2430,7 @@ export declare namespace Api {
2212
2430
  type ResponseBody = PersonNameItem[];
2213
2431
  }
2214
2432
  /**
2215
- * @description Lists people who hold a function in, or a GISA licence for, an Austrian company. name and search behave identically here — both split the term on spaces and keep people whose "firstName lastName" contains every token, case-insensitively — except that search wins when both are given. Ordered by last name, then first name unless orderBy says otherwise. Combine with fnr or businessName to get the officers of one company, or with functionCode for one role. fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte all describe one and the same assignment: a person comes back only if a single company of theirs satisfies every one of them. So the youngest owners of this year's new Viennese companies are one page: ?businessCity=Wien&businessRegisteredSince_gte=2026-01-01&functionCode=IN&functionCode=KP&functionCode=GS&functionCode=PG&orderBy=birthDate&orderByDescending=true&pageSize=3 A row's assignments are a sample, not the person's whole collection: at most 25, and only the ones matching the fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte you sent, so ?fnr=34853f gives you that company's row and nothing else. Ask GET /people/{personId} for all of them. Kostet 1 Credit.
2433
+ * @description Lists people who hold a function in, or a GISA licence for, an Austrian company. name and search behave identically here — both split the term on spaces and keep people whose "firstName lastName" contains every token, case-insensitively — except that search wins when both are given. Ordered by last name, then first name. Combine with fnr or businessName to get the officers of one company, or with functionCode for one role. Each row's id is the person's Firmenakte-ID, the id GET /people/{personId} takes. fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte all describe one and the same assignment: a person comes back only if a single company of theirs satisfies every one of them. So the owners of this year's new Viennese companies are one query: ?businessCity=Wien&businessRegisteredSince_gte=2026-01-01&functionCode=IN&functionCode=KP&functionCode=GS&functionCode=PG A row's assignments are a sample, not the person's whole collection: at most 25, and only the ones matching the fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte you sent, so ?fnr=34853f gives you that company's row and nothing else. Ask GET /people/{personId} for all of them. Kostet 1 Credit.
2216
2434
  * @tags People
2217
2435
  * @name V1PeopleList
2218
2436
  * @summary People search
@@ -2240,10 +2458,6 @@ export declare namespace Api {
2240
2458
  fnr?: string;
2241
2459
  /** Only people who have an Edikt of their own — a notice in the Ediktsdatei filed against the person, which the edikte collection on the row carries. An Edikt against one of their companies does not count; that is hasEdikt on /businesses. */
2242
2460
  hasEdikt?: boolean;
2243
- /** Sort key; only "birthDate" is supported. Omitted, people come back by last name, then first name. People whose birth date the register does not give sort last under orderByDescending=true. */
2244
- orderBy?: string;
2245
- /** If true, sort descending; with orderBy=birthDate that is the youngest first. */
2246
- orderByDescending?: boolean;
2247
2461
  /**
2248
2462
  * 1-based page number; defaults to 1 when omitted.
2249
2463
  * @format int32
@@ -2264,7 +2478,7 @@ export declare namespace Api {
2264
2478
  type ResponseBody = PagedResponseOfPerson;
2265
2479
  }
2266
2480
  /**
2267
- * @description Returns one person with every company function, GISA licence and Edikt attached to them. personId is the synthetic id described in the glossary — "firstname-lastname-birthdate", lower case, inner spaces replaced by hyphens and "x" for a part the register does not give, e.g. "max-mustermann-1970-01-01". It is matched exactly. Take it from a list row or from an assignment on a company rather than composing it yourself. An id beginning with "--" carries neither first nor last name, and that is not a person but the bucket every nameless assignment in the register lands in. It answers 404 like any id nobody holds, and it is left out of GET /people for the same reason. Kostet 1 Credit.
2481
+ * @description Returns one person with every company function, GISA licence and Edikt attached to them. personId is the person's Firmenakte-ID as the glossary describes it, e.g. "P-7K3M-QX91", the id every list row, assignment and graph node carries. Take it from there rather than composing it yourself. Only that spelling answers. Any other spelling of the same Firmenakte-ID ("p7k3mqx91"), and the "vorname-nachname-…" id people carried before, answer one 308 whose relative Location is the canonical form. A Firmenakte-ID with a wrong check character, and an id nobody holds, answer 404; so does the bucket every nameless assignment in the register lands in, which is not a person. Kostet 1 Credit.
2268
2482
  * @tags People
2269
2483
  * @name V1PeopleDetail
2270
2484
  * @summary Person detail
@@ -2273,6 +2487,7 @@ export declare namespace Api {
2273
2487
  */
2274
2488
  namespace V1PeopleDetail {
2275
2489
  type RequestParams = {
2490
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91". */
2276
2491
  personId: string;
2277
2492
  };
2278
2493
  type RequestQuery = {};
@@ -2281,474 +2496,66 @@ export declare namespace Api {
2281
2496
  type ResponseBody = PersonDetailResponse;
2282
2497
  }
2283
2498
  /**
2284
- * @description Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first. Ohne API-Key abrufbar und kostet keine Credits.
2285
- * @tags Oenace
2286
- * @name V1OenaceList
2287
- * @summary OeNACE classification catalog
2288
- * @request GET:/api/v1/oenace
2499
+ * @description Resolve company names to FNRs by exact name match (1:1). Used for CSV import. Kostet 1 Credit.
2500
+ * @tags Businesses
2501
+ * @name V1BusinessesResolveNamesCreate
2502
+ * @summary Name to FNR resolution
2503
+ * @request POST:/api/v1/businesses/resolve-names
2289
2504
  * @secure
2290
2505
  */
2291
- namespace V1OenaceList {
2506
+ namespace V1BusinessesResolveNamesCreate {
2292
2507
  type RequestParams = {};
2293
- type RequestQuery = {
2294
- search?: string;
2295
- /**
2296
- * Filter by hierarchy level (1–5). Omit to return all levels.
2297
- * @format int32
2298
- */
2299
- ebene?: number;
2300
- /** @format int32 */
2301
- minCompanyCount?: number;
2302
- /**
2303
- * 1-based page number; defaults to 1 when omitted.
2304
- * @format int32
2305
- * @min 1
2306
- * @max 1000
2307
- */
2308
- page?: number;
2309
- /**
2310
- * Number of items per page; defaults to 10 when omitted.
2311
- * @format int32
2312
- * @min 1
2313
- * @max 100
2314
- */
2315
- pageSize?: number;
2316
- };
2317
- type RequestBody = never;
2508
+ type RequestQuery = {};
2509
+ type RequestBody = ResolveBusinessNamesRequest;
2318
2510
  type RequestHeaders = {};
2319
- type ResponseBody = PagedResponseOfOenaceCatalogItemResponse;
2511
+ type ResponseBody = ResolveBusinessNamesResponse;
2320
2512
  }
2321
2513
  /**
2322
- * @description Returns all legal forms with pagination and optional search, sorted by business count descending. Ohne API-Key abrufbar und kostet keine Credits.
2323
- * @tags LegalForms
2324
- * @name V1LegalformsList
2325
- * @summary Legal form catalog
2326
- * @request GET:/api/v1/legalforms
2514
+ * @description Lists companies matching the filters, one page of list rows per call. name and search are different tools. name is a case-insensitive substring match on the company name and nothing else. search splits the term on spaces and keeps only companies matching every token, where a token matches the name, the fnr, or — when the whole term is a number — a GISA licence key or GISA-Zahl; it additionally lifts companies whose name starts with the term to the top of the default (name) ordering. So name narrows a known name, search finds an unknown one. Inactive companies always sort after active ones, whatever orderBy says. inInsolvency is a Firmenbuch evidence filter, not an Ediktsdatei or Insolvenzdatei one. True matches a classified open court record or an active administrator role (MW, IW, AW, VW). False includes closed evidence without an active role, missing evidence and unclassified or uncertain evidence without another opening or role. Omit the parameter to leave this state unfiltered. A false value means no current positive evidence in this dataset, not verified legal assurance that no proceeding exists. The proceedings are published in the Insolvenzdatei, which this API does not read. Examples: ?inInsolvency=true; ?inInsolvency=false&name=Graf; ?inInsolvency=true&countOnly=true. The same values combine with every other filter. Pass countOnly=true for totalRecords without the rows, and use /businesses/aggregate to group the same filter set instead of paging through it. Place filters: the Firmenbuch records no Bundesland and no Gemeinde, only the Sitzgericht, so both state and gemeinde are derived from the PLZ of the Geschäftsanschrift: the PLZ names a Gemeinde, and state is that Gemeinde's Land, so the Innviertel PLZ 5120–5399 are in Oberösterreich. gemeinde takes the slug of a Gemeinde, and because it reads the PLZ it answers every spelling of a place at once — "Klagenfurt am Wörthersee", "Klagenfurt" and "Klagenfurt-Viktring" are one Gemeinde, where city= would be three separate filters over free text. GET /addresses/gemeinden is the catalogue of the slugs, their aliases, their Bundesland and their PLZ; a company with a foreign or unusable PLZ is in no Gemeinde and no gemeinde= filter finds it. Kostet 1 Credit.
2515
+ * @tags Businesses
2516
+ * @name V1BusinessesList
2517
+ * @summary Company search
2518
+ * @request GET:/api/v1/businesses
2327
2519
  * @secure
2328
2520
  */
2329
- namespace V1LegalformsList {
2521
+ namespace V1BusinessesList {
2330
2522
  type RequestParams = {};
2331
2523
  type RequestQuery = {
2332
- /** @maxLength 200 */
2524
+ fnr?: string[];
2525
+ name?: string;
2333
2526
  search?: string;
2527
+ city?: string[];
2528
+ courtCode?: string[];
2529
+ legalFormCode?: string[];
2530
+ zipCode?: string[];
2531
+ /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. Derived from the PLZ of the Geschäftsanschrift; see this endpoint's description. An unknown name is a 400. */
2532
+ state?: string[];
2533
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
2534
+ gemeinde?: string[];
2535
+ hasEdikt?: boolean;
2536
+ active?: boolean;
2537
+ /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
2538
+ isScheinunternehmen?: boolean;
2539
+ gisaLicenseKey?: number[];
2540
+ /** Filter by OeNACE code (OenaceZuord / NumericCode), e.g. ["46649"]. */
2541
+ oenaceCode?: string[];
2334
2542
  /**
2335
- * 1-based page number; defaults to 1 when omitted.
2543
+ * Lower bound (inclusive) for the Firmenbuch registration date ("Eingetragen seit"), the earliest executionDate over the company's legal records. The Firmenbuch was digitised in 1991/92, so no value predates that however old the company actually is — it is not a founding date.
2544
+ * @format date-time
2545
+ */
2546
+ registeredSince_gte?: string;
2547
+ /**
2548
+ * Upper bound (inclusive) for the Firmenbuch registration date ("Eingetragen seit"), the earliest executionDate over the company's legal records. The Firmenbuch was digitised in 1991/92, so no value predates that however old the company actually is — it is not a founding date.
2549
+ * @format date-time
2550
+ */
2551
+ registeredSince_lte?: string;
2552
+ /**
2553
+ * Lower bound (inclusive) for the number of distinct people with signing authority, counting the representation functions GF, GD, GL, HB, IN, IV, KP, PR, SV, VM, VO and excluding the insolvency and liquidation ones (AB, AW, IW, MW, VW, ZW). Currently held functions only.
2336
2554
  * @format int32
2337
- * @min 1
2338
- * @max 1000
2339
2555
  */
2340
- page?: number;
2556
+ signerCount_gte?: number;
2341
2557
  /**
2342
- * Number of items per page; defaults to 10 when omitted.
2343
- * @format int32
2344
- * @min 1
2345
- * @max 100
2346
- */
2347
- pageSize?: number;
2348
- };
2349
- type RequestBody = never;
2350
- type RequestHeaders = {};
2351
- type ResponseBody = PagedResponseOfLegalFormCatalogItemResponse;
2352
- }
2353
- /**
2354
- * @description Returns the graph (nodes and edges) within 2 hops of the start entity. Exactly one of personId or fnr must be provided. The network of people and companies around one starting point — who sits on which board with whom. nodes are people ("person") and companies ("business"), each carrying the id you would pass to /people/{personId} or /businesses/{fnr}; edges are source/target pairs of those ids whose relationshipType is "assignment", a person holding a function in a company. Two further edge types the deployment can enable: "address", two companies registered at the same street address, and "ownership", a company holding shares in another — source is the shareholder, target the company it holds, and capitalAmount, currency and sharePercent carry the stake where the register gives one. Ownership edges are drawn only for companies crawled since the shareholder mapping went live, so a company not yet re-crawled reports none rather than implying it has none. The traversal depth is fixed at 2 hops and is not a parameter — a node with further connections outside that boundary carries hasMore=true, and isCentralNode marks the entity you started from. personId and fnr are mutually exclusive, not combinable: supplying both, or neither, is a 400, and an id that exists in neither register is a 404. Kostet 3 Credits.
2355
- * @tags Graph
2356
- * @name V1GraphList
2357
- * @summary Relationship graph
2358
- * @request GET:/api/v1/graph
2359
- * @secure
2360
- */
2361
- namespace V1GraphList {
2362
- type RequestParams = {};
2363
- type RequestQuery = {
2364
- /** Start from this person. Mutually exclusive with fnr. */
2365
- personId?: string;
2366
- /** Start from this company. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company; case is not folded. Mutually exclusive with personId. */
2367
- fnr?: string;
2368
- };
2369
- type RequestBody = never;
2370
- type RequestHeaders = {};
2371
- type ResponseBody = GraphResponse;
2372
- }
2373
- /**
2374
- * @description The single feed of every change across all registers — Firmenbuch, GISA, Ediktsdatei and the BMF Scheinunternehmen list — as lightweight reference rows. Each row carries only id, fnr, changeType and the dates; fetch the payload with GET /globalchanges/{id}, or poll one register's typed feed instead (/businesses/changes, /documents/changes, /edikte/changes, /trades/changes). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. Kostet 1 Credit.
2375
- * @tags GlobalChanges
2376
- * @name V1GlobalchangesList
2377
- * @summary All-register change feed
2378
- * @request GET:/api/v1/globalchanges
2379
- * @secure
2380
- */
2381
- namespace V1GlobalchangesList {
2382
- type RequestParams = {};
2383
- type RequestQuery = {
2384
- /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
2385
- fnr?: string;
2386
- /**
2387
- * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
2388
- * @format date-time
2389
- */
2390
- since?: string;
2391
- /**
2392
- * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
2393
- * @format int64
2394
- */
2395
- sinceId?: number;
2396
- /**
2397
- * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
2398
- * @format int32
2399
- * @min 1
2400
- * @max 1000
2401
- */
2402
- page?: number;
2403
- /**
2404
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2405
- * @format int32
2406
- * @min 1
2407
- * @max 100
2408
- */
2409
- pageSize?: number;
2410
- };
2411
- type RequestBody = never;
2412
- type RequestHeaders = {};
2413
- type ResponseBody = PagedResponseOfGlobalChange;
2414
- }
2415
- /**
2416
- * @description Changes for a watchlist of companies, all four change types in one unpaged response. Built for watchlist polling: pass up to 1000 fnr values (repeat the parameter) and one cursor, and get back four arrays — businessChanges, documentChanges, ediktChanges, globalChanges — each ordered by ascending id and capped at maxResultsPerType. Not paged: raise maxResultsPerType or advance sinceId instead. sinceId is exclusive and since is inclusive, exactly as on the paged feeds, but one sinceId covers all four arrays: an array that comes back full at maxResultsPerType has more behind it and bounds the cursor, so advance sinceId only to the lowest of the full arrays' highest ids, and to the highest id of all four once none comes back full. Passing no fnr returns four empty arrays, not the whole feed. Kostet 3 Credits.
2417
- * @tags GlobalChanges
2418
- * @name V1GlobalchangesAggregatedList
2419
- * @summary Aggregated watchlist changes
2420
- * @request GET:/api/v1/globalchanges/aggregated
2421
- * @secure
2422
- */
2423
- namespace V1GlobalchangesAggregatedList {
2424
- type RequestParams = {};
2425
- type RequestQuery = {
2426
- /** Firmenbuch numbers to fetch changes for. Max 1000 items. Each is normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
2427
- fnr?: string[];
2428
- /** @format date-time */
2429
- since?: string;
2430
- /** @format int64 */
2431
- sinceId?: number;
2432
- /**
2433
- * Max number of changes to return per type. Default 500, max 2000.
2434
- * @format int32
2435
- * @min 1
2436
- * @max 2000
2437
- */
2438
- maxResultsPerType?: number;
2439
- };
2440
- type RequestBody = never;
2441
- type RequestHeaders = {};
2442
- type ResponseBody = AggregatedChangesResponse;
2443
- }
2444
- /**
2445
- * @description Returns one change with its typed payload, whichever register it came from. The envelope is a discriminator plus the payload: changeType says which register, and data is the matching object — a BusinessChange, DocumentChange, EdiktChange, GisaChange, FoerderungChange or ScheinunternehmenChange. Since data is a union, read changeType before it. Kostet 1 Credit.
2446
- * @tags GlobalChanges
2447
- * @name V1GlobalchangesDetail
2448
- * @summary Change by id
2449
- * @request GET:/api/v1/globalchanges/{id}
2450
- * @secure
2451
- */
2452
- namespace V1GlobalchangesDetail {
2453
- type RequestParams = {
2454
- /** @format int64 */
2455
- id: number;
2456
- };
2457
- type RequestQuery = {};
2458
- type RequestBody = never;
2459
- type RequestHeaders = {};
2460
- type ResponseBody = ChangeDetailResponse;
2461
- }
2462
- /**
2463
- * @description Kostet 1 Credit.
2464
- * @tags Foerderungen
2465
- * @name V1FoerderungenChangesDetail
2466
- * @summary Funding change by id
2467
- * @request GET:/api/v1/foerderungen/changes/{id}
2468
- * @secure
2469
- */
2470
- namespace V1FoerderungenChangesDetail {
2471
- type RequestParams = {
2472
- /** @format int64 */
2473
- id: number;
2474
- };
2475
- type RequestQuery = {};
2476
- type RequestBody = never;
2477
- type RequestHeaders = {};
2478
- type ResponseBody = FoerderungChange;
2479
- }
2480
- /**
2481
- * @description New payments and amount corrections for matched companies. A source's initial import is excluded. Ordered by ascending id. Poll with sinceId set to the previous watermark, deduplicate by id, and stop on a short page. since is inclusive and filters the recorded date, not the payment year. Both cursors apply together. fnr is normalised as on GET /businesses. totalRecords is capped at 1000 × pageSize; at that cap it means at least that many. Kostet 1 Credit.
2482
- * @tags Foerderungen
2483
- * @name V1FoerderungenChangesList
2484
- * @summary Funding change feed
2485
- * @request GET:/api/v1/foerderungen/changes
2486
- * @secure
2487
- */
2488
- namespace V1FoerderungenChangesList {
2489
- type RequestParams = {};
2490
- type RequestQuery = {
2491
- /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
2492
- fnr?: string;
2493
- /**
2494
- * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
2495
- * @format date-time
2496
- */
2497
- since?: string;
2498
- /**
2499
- * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
2500
- * @format int64
2501
- */
2502
- sinceId?: number;
2503
- /**
2504
- * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
2505
- * @format int32
2506
- * @min 1
2507
- * @max 1000
2508
- */
2509
- page?: number;
2510
- /**
2511
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2512
- * @format int32
2513
- * @min 1
2514
- * @max 100
2515
- */
2516
- pageSize?: number;
2517
- };
2518
- type RequestBody = never;
2519
- type RequestHeaders = {};
2520
- type ResponseBody = PagedResponseOfFoerderungChange;
2521
- }
2522
- /**
2523
- * @description Returns one Ediktsdatei change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "edikt" answers 404 here. Kostet 1 Credit.
2524
- * @tags Edikte
2525
- * @name V1EdikteChangesDetail
2526
- * @summary Edikt change by id
2527
- * @request GET:/api/v1/edikte/changes/{id}
2528
- * @secure
2529
- */
2530
- namespace V1EdikteChangesDetail {
2531
- type RequestParams = {
2532
- /** @format int64 */
2533
- id: number;
2534
- };
2535
- type RequestQuery = {};
2536
- type RequestBody = never;
2537
- type RequestHeaders = {};
2538
- type ResponseBody = EdiktChange;
2539
- }
2540
- /**
2541
- * @description Feed of Ediktsdatei changes — insolvency and other court notices published about a company or a person. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the publication date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss an insolvency notice resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
2542
- * @tags Edikte
2543
- * @name V1EdikteChangesList
2544
- * @summary Ediktsdatei change feed
2545
- * @request GET:/api/v1/edikte/changes
2546
- * @secure
2547
- */
2548
- namespace V1EdikteChangesList {
2549
- type RequestParams = {};
2550
- type RequestQuery = {
2551
- /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
2552
- fnr?: string;
2553
- /**
2554
- * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
2555
- * @format date-time
2556
- */
2557
- since?: string;
2558
- /**
2559
- * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
2560
- * @format int64
2561
- */
2562
- sinceId?: number;
2563
- /**
2564
- * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
2565
- * @format int32
2566
- * @min 1
2567
- * @max 1000
2568
- */
2569
- page?: number;
2570
- /**
2571
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2572
- * @format int32
2573
- * @min 1
2574
- * @max 100
2575
- */
2576
- pageSize?: number;
2577
- };
2578
- type RequestBody = never;
2579
- type RequestHeaders = {};
2580
- type ResponseBody = PagedResponseOfEdiktChange;
2581
- }
2582
- /**
2583
- * @description Downloads a Firmenbuch document (PDF/XML) by its document key. Kostet 3 Credits.
2584
- * @tags Documents
2585
- * @name V1DocumentsDownloadDetail
2586
- * @summary Firmenbuch document download
2587
- * @request GET:/api/v1/documents/download/{documentKey}
2588
- * @secure
2589
- */
2590
- namespace V1DocumentsDownloadDetail {
2591
- type RequestParams = {
2592
- documentKey: string;
2593
- };
2594
- type RequestQuery = {};
2595
- type RequestBody = never;
2596
- type RequestHeaders = {};
2597
- type ResponseBody = void;
2598
- }
2599
- /**
2600
- * @description Returns one document change by id, with the document's metadata. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "document" answers 404 here. Kostet 1 Credit.
2601
- * @tags Documents
2602
- * @name V1DocumentsChangesDetail
2603
- * @summary Document change by id
2604
- * @request GET:/api/v1/documents/changes/{id}
2605
- * @secure
2606
- */
2607
- namespace V1DocumentsChangesDetail {
2608
- type RequestParams = {
2609
- /** @format int64 */
2610
- id: number;
2611
- };
2612
- type RequestQuery = {};
2613
- type RequestBody = never;
2614
- type RequestHeaders = {};
2615
- type ResponseBody = DocumentChange;
2616
- }
2617
- /**
2618
- * @description Feed of newly filed Firmenbuch documents — this is how you learn that a company has published a new Jahresabschluss. Each entry names a documentKey; fetch the file itself with GET /documents/download/{documentKey}. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the document date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
2619
- * @tags Documents
2620
- * @name V1DocumentsChangesList
2621
- * @summary Document change feed
2622
- * @request GET:/api/v1/documents/changes
2623
- * @secure
2624
- */
2625
- namespace V1DocumentsChangesList {
2626
- type RequestParams = {};
2627
- type RequestQuery = {
2628
- /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
2629
- fnr?: string;
2630
- /**
2631
- * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
2632
- * @format date-time
2633
- */
2634
- since?: string;
2635
- /**
2636
- * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
2637
- * @format int64
2638
- */
2639
- sinceId?: number;
2640
- /**
2641
- * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
2642
- * @format int32
2643
- * @min 1
2644
- * @max 1000
2645
- */
2646
- page?: number;
2647
- /**
2648
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2649
- * @format int32
2650
- * @min 1
2651
- * @max 100
2652
- */
2653
- pageSize?: number;
2654
- };
2655
- type RequestBody = never;
2656
- type RequestHeaders = {};
2657
- type ResponseBody = PagedResponseOfDocumentChange;
2658
- }
2659
- /**
2660
- * @description Returns all courts with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
2661
- * @tags Courts
2662
- * @name V1CourtsList
2663
- * @summary Court catalog
2664
- * @request GET:/api/v1/courts
2665
- * @secure
2666
- */
2667
- namespace V1CourtsList {
2668
- type RequestParams = {};
2669
- type RequestQuery = {
2670
- /** @maxLength 200 */
2671
- search?: string;
2672
- /**
2673
- * 1-based page number; defaults to 1 when omitted.
2674
- * @format int32
2675
- * @min 1
2676
- * @max 1000
2677
- */
2678
- page?: number;
2679
- /**
2680
- * Number of items per page; defaults to 10 when omitted.
2681
- * @format int32
2682
- * @min 1
2683
- * @max 100
2684
- */
2685
- pageSize?: number;
2686
- };
2687
- type RequestBody = never;
2688
- type RequestHeaders = {};
2689
- type ResponseBody = PagedResponseOfCourtCatalogItemResponse;
2690
- }
2691
- /**
2692
- * @description Resolve company names to FNRs by exact name match (1:1). Used for CSV import. Kostet 1 Credit.
2693
- * @tags Businesses
2694
- * @name V1BusinessesResolveNamesCreate
2695
- * @summary Name to FNR resolution
2696
- * @request POST:/api/v1/businesses/resolve-names
2697
- * @secure
2698
- */
2699
- namespace V1BusinessesResolveNamesCreate {
2700
- type RequestParams = {};
2701
- type RequestQuery = {};
2702
- type RequestBody = ResolveBusinessNamesRequest;
2703
- type RequestHeaders = {};
2704
- type ResponseBody = ResolveBusinessNamesResponse;
2705
- }
2706
- /**
2707
- * @description Lists companies matching the filters, one page of list rows per call. name and search are different tools. name is a case-insensitive substring match on the company name and nothing else. search splits the term on spaces and keeps only companies matching every token, where a token matches the name, the fnr, or — when the whole term is a number — a GISA licence key or GISA-Zahl; it additionally lifts companies whose name starts with the term to the top of the default (name) ordering. So name narrows a known name, search finds an unknown one. Inactive companies always sort after active ones, whatever orderBy says. inInsolvency is a Firmenbuch evidence filter, not an Ediktsdatei or Insolvenzdatei one. True matches a classified open court record or an active administrator role (MW, IW, AW, VW). False includes closed evidence without an active role, missing evidence and unclassified or uncertain evidence without another opening or role. Omit the parameter to leave this state unfiltered. A false value means no current positive evidence in this dataset, not verified legal assurance that no proceeding exists. The proceedings are published in the Insolvenzdatei, which this API does not read. Examples: ?inInsolvency=true; ?inInsolvency=false&name=Graf; ?inInsolvency=true&countOnly=true. The same values combine with every other filter. Pass countOnly=true for totalRecords without the rows, and use /businesses/aggregate to group the same filter set instead of paging through it. Place filters: the Firmenbuch records no Bundesland and no Gemeinde, only the Sitzgericht, so both state and gemeinde are derived from the PLZ of the Geschäftsanschrift. state is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich and are counted as Salzburg. gemeinde takes the slug of a Gemeinde, and because it reads the PLZ it answers every spelling of a place at once — "Klagenfurt am Wörthersee", "Klagenfurt" and "Klagenfurt-Viktring" are one Gemeinde, where city= would be three separate filters over free text. GET /addresses/gemeinden is the catalogue of the slugs, their aliases, their Bundesland and their PLZ; a company with a foreign or unusable PLZ is in no Gemeinde and no gemeinde= filter finds it. Ohne API-Key abrufbar und kostet keine Credits.
2708
- * @tags Businesses
2709
- * @name V1BusinessesList
2710
- * @summary Company search
2711
- * @request GET:/api/v1/businesses
2712
- * @secure
2713
- */
2714
- namespace V1BusinessesList {
2715
- type RequestParams = {};
2716
- type RequestQuery = {
2717
- fnr?: string[];
2718
- name?: string;
2719
- search?: string;
2720
- city?: string[];
2721
- courtCode?: string[];
2722
- legalFormCode?: string[];
2723
- zipCode?: string[];
2724
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. Derived from the PLZ of the Geschäftsanschrift; see this endpoint's description. An unknown name is a 400. */
2725
- state?: string[];
2726
- /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
2727
- gemeinde?: string[];
2728
- hasEdikt?: boolean;
2729
- active?: boolean;
2730
- /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
2731
- isScheinunternehmen?: boolean;
2732
- gisaLicenseKey?: number[];
2733
- /** Filter by OeNACE code (OenaceZuord / NumericCode), e.g. ["46649"]. */
2734
- oenaceCode?: string[];
2735
- /**
2736
- * Lower bound (inclusive) for the Firmenbuch registration date ("Eingetragen seit"), the earliest executionDate over the company's legal records. The Firmenbuch was digitised in 1991/92, so no value predates that however old the company actually is — it is not a founding date.
2737
- * @format date-time
2738
- */
2739
- registeredSince_gte?: string;
2740
- /**
2741
- * Upper bound (inclusive) for the Firmenbuch registration date ("Eingetragen seit"), the earliest executionDate over the company's legal records. The Firmenbuch was digitised in 1991/92, so no value predates that however old the company actually is — it is not a founding date.
2742
- * @format date-time
2743
- */
2744
- registeredSince_lte?: string;
2745
- /**
2746
- * Lower bound (inclusive) for the number of distinct people with signing authority, counting the representation functions GF, GD, GL, HB, IN, IV, KP, PR, SV, VM, VO and excluding the insolvency and liquidation ones (AB, AW, IW, MW, VW, ZW). Currently held functions only.
2747
- * @format int32
2748
- */
2749
- signerCount_gte?: number;
2750
- /**
2751
- * Upper bound (inclusive) for the number of distinct people with signing authority, counting the representation functions GF, GD, GL, HB, IN, IV, KP, PR, SV, VM, VO and excluding the insolvency and liquidation ones (AB, AW, IW, MW, VW, ZW). Currently held functions only.
2558
+ * Upper bound (inclusive) for the number of distinct people with signing authority, counting the representation functions GF, GD, GL, HB, IN, IV, KP, PR, SV, VM, VO and excluding the insolvency and liquidation ones (AB, AW, IW, MW, VW, ZW). Currently held functions only.
2752
2559
  * @format int32
2753
2560
  */
2754
2561
  signerCount_lte?: number;
@@ -3274,7 +3081,7 @@ export declare namespace Api {
3274
3081
  type ResponseBody = PagedResponseOfBusinessListResponse;
3275
3082
  }
3276
3083
  /**
3277
- * @description Returns all business (fnr, name) pairs for client-side name index. No pagination. Ohne API-Key abrufbar und kostet keine Credits.
3084
+ * @description Returns all business (fnr, name) pairs for client-side name index. No pagination. Kostet 1 Credit.
3278
3085
  * @tags Businesses
3279
3086
  * @name V1BusinessesNamesList
3280
3087
  * @summary Company name index
@@ -3888,7 +3695,7 @@ export declare namespace Api {
3888
3695
  type ResponseBody = BusinessAggregateResponse;
3889
3696
  }
3890
3697
  /**
3891
- * @description Counts for every value of every filter group at once — what a filter builder puts on its chips. Takes the same filters as GET /businesses and means them the same way; page, pageSize, orderBy, orderByDescending and countOnly are ignored. Faceted semantics: a group is counted with all *other* active filters applied but its own lifted, so a value's count answers "how many results if I also select this", and selecting one never empties its own group. totalRecords is the current result count, with every filter applied. Each group returns its top values (top, default 10) plus every value the request already filters on, marked selected — a "Mehr" expander is a second call for that one group with a larger top, e.g. ?groups=city&top=50. city and zipCode count a business once per distinct value, so those counts can sum above totalRecords. One caveat worth knowing before wiring a chip up: the city filter matches a substring, while a city facet key is a whole city name, so selecting "Wien" also keeps "Wien-Umgebung" and can return more than the chip promised. Every other group matches its key exactly. Every group costs its own count, so ask for the groups you are rendering rather than all ten; the answer is cacheable for a day and varies on the whole query string. Ohne API-Key abrufbar und kostet keine Credits.
3698
+ * @description Counts for every value of every filter group at once — what a filter builder puts on its chips. Takes the same filters as GET /businesses and means them the same way; page, pageSize, orderBy, orderByDescending and countOnly are ignored. Faceted semantics: a group is counted with all *other* active filters applied but its own lifted, so a value's count answers "how many results if I also select this", and selecting one never empties its own group. totalRecords is the current result count, with every filter applied. Each group returns its top values (top, default 10) plus every value the request already filters on, marked selected — a "Mehr" expander is a second call for that one group with a larger top, e.g. ?groups=city&top=50. city and zipCode count a business once per distinct value, so those counts can sum above totalRecords. One caveat worth knowing before wiring a chip up: the city filter matches a substring, while a city facet key is a whole city name, so selecting "Wien" also keeps "Wien-Umgebung" and can return more than the chip promised. Every other group matches its key exactly. Every group costs its own count, so ask for the groups you are rendering rather than all ten; the answer is cacheable for a day and varies on the whole query string. Kostet 1 Credit.
3892
3699
  * @tags Businesses
3893
3700
  * @name V1BusinessesFacetsList
3894
3701
  * @summary Filter-builder facet counts
@@ -3898,7 +3705,7 @@ export declare namespace Api {
3898
3705
  namespace V1BusinessesFacetsList {
3899
3706
  type RequestParams = {};
3900
3707
  type RequestQuery = {
3901
- /** Groups to count; all of them when omitted. One or more of city, zipCode, legalFormCode, courtCode, oenaceCode, gisaLicenseKey, active, hasEdikt, isScheinunternehmen, kennzahl. */
3708
+ /** Groups to count; all of them when omitted. One or more of city, zipCode, legalFormCode, courtCode, oenaceCode, gisaLicenseKey, active, hasEdikt, isScheinunternehmen, inInsolvency, kennzahl. */
3902
3709
  groups?: string[];
3903
3710
  /**
3904
3711
  * Values per group, largest count first. The status and kennzahl groups are complete lists and ignore it. A "Mehr" expander is a second call for the one group with a larger top.
@@ -4467,7 +4274,7 @@ export declare namespace Api {
4467
4274
  type ResponseBody = BusinessFacetsResponse;
4468
4275
  }
4469
4276
  /**
4470
- * @description The single largest company of every place in the viewport, by one metric — what a map draws as one pin per place instead of every dot in the box. groupBy picks the place: state (the nine Bundesländer, the default) or city (the towns in view). metric is one of detailViews (Aufrufe), bilanzSumme or employees (Mitarbeiter). minLat, maxLat, minLng and maxLng are required for groupBy=city and ignored for groupBy=state: the nine Bundesländer are the same nine wherever the map is looking, so that call takes no viewport at all — which is what lets one URL serve every pan and actually be cached, here and in the browser. Every /businesses filter additionally applies and means exactly what it means there; page, pageSize, orderBy, orderByDescending and countOnly are ignored. groupLabel is the place's name — "Tirol", "Innsbruck" — and is what the pin's card is headed with. A company carrying no value for the metric is skipped rather than counted as 0, so a place holding only such companies — like an empty one — returns nothing at all and the array is shorter than the number of places. Each item carries everything a popover card shows, so no second call per pin is needed. groupBy=city answers at most 16 pins, the biggest of the towns in view; the rest is what zooming in is for. Bundesländer are derived from the PLZ of the Geschäftsanschrift, the same rule the state filter on GET /businesses uses, because the Firmenbuch carries no Land. A company that is the biggest of two places in view wins both, each pin carrying an address that is actually on screen and in the town it won. Cached for an hour rather than the day GET /businesses gets: view counts move. Ohne API-Key abrufbar und kostet keine Credits.
4277
+ * @description The single largest company of every place in the viewport, by one metric — what a map draws as one pin per place instead of every dot in the box. groupBy picks the place: state (the nine Bundesländer, the default) or city (the towns in view). metric is one of detailViews (Aufrufe), bilanzSumme or employees (Mitarbeiter). minLat, maxLat, minLng and maxLng are required for groupBy=city and ignored for groupBy=state: the nine Bundesländer are the same nine wherever the map is looking, so that call takes no viewport at all — which is what lets one URL serve every pan and actually be cached, here and in the browser. Every /businesses filter additionally applies and means exactly what it means there; page, pageSize, orderBy, orderByDescending and countOnly are ignored. groupLabel is the place's name — "Tirol", "Innsbruck" — and is what the pin's card is headed with. A company carrying no value for the metric is skipped rather than counted as 0, so a place holding only such companies — like an empty one — returns nothing at all and the array is shorter than the number of places. Each item carries everything a popover card shows, so no second call per pin is needed. groupBy=city answers at most 16 pins, the biggest of the towns in view; the rest is what zooming in is for. Bundesländer are derived from the PLZ of the Geschäftsanschrift, the same rule the state filter on GET /businesses uses, because the Firmenbuch carries no Land. A company that is the biggest of two places in view wins both, each pin carrying an address that is actually on screen and in the town it won. Cached for an hour rather than the day GET /businesses gets: view counts move. Kostet 1 Credit.
4471
4278
  * @tags Businesses
4472
4279
  * @name V1BusinessesMapTopList
4473
4280
  * @summary Top company per Bundesland or city
@@ -5011,130 +4818,425 @@ export declare namespace Api {
5011
4818
  */
5012
4819
  "guv.Umsatzerloese_gte"?: number | null;
5013
4820
  /**
5014
- * Upper bound (inclusive) for Filter by profit and loss item: Umsatzerloese
5015
- * @format decimal
4821
+ * Upper bound (inclusive) for Filter by profit and loss item: Umsatzerloese
4822
+ * @format decimal
4823
+ */
4824
+ "guv.Umsatzerloese_lte"?: number | null;
4825
+ /**
4826
+ * Lower bound (inclusive) for Filter by profit and loss item: WarenUndMaterialeinkauf
4827
+ * @format decimal
4828
+ */
4829
+ "guv.WarenUndMaterialeinkauf_gte"?: number | null;
4830
+ /**
4831
+ * Upper bound (inclusive) for Filter by profit and loss item: WarenUndMaterialeinkauf
4832
+ * @format decimal
4833
+ */
4834
+ "guv.WarenUndMaterialeinkauf_lte"?: number | null;
4835
+ /**
4836
+ * Lower bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
4837
+ * @format decimal
4838
+ */
4839
+ "guv.ZinsenUndAehnlicheAufwendungen_gte"?: number | null;
4840
+ /**
4841
+ * Upper bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
4842
+ * @format decimal
4843
+ */
4844
+ "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
4845
+ };
4846
+ type RequestBody = never;
4847
+ type RequestHeaders = {};
4848
+ type ResponseBody = BusinessMapTopItem[];
4849
+ }
4850
+ /**
4851
+ * @description Active businesses similar to the given one (same OeNACE branch, same region preferred). Kostet 3 Credits.
4852
+ * @tags Businesses
4853
+ * @name V1BusinessesSimilarList
4854
+ * @summary Similar companies
4855
+ * @request GET:/api/v1/businesses/{fnr}/similar
4856
+ * @secure
4857
+ */
4858
+ namespace V1BusinessesSimilarList {
4859
+ type RequestParams = {
4860
+ fnr: string;
4861
+ };
4862
+ type RequestQuery = {};
4863
+ type RequestBody = never;
4864
+ type RequestHeaders = {};
4865
+ type ResponseBody = BusinessListResponse[];
4866
+ }
4867
+ /**
4868
+ * @description Returns the whole Firmenakte of one company: master data, addresses, people, GISA licences, Edikte, documents and the parsed annual accounts. fnr is matched exactly against the stored, normalised Firmenbuchnummer — lower case, no spaces, no leading zeros and no "FN" prefix, e.g. 34853f. Nothing is normalised on the way in, so "FN 34853 f" answers 404 rather than the company. 404 also means the company is not in the dataset yet. Kostet 1 Credit.
4869
+ * @tags Businesses
4870
+ * @name V1BusinessesDetail
4871
+ * @summary Company Firmenakte
4872
+ * @request GET:/api/v1/businesses/{fnr}
4873
+ * @secure
4874
+ */
4875
+ namespace V1BusinessesDetail {
4876
+ type RequestParams = {
4877
+ fnr: string;
4878
+ };
4879
+ type RequestQuery = {};
4880
+ type RequestBody = never;
4881
+ type RequestHeaders = {};
4882
+ type ResponseBody = BusinessDetailResponse;
4883
+ }
4884
+ /**
4885
+ * @description Every parsed Jahresabschluss of one company, one entry per fiscal closing date, newest first. The Firmenakte itself (GET /businesses/{fnr}) carries only the last five periods. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
4886
+ * @tags Businesses
4887
+ * @name V1BusinessesJahresabschluesseList
4888
+ * @summary Company annual accounts
4889
+ * @request GET:/api/v1/businesses/{fnr}/jahresabschluesse
4890
+ * @secure
4891
+ */
4892
+ namespace V1BusinessesJahresabschluesseList {
4893
+ type RequestParams = {
4894
+ fnr: string;
4895
+ };
4896
+ type RequestQuery = {};
4897
+ type RequestBody = never;
4898
+ type RequestHeaders = {};
4899
+ type ResponseBody = ParsedJahresabschlussDto[];
4900
+ }
4901
+ /**
4902
+ * @description The state aid published for one company by the Transparenzportal des BMF (§ 40k TDBG), newest year first and the largest amount first within a year, plus a summary of count, sum, the years and the freshest Stichtag. Published are Leistungen from 1.500 € per calendar year to non-natural persons; the COVID-19 reports start at 10.000 €. So an empty list means "nothing published for this company", never "this company received nothing" — and a company the portal names but that could not be matched to a Firmenbuchnummer is not here either. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
4903
+ * @tags Businesses
4904
+ * @name V1BusinessesFoerderungenList
4905
+ * @summary Company Foerderungen
4906
+ * @request GET:/api/v1/businesses/{fnr}/foerderungen
4907
+ * @secure
4908
+ */
4909
+ namespace V1BusinessesFoerderungenList {
4910
+ type RequestParams = {
4911
+ fnr: string;
4912
+ };
4913
+ type RequestQuery = {};
4914
+ type RequestBody = never;
4915
+ type RequestHeaders = {};
4916
+ type ResponseBody = BusinessFoerderungenResponse;
4917
+ }
4918
+ /**
4919
+ * @description Returns one Firmenbuch change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "business" answers 404 here. Kostet 1 Credit.
4920
+ * @tags Businesses
4921
+ * @name V1BusinessesChangesDetail
4922
+ * @summary Firmenbuch change by id
4923
+ * @request GET:/api/v1/businesses/changes/{id}
4924
+ * @secure
4925
+ */
4926
+ namespace V1BusinessesChangesDetail {
4927
+ type RequestParams = {
4928
+ /** @format int64 */
4929
+ id: number;
4930
+ };
4931
+ type RequestQuery = {};
4932
+ type RequestBody = never;
4933
+ type RequestHeaders = {};
4934
+ type ResponseBody = BusinessChange;
4935
+ }
4936
+ /**
4937
+ * @description Feed of Firmenbuch changes — one entry per new legal record (Eintragung). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate — so a back-dated entry is not missed — and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Use GET /globalchanges for the same feed across all four registers. Kostet 1 Credit.
4938
+ * @tags Businesses
4939
+ * @name V1BusinessesChangesList
4940
+ * @summary Firmenbuch change feed
4941
+ * @request GET:/api/v1/businesses/changes
4942
+ * @secure
4943
+ */
4944
+ namespace V1BusinessesChangesList {
4945
+ type RequestParams = {};
4946
+ type RequestQuery = {
4947
+ /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
4948
+ fnr?: string;
4949
+ /**
4950
+ * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
4951
+ * @format date-time
4952
+ */
4953
+ since?: string;
4954
+ /**
4955
+ * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
4956
+ * @format int64
4957
+ */
4958
+ sinceId?: number;
4959
+ /**
4960
+ * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
4961
+ * @format int32
4962
+ * @min 1
4963
+ * @max 1000
4964
+ */
4965
+ page?: number;
4966
+ /**
4967
+ * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
4968
+ * @format int32
4969
+ * @min 1
4970
+ * @max 100
4971
+ */
4972
+ pageSize?: number;
4973
+ };
4974
+ type RequestBody = never;
4975
+ type RequestHeaders = {};
4976
+ type ResponseBody = PagedResponseOfBusinessChange;
4977
+ }
4978
+ /**
4979
+ * @description Returns unique City+ZipCode combinations from addresses with pagination and optional search. Kostet 1 Credit.
4980
+ * @tags Addresses
4981
+ * @name V1AddressesLocationsList
4982
+ * @summary City and ZIP combinations
4983
+ * @request GET:/api/v1/addresses/locations
4984
+ * @secure
4985
+ */
4986
+ namespace V1AddressesLocationsList {
4987
+ type RequestParams = {};
4988
+ type RequestQuery = {
4989
+ search?: string;
4990
+ /**
4991
+ * 1-based page number; defaults to 1 when omitted.
4992
+ * @format int32
4993
+ * @min 1
4994
+ * @max 1000
4995
+ */
4996
+ page?: number;
4997
+ /**
4998
+ * Number of items per page; defaults to 10 when omitted.
4999
+ * @format int32
5000
+ * @min 1
5001
+ * @max 100
5002
+ */
5003
+ pageSize?: number;
5004
+ };
5005
+ type RequestBody = never;
5006
+ type RequestHeaders = {};
5007
+ type ResponseBody = PagedResponseOfAddressLocationResponse;
5008
+ }
5009
+ /**
5010
+ * @description Returns unique cities from addresses with pagination and optional search. Kostet 1 Credit.
5011
+ * @tags Addresses
5012
+ * @name V1AddressesCitiesList
5013
+ * @summary Cities
5014
+ * @request GET:/api/v1/addresses/cities
5015
+ * @secure
5016
+ */
5017
+ namespace V1AddressesCitiesList {
5018
+ type RequestParams = {};
5019
+ type RequestQuery = {
5020
+ search?: string;
5021
+ /**
5022
+ * 1-based page number; defaults to 1 when omitted.
5023
+ * @format int32
5024
+ * @min 1
5025
+ * @max 1000
5016
5026
  */
5017
- "guv.Umsatzerloese_lte"?: number | null;
5027
+ page?: number;
5018
5028
  /**
5019
- * Lower bound (inclusive) for Filter by profit and loss item: WarenUndMaterialeinkauf
5020
- * @format decimal
5029
+ * Number of items per page; defaults to 10 when omitted.
5030
+ * @format int32
5031
+ * @min 1
5032
+ * @max 100
5021
5033
  */
5022
- "guv.WarenUndMaterialeinkauf_gte"?: number | null;
5034
+ pageSize?: number;
5035
+ };
5036
+ type RequestBody = never;
5037
+ type RequestHeaders = {};
5038
+ type ResponseBody = PagedResponseOfCityResponse;
5039
+ }
5040
+ /**
5041
+ * @description Ranks cities and City+ZipCode combinations against one term and answers the best few of both, as one ranking split into two lists — what a location filter's type-ahead needs, where /addresses/locations and /addresses/cities are the paged catalogues behind it. Ordered by where the term sits in the label, then by the shorter label, then by company count, so "wien" answers Wien before Wiener Neustadt and before every 1xxx ZIP that carries it. A term shorter than two characters is ignored and the biggest groups come back instead. top caps both lists together, not each. Kostet 1 Credit.
5042
+ * @tags Addresses
5043
+ * @name V1AddressesSuggestList
5044
+ * @summary Location autocomplete
5045
+ * @request GET:/api/v1/addresses/suggest
5046
+ * @secure
5047
+ */
5048
+ namespace V1AddressesSuggestList {
5049
+ type RequestParams = {};
5050
+ type RequestQuery = {
5051
+ /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
5052
+ search?: string;
5023
5053
  /**
5024
- * Upper bound (inclusive) for Filter by profit and loss item: WarenUndMaterialeinkauf
5025
- * @format decimal
5054
+ * How many suggestions to answer, across both lists; defaults to 10 when omitted.
5055
+ * @format int32
5026
5056
  */
5027
- "guv.WarenUndMaterialeinkauf_lte"?: number | null;
5057
+ top?: number;
5058
+ };
5059
+ type RequestBody = never;
5060
+ type RequestHeaders = {};
5061
+ type ResponseBody = LocationSuggestionsResponse;
5062
+ }
5063
+ /**
5064
+ * @description Returns unique zip codes from addresses with pagination and optional search. Kostet 1 Credit.
5065
+ * @tags Addresses
5066
+ * @name V1AddressesZipcodesList
5067
+ * @summary ZIP codes
5068
+ * @request GET:/api/v1/addresses/zipcodes
5069
+ * @secure
5070
+ */
5071
+ namespace V1AddressesZipcodesList {
5072
+ type RequestParams = {};
5073
+ type RequestQuery = {
5074
+ search?: string;
5028
5075
  /**
5029
- * Lower bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
5030
- * @format decimal
5076
+ * 1-based page number; defaults to 1 when omitted.
5077
+ * @format int32
5078
+ * @min 1
5079
+ * @max 1000
5031
5080
  */
5032
- "guv.ZinsenUndAehnlicheAufwendungen_gte"?: number | null;
5081
+ page?: number;
5033
5082
  /**
5034
- * Upper bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
5035
- * @format decimal
5083
+ * Number of items per page; defaults to 10 when omitted.
5084
+ * @format int32
5085
+ * @min 1
5086
+ * @max 100
5036
5087
  */
5037
- "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
5088
+ pageSize?: number;
5038
5089
  };
5039
5090
  type RequestBody = never;
5040
5091
  type RequestHeaders = {};
5041
- type ResponseBody = BusinessMapTopItem[];
5092
+ type ResponseBody = PagedResponseOfZipCodeResponse;
5042
5093
  }
5043
5094
  /**
5044
- * @description Active businesses similar to the given one (same OeNACE branch, same region preferred). Kostet 3 Credits.
5045
- * @tags Businesses
5046
- * @name V1BusinessesSimilarList
5047
- * @summary Similar companies
5048
- * @request GET:/api/v1/businesses/{fnr}/similar
5095
+ * @description The Gemeinde catalogue: one row per Austrian Gemeinde the register can address, with its official name, its URL slug, its Bundesland and that Land's slug, the PLZ that resolve to it, the alias slugs that name it and, for Wien, its Bezirke. This is the one source for a place's identity. The city column of an address is Firmenbuch free text and carries "Klagenfurt am Wörthersee", "Klagenfurt", "Klagenfurt-Viktring" and "Klagenfurt-Wölfnitz" side by side, so it cannot be a key; a Gemeinde is derived from the PLZ of the Geschäftsanschrift instead, and GET /businesses?gemeinde=<slug> answers every one of those spellings at once. Fold the zipCode buckets of GET /businesses/aggregate through zipCodes to count companies per Gemeinde. Unpaged and without a filter on purpose: 1.893 rows that change only with a new Gebietsstand, so one cacheable answer is cheaper for every caller than paging a list they all want whole. Companies with a foreign or unusable PLZ resolve to no Gemeinde and appear under none. Kostet 1 Credit.
5096
+ * @tags Addresses
5097
+ * @name V1AddressesGemeindenList
5098
+ * @summary Gemeinden
5099
+ * @request GET:/api/v1/addresses/gemeinden
5049
5100
  * @secure
5050
5101
  */
5051
- namespace V1BusinessesSimilarList {
5052
- type RequestParams = {
5053
- fnr: string;
5054
- };
5102
+ namespace V1AddressesGemeindenList {
5103
+ type RequestParams = {};
5055
5104
  type RequestQuery = {};
5056
5105
  type RequestBody = never;
5057
5106
  type RequestHeaders = {};
5058
- type ResponseBody = BusinessListResponse[];
5107
+ type ResponseBody = GemeindeResponse[];
5059
5108
  }
5060
5109
  /**
5061
- * @description Returns the whole Firmenakte of one company: master data, addresses, people, GISA licences, Edikte, documents and the parsed annual accounts. fnr is matched exactly against the stored, normalised Firmenbuchnummer — lower case, no spaces, no leading zeros and no "FN" prefix, e.g. 34853f. Nothing is normalised on the way in, so "FN 34853 f" answers 404 rather than the company. 404 also means the company is not in the dataset yet. Kostet 1 Credit.
5062
- * @tags Businesses
5063
- * @name V1BusinessesDetail
5064
- * @summary Company Firmenakte
5065
- * @request GET:/api/v1/businesses/{fnr}
5110
+ * @description Downloads a Firmenbuch document (PDF/XML) by its document key. Kostet 3 Credits.
5111
+ * @tags Documents
5112
+ * @name V1DocumentsDownloadDetail
5113
+ * @summary Firmenbuch document download
5114
+ * @request GET:/api/v1/documents/download/{documentKey}
5066
5115
  * @secure
5067
5116
  */
5068
- namespace V1BusinessesDetail {
5117
+ namespace V1DocumentsDownloadDetail {
5069
5118
  type RequestParams = {
5070
- fnr: string;
5119
+ documentKey: string;
5071
5120
  };
5072
5121
  type RequestQuery = {};
5073
5122
  type RequestBody = never;
5074
5123
  type RequestHeaders = {};
5075
- type ResponseBody = BusinessDetailResponse;
5124
+ type ResponseBody = void;
5076
5125
  }
5077
5126
  /**
5078
- * @description Every parsed Jahresabschluss of one company, one entry per calendar year, newest first. The Firmenakte itself (GET /businesses/{fnr}) carries only the last five years. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
5079
- * @tags Businesses
5080
- * @name V1BusinessesJahresabschluesseList
5081
- * @summary Company annual accounts
5082
- * @request GET:/api/v1/businesses/{fnr}/jahresabschluesse
5127
+ * @description Returns one document change by id, with the document's metadata. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "document" answers 404 here. Kostet 1 Credit.
5128
+ * @tags Documents
5129
+ * @name V1DocumentsChangesDetail
5130
+ * @summary Document change by id
5131
+ * @request GET:/api/v1/documents/changes/{id}
5083
5132
  * @secure
5084
5133
  */
5085
- namespace V1BusinessesJahresabschluesseList {
5134
+ namespace V1DocumentsChangesDetail {
5086
5135
  type RequestParams = {
5087
- fnr: string;
5136
+ /** @format int64 */
5137
+ id: number;
5088
5138
  };
5089
5139
  type RequestQuery = {};
5090
5140
  type RequestBody = never;
5091
5141
  type RequestHeaders = {};
5092
- type ResponseBody = ParsedJahresabschlussDto[];
5142
+ type ResponseBody = DocumentChange;
5093
5143
  }
5094
5144
  /**
5095
- * @description The state aid published for one company by the Transparenzportal des BMF (§ 40k TDBG), newest year first and the largest amount first within a year, plus a summary of count, sum, the years and the freshest Stichtag. Published are Leistungen from 1.500 € per calendar year to non-natural persons; the COVID-19 reports start at 10.000 €. So an empty list means "nothing published for this company", never "this company received nothing" — and a company the portal names but that could not be matched to a Firmenbuchnummer is not here either. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
5096
- * @tags Businesses
5097
- * @name V1BusinessesFoerderungenList
5098
- * @summary Company Foerderungen
5099
- * @request GET:/api/v1/businesses/{fnr}/foerderungen
5145
+ * @description Feed of newly filed Firmenbuch documents — this is how you learn that a company has published a new Jahresabschluss. Each entry names a documentKey; fetch the file itself with GET /documents/download/{documentKey}. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the document date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
5146
+ * @tags Documents
5147
+ * @name V1DocumentsChangesList
5148
+ * @summary Document change feed
5149
+ * @request GET:/api/v1/documents/changes
5100
5150
  * @secure
5101
5151
  */
5102
- namespace V1BusinessesFoerderungenList {
5103
- type RequestParams = {
5104
- fnr: string;
5152
+ namespace V1DocumentsChangesList {
5153
+ type RequestParams = {};
5154
+ type RequestQuery = {
5155
+ /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5156
+ fnr?: string;
5157
+ /**
5158
+ * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
5159
+ * @format date-time
5160
+ */
5161
+ since?: string;
5162
+ /**
5163
+ * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
5164
+ * @format int64
5165
+ */
5166
+ sinceId?: number;
5167
+ /**
5168
+ * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
5169
+ * @format int32
5170
+ * @min 1
5171
+ * @max 1000
5172
+ */
5173
+ page?: number;
5174
+ /**
5175
+ * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5176
+ * @format int32
5177
+ * @min 1
5178
+ * @max 100
5179
+ */
5180
+ pageSize?: number;
5105
5181
  };
5106
- type RequestQuery = {};
5107
5182
  type RequestBody = never;
5108
5183
  type RequestHeaders = {};
5109
- type ResponseBody = BusinessFoerderungenResponse;
5184
+ type ResponseBody = PagedResponseOfDocumentChange;
5110
5185
  }
5111
5186
  /**
5112
- * @description Returns one Firmenbuch change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "business" answers 404 here. Kostet 1 Credit.
5113
- * @tags Businesses
5114
- * @name V1BusinessesChangesDetail
5115
- * @summary Firmenbuch change by id
5116
- * @request GET:/api/v1/businesses/changes/{id}
5187
+ * @description The autocomplete read: /businesses and /people for one term, ranked together, so a search field costs one request per keystroke rather than two and does not have to merge two orders itself. Each row carries either business or person, whichever type names. Ordered by where the term sits in the name, then by the shorter name, then companies before people. pageSize is per side, so the answer holds up to twice as many rows. An empty search answers an empty list; use /businesses to page through the whole dataset. Kostet 1 Credit.
5188
+ * @tags Search
5189
+ * @name V1SearchList
5190
+ * @summary Companies and people in one ranked list
5191
+ * @request GET:/api/v1/search
5117
5192
  * @secure
5118
5193
  */
5119
- namespace V1BusinessesChangesDetail {
5120
- type RequestParams = {
5121
- /** @format int64 */
5122
- id: number;
5194
+ namespace V1SearchList {
5195
+ type RequestParams = {};
5196
+ type RequestQuery = {
5197
+ /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
5198
+ search?: string;
5199
+ /**
5200
+ * How many rows to take from each side before they are ranked together, so the answer holds at most twice this many; defaults to 10 when omitted.
5201
+ * @format int32
5202
+ * @min 1
5203
+ * @max 100
5204
+ */
5205
+ pageSize?: number;
5123
5206
  };
5124
- type RequestQuery = {};
5125
5207
  type RequestBody = never;
5126
5208
  type RequestHeaders = {};
5127
- type ResponseBody = BusinessChange;
5209
+ type ResponseBody = SearchResponse;
5128
5210
  }
5129
5211
  /**
5130
- * @description Feed of Firmenbuch changes — one entry per new legal record (Eintragung). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate — so a back-dated entry is not missed — and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Use GET /globalchanges for the same feed across all four registers. Kostet 1 Credit.
5131
- * @tags Businesses
5132
- * @name V1BusinessesChangesList
5133
- * @summary Firmenbuch change feed
5134
- * @request GET:/api/v1/businesses/changes
5212
+ * @description Returns the graph (nodes and edges) within 2 hops of the start entity. Exactly one of personId or fnr must be provided. The network of people and companies around one starting point — who sits on which board with whom. nodes are people ("person") and companies ("business"), each carrying the id you would pass to /people/{personId} or /businesses/{fnr} — a person's is the Firmenakte-ID, e.g. "P-7K3M-QX91"; edges are source/target pairs of those ids whose relationshipType is "assignment", a person holding a function in a company. Two further edge types the deployment can enable: "address", two companies registered at the same street address, and "ownership", a company holding shares in another — source is the shareholder, target the company it holds, and capitalAmount, currency and sharePercent carry the stake where the register gives one. Ownership edges are drawn only for companies crawled since the shareholder mapping went live, so a company not yet re-crawled reports none rather than implying it has none. The traversal depth is fixed at 2 hops and is not a parameter — a node with further connections outside that boundary carries hasMore=true, and isCentralNode marks the entity you started from. personId and fnr are mutually exclusive, not combinable: supplying both, or neither, is a 400, and an id that exists in neither register is a 404. personId answers on the canonical Firmenakte-ID; another spelling of it and a person's old "vorname-nachname-…" id answer one 308 whose relative Location carries the canonical form. Kostet 3 Credits.
5213
+ * @tags Graph
5214
+ * @name V1GraphList
5215
+ * @summary Relationship graph
5216
+ * @request GET:/api/v1/graph
5135
5217
  * @secure
5136
5218
  */
5137
- namespace V1BusinessesChangesList {
5219
+ namespace V1GraphList {
5220
+ type RequestParams = {};
5221
+ type RequestQuery = {
5222
+ /** Start from this person, by Firmenakte-ID ("P-7K3M-QX91"). Mutually exclusive with fnr. */
5223
+ personId?: string;
5224
+ /** Start from this company. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company; case is not folded. Mutually exclusive with personId. */
5225
+ fnr?: string;
5226
+ };
5227
+ type RequestBody = never;
5228
+ type RequestHeaders = {};
5229
+ type ResponseBody = GraphResponse;
5230
+ }
5231
+ /**
5232
+ * @description The single feed of every change across all registers — Firmenbuch, GISA, Ediktsdatei and the BMF Scheinunternehmen list — as lightweight reference rows. Each row carries only id, fnr, changeType and the dates; fetch the payload with GET /globalchanges/{id}, or poll one register's typed feed instead (/businesses/changes, /documents/changes, /edikte/changes, /trades/changes). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. Kostet 1 Credit.
5233
+ * @tags GlobalChanges
5234
+ * @name V1GlobalchangesList
5235
+ * @summary All-register change feed
5236
+ * @request GET:/api/v1/globalchanges
5237
+ * @secure
5238
+ */
5239
+ namespace V1GlobalchangesList {
5138
5240
  type RequestParams = {};
5139
5241
  type RequestQuery = {
5140
5242
  /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
@@ -5166,35 +5268,74 @@ export declare namespace Api {
5166
5268
  };
5167
5269
  type RequestBody = never;
5168
5270
  type RequestHeaders = {};
5169
- type ResponseBody = PagedResponseOfBusinessChange;
5271
+ type ResponseBody = PagedResponseOfGlobalChange;
5272
+ }
5273
+ /**
5274
+ * @description Changes for a watchlist of companies, all four change types in one unpaged response. Built for watchlist polling: pass up to 1000 fnr values (repeat the parameter) and one cursor, and get back four arrays — businessChanges, documentChanges, ediktChanges, globalChanges — each ordered by ascending id and capped at maxResultsPerType. Not paged: raise maxResultsPerType or advance sinceId instead. sinceId is exclusive and since is inclusive, exactly as on the paged feeds, but one sinceId covers all four arrays: an array that comes back full at maxResultsPerType has more behind it and bounds the cursor, so advance sinceId only to the lowest of the full arrays' highest ids, and to the highest id of all four once none comes back full. Passing no fnr returns four empty arrays, not the whole feed. Kostet 3 Credits.
5275
+ * @tags GlobalChanges
5276
+ * @name V1GlobalchangesAggregatedList
5277
+ * @summary Aggregated watchlist changes
5278
+ * @request GET:/api/v1/globalchanges/aggregated
5279
+ * @secure
5280
+ */
5281
+ namespace V1GlobalchangesAggregatedList {
5282
+ type RequestParams = {};
5283
+ type RequestQuery = {
5284
+ /** Firmenbuch numbers to fetch changes for. Max 1000 items. Each is normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5285
+ fnr?: string[];
5286
+ /** @format date-time */
5287
+ since?: string;
5288
+ /** @format int64 */
5289
+ sinceId?: number;
5290
+ /**
5291
+ * Max number of changes to return per type. Default 500, max 2000.
5292
+ * @format int32
5293
+ * @min 1
5294
+ * @max 2000
5295
+ */
5296
+ maxResultsPerType?: number;
5297
+ };
5298
+ type RequestBody = never;
5299
+ type RequestHeaders = {};
5300
+ type ResponseBody = AggregatedChangesResponse;
5170
5301
  }
5171
5302
  /**
5172
- * @description Returns all assignment functions (code/text lookup) for display. Cached 24h. Ohne API-Key abrufbar und kostet keine Credits.
5173
- * @tags AssignmentFunctions
5174
- * @name V1AssignmentfunctionsList
5175
- * @summary Assignment function catalog
5176
- * @request GET:/api/v1/assignmentfunctions
5303
+ * @description Returns one change with its typed payload, whichever register it came from. The envelope is a discriminator plus the payload: changeType says which register, and data is the matching object — a BusinessChange, DocumentChange, EdiktChange, GisaChange, FoerderungChange or ScheinunternehmenChange. Since data is a union, read changeType before it. Kostet 1 Credit.
5304
+ * @tags GlobalChanges
5305
+ * @name V1GlobalchangesDetail
5306
+ * @summary Change by id
5307
+ * @request GET:/api/v1/globalchanges/{id}
5177
5308
  * @secure
5178
5309
  */
5179
- namespace V1AssignmentfunctionsList {
5180
- type RequestParams = {};
5310
+ namespace V1GlobalchangesDetail {
5311
+ type RequestParams = {
5312
+ /** @format int64 */
5313
+ id: number;
5314
+ };
5181
5315
  type RequestQuery = {};
5182
5316
  type RequestBody = never;
5183
5317
  type RequestHeaders = {};
5184
- type ResponseBody = AssignmentFunctionItemResponse[];
5318
+ type ResponseBody = ChangeDetailResponse;
5185
5319
  }
5186
5320
  /**
5187
- * @description Returns unique City+ZipCode combinations from addresses with pagination and optional search. Kostet 1 Credit.
5188
- * @tags Addresses
5189
- * @name V1AddressesLocationsList
5190
- * @summary City and ZIP combinations
5191
- * @request GET:/api/v1/addresses/locations
5321
+ * @description Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first. Kostet 1 Credit.
5322
+ * @tags Oenace
5323
+ * @name V1OenaceList
5324
+ * @summary OeNACE classification catalog
5325
+ * @request GET:/api/v1/oenace
5192
5326
  * @secure
5193
5327
  */
5194
- namespace V1AddressesLocationsList {
5328
+ namespace V1OenaceList {
5195
5329
  type RequestParams = {};
5196
5330
  type RequestQuery = {
5197
5331
  search?: string;
5332
+ /**
5333
+ * Filter by hierarchy level (1–5). Omit to return all levels.
5334
+ * @format int32
5335
+ */
5336
+ ebene?: number;
5337
+ /** @format int32 */
5338
+ minCompanyCount?: number;
5198
5339
  /**
5199
5340
  * 1-based page number; defaults to 1 when omitted.
5200
5341
  * @format int32
@@ -5212,19 +5353,20 @@ export declare namespace Api {
5212
5353
  };
5213
5354
  type RequestBody = never;
5214
5355
  type RequestHeaders = {};
5215
- type ResponseBody = PagedResponseOfAddressLocationResponse;
5356
+ type ResponseBody = PagedResponseOfOenaceCatalogItemResponse;
5216
5357
  }
5217
5358
  /**
5218
- * @description Returns unique cities from addresses with pagination and optional search. Kostet 1 Credit.
5219
- * @tags Addresses
5220
- * @name V1AddressesCitiesList
5221
- * @summary Cities
5222
- * @request GET:/api/v1/addresses/cities
5359
+ * @description Returns all legal forms with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
5360
+ * @tags LegalForms
5361
+ * @name V1LegalformsList
5362
+ * @summary Legal form catalog
5363
+ * @request GET:/api/v1/legalforms
5223
5364
  * @secure
5224
5365
  */
5225
- namespace V1AddressesCitiesList {
5366
+ namespace V1LegalformsList {
5226
5367
  type RequestParams = {};
5227
5368
  type RequestQuery = {
5369
+ /** @maxLength 200 */
5228
5370
  search?: string;
5229
5371
  /**
5230
5372
  * 1-based page number; defaults to 1 when omitted.
@@ -5243,42 +5385,20 @@ export declare namespace Api {
5243
5385
  };
5244
5386
  type RequestBody = never;
5245
5387
  type RequestHeaders = {};
5246
- type ResponseBody = PagedResponseOfCityResponse;
5247
- }
5248
- /**
5249
- * @description Ranks cities and City+ZipCode combinations against one term and answers the best few of both, as one ranking split into two lists — what a location filter's type-ahead needs, where /addresses/locations and /addresses/cities are the paged catalogues behind it. Ordered by where the term sits in the label, then by the shorter label, then by company count, so "wien" answers Wien before Wiener Neustadt and before every 1xxx ZIP that carries it. A term shorter than two characters is ignored and the biggest groups come back instead. top caps both lists together, not each. Ohne API-Key abrufbar und kostet keine Credits.
5250
- * @tags Addresses
5251
- * @name V1AddressesSuggestList
5252
- * @summary Location autocomplete
5253
- * @request GET:/api/v1/addresses/suggest
5254
- * @secure
5255
- */
5256
- namespace V1AddressesSuggestList {
5257
- type RequestParams = {};
5258
- type RequestQuery = {
5259
- /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
5260
- search?: string;
5261
- /**
5262
- * How many suggestions to answer, across both lists; defaults to 10 when omitted.
5263
- * @format int32
5264
- */
5265
- top?: number;
5266
- };
5267
- type RequestBody = never;
5268
- type RequestHeaders = {};
5269
- type ResponseBody = LocationSuggestionsResponse;
5388
+ type ResponseBody = PagedResponseOfLegalFormCatalogItemResponse;
5270
5389
  }
5271
5390
  /**
5272
- * @description Returns unique zip codes from addresses with pagination and optional search. Kostet 1 Credit.
5273
- * @tags Addresses
5274
- * @name V1AddressesZipcodesList
5275
- * @summary ZIP codes
5276
- * @request GET:/api/v1/addresses/zipcodes
5391
+ * @description Returns all courts with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
5392
+ * @tags Courts
5393
+ * @name V1CourtsList
5394
+ * @summary Court catalog
5395
+ * @request GET:/api/v1/courts
5277
5396
  * @secure
5278
5397
  */
5279
- namespace V1AddressesZipcodesList {
5398
+ namespace V1CourtsList {
5280
5399
  type RequestParams = {};
5281
5400
  type RequestQuery = {
5401
+ /** @maxLength 200 */
5282
5402
  search?: string;
5283
5403
  /**
5284
5404
  * 1-based page number; defaults to 1 when omitted.
@@ -5297,22 +5417,22 @@ export declare namespace Api {
5297
5417
  };
5298
5418
  type RequestBody = never;
5299
5419
  type RequestHeaders = {};
5300
- type ResponseBody = PagedResponseOfZipCodeResponse;
5420
+ type ResponseBody = PagedResponseOfCourtCatalogItemResponse;
5301
5421
  }
5302
5422
  /**
5303
- * @description The Gemeinde catalogue: one row per Austrian Gemeinde the register can address, with its official name, its URL slug, its Bundesland, the PLZ that resolve to it and the alias slugs that name it. This is the one source for a place's identity. The city column of an address is Firmenbuch free text and carries "Klagenfurt am Wörthersee", "Klagenfurt", "Klagenfurt-Viktring" and "Klagenfurt-Wölfnitz" side by side, so it cannot be a key; a Gemeinde is derived from the PLZ of the Geschäftsanschrift instead, and GET /businesses?gemeinde=<slug> answers every one of those spellings at once. Fold the zipCode buckets of GET /businesses/aggregate through zipCodes to count companies per Gemeinde. Unpaged and without a filter on purpose: 1.893 rows that change only with a new Gebietsstand, so one cacheable answer is cheaper for every caller than paging a list they all want whole. Companies with a foreign or unusable PLZ resolve to no Gemeinde and appear under none. Kostet 1 Credit.
5304
- * @tags Addresses
5305
- * @name V1AddressesGemeindenList
5306
- * @summary Gemeinden
5307
- * @request GET:/api/v1/addresses/gemeinden
5423
+ * @description Returns all assignment functions (code/text lookup) for display. Cached 24h. Kostet 1 Credit.
5424
+ * @tags AssignmentFunctions
5425
+ * @name V1AssignmentfunctionsList
5426
+ * @summary Assignment function catalog
5427
+ * @request GET:/api/v1/assignmentfunctions
5308
5428
  * @secure
5309
5429
  */
5310
- namespace V1AddressesGemeindenList {
5430
+ namespace V1AssignmentfunctionsList {
5311
5431
  type RequestParams = {};
5312
5432
  type RequestQuery = {};
5313
5433
  type RequestBody = never;
5314
5434
  type RequestHeaders = {};
5315
- type ResponseBody = GemeindeResponse[];
5435
+ type ResponseBody = AssignmentFunctionItemResponse[];
5316
5436
  }
5317
5437
  }
5318
5438
  export type QueryParamsType = Record<string | number, any>;
@@ -5375,7 +5495,7 @@ export declare class HttpClient<SecurityDataType = unknown> {
5375
5495
  request: <T = any, E = any>({ body, secure, path, type, query, format, baseUrl, cancelToken, ...params }: FullRequestParams) => Promise<HttpResponse<T, E>>;
5376
5496
  }
5377
5497
  /**
5378
- * @title UnternehmensScreener API
5498
+ * @title Firmenakte API
5379
5499
  * @version v1
5380
5500
  * @baseUrl https://api.firmenakte.at
5381
5501
  */
@@ -5490,255 +5610,53 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5490
5610
  * @request POST:/api/v1/lists/{id}/add
5491
5611
  * @secure
5492
5612
  */
5493
- v1ListsAddCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5494
- /**
5495
- * @description Takes the companies off the Liste and records them as removed. Kostet 1 Credit.
5496
- *
5497
- * @tags Lists
5498
- * @name V1ListsRemoveCreate
5499
- * @summary Remove companies from a Liste
5500
- * @request POST:/api/v1/lists/{id}/remove
5501
- * @secure
5502
- */
5503
- v1ListsRemoveCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5504
- /**
5505
- * @description Builds a CSV or an Excel workbook over the companies you name: an explicit set of FNRs, a Liste, or a saved Abfrage. Nothing is stored and no link is handed back: the CSV is written out as it is produced, the workbook is built in memory first. One export carries at most 1000 companies: a set of FNRs or a Liste that holds more is refused with a 400 rather than cut short, and a saved Abfrage exports its first 1000 matches. An export that would hold no rows answers 204 rather than an empty file. Kostet 3 Credits.
5506
- *
5507
- * @tags Exports
5508
- * @name V1ExportsBusinessesCreate
5509
- * @summary Export companies
5510
- * @request POST:/api/v1/exports/businesses
5511
- * @secure
5512
- */
5513
- v1ExportsBusinessesCreate: (data: ExportBusinessesRequest, params?: RequestParams) => Promise<HttpResponse<FileResult, ApiError | ProblemDetails>>;
5514
- /**
5515
- * @description Downloads the signed GISA PDF extract for a license (GISA-Zahl). Language defaults to German (De). Kostet 3 Credits.
5516
- *
5517
- * @tags Trades
5518
- * @name V1TradesDocumentsDetail
5519
- * @summary GISA PDF extract
5520
- * @request GET:/api/v1/trades/documents/{gisaZahl}
5521
- * @secure
5522
- */
5523
- v1TradesDocumentsDetail: (gisaZahl: number, query?: {
5524
- /** @default false */
5525
- historical?: boolean;
5526
- /** @default "De" */
5527
- language?: "De" | "En";
5528
- }, params?: RequestParams) => Promise<HttpResponse<Blob, ApiError | ProblemDetails>>;
5529
- /**
5530
- * @description Returns the global catalog of GISA Trade Definitions with pagination. Ohne API-Key abrufbar und kostet keine Credits.
5531
- *
5532
- * @tags Trades
5533
- * @name V1TradesList
5534
- * @summary GISA trade catalog
5535
- * @request GET:/api/v1/trades
5536
- * @secure
5537
- */
5538
- v1TradesList: (query?: {
5539
- search?: string;
5540
- /** @format int32 */
5541
- minCompanyCount?: number;
5542
- /**
5543
- * 1-based page number; defaults to 1 when omitted.
5544
- * @format int32
5545
- * @min 1
5546
- * @max 1000
5547
- */
5548
- page?: number;
5549
- /**
5550
- * Number of items per page; defaults to 10 when omitted.
5551
- * @format int32
5552
- * @min 1
5553
- * @max 100
5554
- */
5555
- pageSize?: number;
5556
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfTradeCatalogItemResponse, ApiError | ProblemDetails>>;
5557
- /**
5558
- * @description Returns all company licenses for a specific trade definition with pagination. Kostet 1 Credit.
5559
- *
5560
- * @tags Trades
5561
- * @name V1TradesLicensesList
5562
- * @summary Licenses by trade
5563
- * @request GET:/api/v1/trades/{tradeKey}/licenses
5564
- * @secure
5565
- */
5566
- v1TradesLicensesList: (tradeKey: number, query?: {
5567
- /**
5568
- * 1-based page number; defaults to 1 when omitted.
5569
- * @format int32
5570
- * @min 1
5571
- * @max 1000
5572
- */
5573
- page?: number;
5574
- /**
5575
- * Number of items per page; defaults to 10 when omitted.
5576
- * @format int32
5577
- * @min 1
5578
- * @max 100
5579
- */
5580
- pageSize?: number;
5581
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaLicense, ApiError | ProblemDetails>>;
5582
- /**
5583
- * @description Returns all licenses for a specific company (FNR). Kostet 1 Credit.
5584
- *
5585
- * @tags Trades
5586
- * @name V1TradesCompanyDetail
5587
- * @summary Company GISA licenses
5588
- * @request GET:/api/v1/trades/company/{fnr}
5589
- * @secure
5590
- */
5591
- v1TradesCompanyDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<GisaLicense[], ApiError | ProblemDetails>>;
5592
- /**
5593
- * @description Returns a single GISA change by id. Kostet 1 Credit.
5594
- *
5595
- * @tags Trades
5596
- * @name V1TradesChangesDetail
5597
- * @summary GISA change by id
5598
- * @request GET:/api/v1/trades/changes/{id}
5599
- * @secure
5600
- */
5601
- v1TradesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<GisaChange, ApiError | ProblemDetails>>;
5602
- /**
5603
- * @description Feed of GISA changes — one entry per change to a company's trade licences. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
5604
- *
5605
- * @tags Trades
5606
- * @name V1TradesChangesList
5607
- * @summary GISA change feed
5608
- * @request GET:/api/v1/trades/changes
5609
- * @secure
5610
- */
5611
- v1TradesChangesList: (query?: {
5612
- /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5613
- fnr?: string;
5614
- /**
5615
- * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
5616
- * @format date-time
5617
- */
5618
- since?: string;
5619
- /**
5620
- * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
5621
- * @format int64
5622
- */
5623
- sinceId?: number;
5624
- /**
5625
- * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
5626
- * @format int32
5627
- * @min 1
5628
- * @max 1000
5629
- */
5630
- page?: number;
5631
- /**
5632
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5633
- * @format int32
5634
- * @min 1
5635
- * @max 100
5636
- */
5637
- pageSize?: number;
5638
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaChange, ApiError | ProblemDetails>>;
5639
- /**
5640
- * @description The autocomplete read: /businesses and /people for one term, ranked together, so a search field costs one request per keystroke rather than two and does not have to merge two orders itself. Each row carries either business or person, whichever type names. Ordered by where the term sits in the name, then by the shorter name, then companies before people. pageSize is per side, so the answer holds up to twice as many rows. An empty search answers an empty list; use /businesses to page through the whole dataset. Ohne API-Key abrufbar und kostet keine Credits.
5641
- *
5642
- * @tags Search
5643
- * @name V1SearchList
5644
- * @summary Companies and people in one ranked list
5645
- * @request GET:/api/v1/search
5646
- * @secure
5647
- */
5648
- v1SearchList: (query?: {
5649
- /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
5650
- search?: string;
5651
- /**
5652
- * How many rows to take from each side before they are ranked together, so the answer holds at most twice this many; defaults to 10 when omitted.
5653
- * @format int32
5654
- * @min 1
5655
- * @max 100
5656
- */
5657
- pageSize?: number;
5658
- }, params?: RequestParams) => Promise<HttpResponse<SearchResponse, ApiError | ProblemDetails>>;
5613
+ v1ListsAddCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5659
5614
  /**
5660
- * @description Returns (id, name) pairs for all people with at least one business assignment. For client-side name index. Kostet 1 Credit.
5615
+ * @description Takes the companies off the Liste and records them as removed. Kostet 1 Credit.
5661
5616
  *
5662
- * @tags People
5663
- * @name V1PeopleNamesList
5664
- * @summary Person name index
5665
- * @request GET:/api/v1/people/names
5617
+ * @tags Lists
5618
+ * @name V1ListsRemoveCreate
5619
+ * @summary Remove companies from a Liste
5620
+ * @request POST:/api/v1/lists/{id}/remove
5666
5621
  * @secure
5667
5622
  */
5668
- v1PeopleNamesList: (params?: RequestParams) => Promise<HttpResponse<PersonNameItem[], ApiError | ProblemDetails>>;
5623
+ v1ListsRemoveCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5669
5624
  /**
5670
- * @description Lists people who hold a function in, or a GISA licence for, an Austrian company. name and search behave identically here — both split the term on spaces and keep people whose "firstName lastName" contains every token, case-insensitively — except that search wins when both are given. Ordered by last name, then first name unless orderBy says otherwise. Combine with fnr or businessName to get the officers of one company, or with functionCode for one role. fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte all describe one and the same assignment: a person comes back only if a single company of theirs satisfies every one of them. So the youngest owners of this year's new Viennese companies are one page: ?businessCity=Wien&businessRegisteredSince_gte=2026-01-01&functionCode=IN&functionCode=KP&functionCode=GS&functionCode=PG&orderBy=birthDate&orderByDescending=true&pageSize=3 A row's assignments are a sample, not the person's whole collection: at most 25, and only the ones matching the fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte you sent, so ?fnr=34853f gives you that company's row and nothing else. Ask GET /people/{personId} for all of them. Kostet 1 Credit.
5625
+ * @description Builds a CSV or an Excel workbook over the companies you name: an explicit set of FNRs, a Liste, or a saved Abfrage. Nothing is stored and no link is handed back: the CSV is written out as it is produced, the workbook is built in memory first. One export carries at most 1000 companies: a set of FNRs or a Liste that holds more is refused with a 400 rather than cut short, and a saved Abfrage exports its first 1000 matches. An export that would hold no rows answers 204 rather than an empty file. Kostet 3 Credits.
5671
5626
  *
5672
- * @tags People
5673
- * @name V1PeopleList
5674
- * @summary People search
5675
- * @request GET:/api/v1/people
5627
+ * @tags Exports
5628
+ * @name V1ExportsBusinessesCreate
5629
+ * @summary Export companies
5630
+ * @request POST:/api/v1/exports/businesses
5676
5631
  * @secure
5677
5632
  */
5678
- v1PeopleList: (query?: {
5679
- name?: string;
5680
- search?: string;
5681
- firstName?: string;
5682
- lastName?: string;
5683
- /** Only people holding one of these functions, e.g. IN, KP, GS and PG for the owner roles. Repeat the parameter for more than one code; they are ORed. Only a person's current role at a company counts — where the register filed several rows for them there, the newest (highest vnr) one is the one matched, so a GS later superseded by a GF no longer answers to functionCode=GS. */
5684
- functionCode?: string[];
5685
- businessName?: string;
5686
- /** Only people assigned to a company whose Geschäftsanschrift is in this city. Matched exactly (trimmed, case-insensitively), unlike city on /businesses, which is a substring match: businessCity=Wien does not return Wiener Neustadt. */
5687
- businessCity?: string;
5688
- /**
5689
- * Only people assigned to a company registered ("Eingetragen seit") on or after this date — the same fact as registeredSince_gte on /businesses. Companies whose registration date is unknown are excluded, as they are there.
5690
- * @format date-time
5691
- */
5692
- businessRegisteredSince_gte?: string;
5693
- /** Only people assigned to this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5694
- fnr?: string;
5695
- /** Only people who have an Edikt of their own — a notice in the Ediktsdatei filed against the person, which the edikte collection on the row carries. An Edikt against one of their companies does not count; that is hasEdikt on /businesses. */
5696
- hasEdikt?: boolean;
5697
- /** Sort key; only "birthDate" is supported. Omitted, people come back by last name, then first name. People whose birth date the register does not give sort last under orderByDescending=true. */
5698
- orderBy?: string;
5699
- /** If true, sort descending; with orderBy=birthDate that is the youngest first. */
5700
- orderByDescending?: boolean;
5701
- /**
5702
- * 1-based page number; defaults to 1 when omitted.
5703
- * @format int32
5704
- * @min 1
5705
- * @max 1000
5706
- */
5707
- page?: number;
5708
- /**
5709
- * Number of items per page; defaults to 10 when omitted.
5710
- * @format int32
5711
- * @min 1
5712
- * @max 100
5713
- */
5714
- pageSize?: number;
5715
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfPerson, ApiError | ProblemDetails>>;
5633
+ v1ExportsBusinessesCreate: (data: ExportBusinessesRequest, params?: RequestParams) => Promise<HttpResponse<FileResult, ApiError | ProblemDetails>>;
5716
5634
  /**
5717
- * @description Returns one person with every company function, GISA licence and Edikt attached to them. personId is the synthetic id described in the glossary — "firstname-lastname-birthdate", lower case, inner spaces replaced by hyphens and "x" for a part the register does not give, e.g. "max-mustermann-1970-01-01". It is matched exactly. Take it from a list row or from an assignment on a company rather than composing it yourself. An id beginning with "--" carries neither first nor last name, and that is not a person but the bucket every nameless assignment in the register lands in. It answers 404 like any id nobody holds, and it is left out of GET /people for the same reason. Kostet 1 Credit.
5635
+ * @description Downloads the signed GISA PDF extract for a license (GISA-Zahl). Language defaults to German (De). Kostet 3 Credits.
5718
5636
  *
5719
- * @tags People
5720
- * @name V1PeopleDetail
5721
- * @summary Person detail
5722
- * @request GET:/api/v1/people/{personId}
5637
+ * @tags Trades
5638
+ * @name V1TradesDocumentsDetail
5639
+ * @summary GISA PDF extract
5640
+ * @request GET:/api/v1/trades/documents/{gisaZahl}
5723
5641
  * @secure
5724
5642
  */
5725
- v1PeopleDetail: (personId: string, params?: RequestParams) => Promise<HttpResponse<PersonDetailResponse, ApiError | ProblemDetails>>;
5643
+ v1TradesDocumentsDetail: (gisaZahl: number, query?: {
5644
+ /** @default false */
5645
+ historical?: boolean;
5646
+ /** @default "De" */
5647
+ language?: "De" | "En";
5648
+ }, params?: RequestParams) => Promise<HttpResponse<Blob, ApiError | ProblemDetails>>;
5726
5649
  /**
5727
- * @description Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first. Ohne API-Key abrufbar und kostet keine Credits.
5650
+ * @description Returns the global catalog of GISA Trade Definitions with pagination. Kostet 1 Credit.
5728
5651
  *
5729
- * @tags Oenace
5730
- * @name V1OenaceList
5731
- * @summary OeNACE classification catalog
5732
- * @request GET:/api/v1/oenace
5652
+ * @tags Trades
5653
+ * @name V1TradesList
5654
+ * @summary GISA trade catalog
5655
+ * @request GET:/api/v1/trades
5733
5656
  * @secure
5734
5657
  */
5735
- v1OenaceList: (query?: {
5658
+ v1TradesList: (query?: {
5736
5659
  search?: string;
5737
- /**
5738
- * Filter by hierarchy level (1–5). Omit to return all levels.
5739
- * @format int32
5740
- */
5741
- ebene?: number;
5742
5660
  /** @format int32 */
5743
5661
  minCompanyCount?: number;
5744
5662
  /**
@@ -5755,19 +5673,17 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5755
5673
  * @max 100
5756
5674
  */
5757
5675
  pageSize?: number;
5758
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfOenaceCatalogItemResponse, ApiError | ProblemDetails>>;
5676
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfTradeCatalogItemResponse, ApiError | ProblemDetails>>;
5759
5677
  /**
5760
- * @description Returns all legal forms with pagination and optional search, sorted by business count descending. Ohne API-Key abrufbar und kostet keine Credits.
5678
+ * @description Returns all company licenses for a specific trade definition with pagination. Kostet 1 Credit.
5761
5679
  *
5762
- * @tags LegalForms
5763
- * @name V1LegalformsList
5764
- * @summary Legal form catalog
5765
- * @request GET:/api/v1/legalforms
5680
+ * @tags Trades
5681
+ * @name V1TradesLicensesList
5682
+ * @summary Licenses by trade
5683
+ * @request GET:/api/v1/trades/{tradeKey}/licenses
5766
5684
  * @secure
5767
5685
  */
5768
- v1LegalformsList: (query?: {
5769
- /** @maxLength 200 */
5770
- search?: string;
5686
+ v1TradesLicensesList: (tradeKey: number, query?: {
5771
5687
  /**
5772
5688
  * 1-based page number; defaults to 1 when omitted.
5773
5689
  * @format int32
@@ -5782,32 +5698,37 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5782
5698
  * @max 100
5783
5699
  */
5784
5700
  pageSize?: number;
5785
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfLegalFormCatalogItemResponse, ApiError | ProblemDetails>>;
5701
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaLicense, ApiError | ProblemDetails>>;
5786
5702
  /**
5787
- * @description Returns the graph (nodes and edges) within 2 hops of the start entity. Exactly one of personId or fnr must be provided. The network of people and companies around one starting point — who sits on which board with whom. nodes are people ("person") and companies ("business"), each carrying the id you would pass to /people/{personId} or /businesses/{fnr}; edges are source/target pairs of those ids whose relationshipType is "assignment", a person holding a function in a company. Two further edge types the deployment can enable: "address", two companies registered at the same street address, and "ownership", a company holding shares in another — source is the shareholder, target the company it holds, and capitalAmount, currency and sharePercent carry the stake where the register gives one. Ownership edges are drawn only for companies crawled since the shareholder mapping went live, so a company not yet re-crawled reports none rather than implying it has none. The traversal depth is fixed at 2 hops and is not a parameter — a node with further connections outside that boundary carries hasMore=true, and isCentralNode marks the entity you started from. personId and fnr are mutually exclusive, not combinable: supplying both, or neither, is a 400, and an id that exists in neither register is a 404. Kostet 3 Credits.
5703
+ * @description Returns all licenses for a specific company (FNR). Kostet 1 Credit.
5788
5704
  *
5789
- * @tags Graph
5790
- * @name V1GraphList
5791
- * @summary Relationship graph
5792
- * @request GET:/api/v1/graph
5705
+ * @tags Trades
5706
+ * @name V1TradesCompanyDetail
5707
+ * @summary Company GISA licenses
5708
+ * @request GET:/api/v1/trades/company/{fnr}
5793
5709
  * @secure
5794
5710
  */
5795
- v1GraphList: (query?: {
5796
- /** Start from this person. Mutually exclusive with fnr. */
5797
- personId?: string;
5798
- /** Start from this company. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company; case is not folded. Mutually exclusive with personId. */
5799
- fnr?: string;
5800
- }, params?: RequestParams) => Promise<HttpResponse<GraphResponse, ApiError | ProblemDetails>>;
5711
+ v1TradesCompanyDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<GisaLicense[], ApiError | ProblemDetails>>;
5801
5712
  /**
5802
- * @description The single feed of every change across all registers — Firmenbuch, GISA, Ediktsdatei and the BMF Scheinunternehmen list — as lightweight reference rows. Each row carries only id, fnr, changeType and the dates; fetch the payload with GET /globalchanges/{id}, or poll one register's typed feed instead (/businesses/changes, /documents/changes, /edikte/changes, /trades/changes). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. Kostet 1 Credit.
5713
+ * @description Returns a single GISA change by id. Kostet 1 Credit.
5803
5714
  *
5804
- * @tags GlobalChanges
5805
- * @name V1GlobalchangesList
5806
- * @summary All-register change feed
5807
- * @request GET:/api/v1/globalchanges
5715
+ * @tags Trades
5716
+ * @name V1TradesChangesDetail
5717
+ * @summary GISA change by id
5718
+ * @request GET:/api/v1/trades/changes/{id}
5808
5719
  * @secure
5809
5720
  */
5810
- v1GlobalchangesList: (query?: {
5721
+ v1TradesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<GisaChange, ApiError | ProblemDetails>>;
5722
+ /**
5723
+ * @description Feed of GISA changes — one entry per change to a company's trade licences. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
5724
+ *
5725
+ * @tags Trades
5726
+ * @name V1TradesChangesList
5727
+ * @summary GISA change feed
5728
+ * @request GET:/api/v1/trades/changes
5729
+ * @secure
5730
+ */
5731
+ v1TradesChangesList: (query?: {
5811
5732
  /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5812
5733
  fnr?: string;
5813
5734
  /**
@@ -5834,41 +5755,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5834
5755
  * @max 100
5835
5756
  */
5836
5757
  pageSize?: number;
5837
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGlobalChange, ApiError | ProblemDetails>>;
5838
- /**
5839
- * @description Changes for a watchlist of companies, all four change types in one unpaged response. Built for watchlist polling: pass up to 1000 fnr values (repeat the parameter) and one cursor, and get back four arrays — businessChanges, documentChanges, ediktChanges, globalChanges — each ordered by ascending id and capped at maxResultsPerType. Not paged: raise maxResultsPerType or advance sinceId instead. sinceId is exclusive and since is inclusive, exactly as on the paged feeds, but one sinceId covers all four arrays: an array that comes back full at maxResultsPerType has more behind it and bounds the cursor, so advance sinceId only to the lowest of the full arrays' highest ids, and to the highest id of all four once none comes back full. Passing no fnr returns four empty arrays, not the whole feed. Kostet 3 Credits.
5840
- *
5841
- * @tags GlobalChanges
5842
- * @name V1GlobalchangesAggregatedList
5843
- * @summary Aggregated watchlist changes
5844
- * @request GET:/api/v1/globalchanges/aggregated
5845
- * @secure
5846
- */
5847
- v1GlobalchangesAggregatedList: (query?: {
5848
- /** Firmenbuch numbers to fetch changes for. Max 1000 items. Each is normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5849
- fnr?: string[];
5850
- /** @format date-time */
5851
- since?: string;
5852
- /** @format int64 */
5853
- sinceId?: number;
5854
- /**
5855
- * Max number of changes to return per type. Default 500, max 2000.
5856
- * @format int32
5857
- * @min 1
5858
- * @max 2000
5859
- */
5860
- maxResultsPerType?: number;
5861
- }, params?: RequestParams) => Promise<HttpResponse<AggregatedChangesResponse, ApiError | ProblemDetails>>;
5862
- /**
5863
- * @description Returns one change with its typed payload, whichever register it came from. The envelope is a discriminator plus the payload: changeType says which register, and data is the matching object — a BusinessChange, DocumentChange, EdiktChange, GisaChange, FoerderungChange or ScheinunternehmenChange. Since data is a union, read changeType before it. Kostet 1 Credit.
5864
- *
5865
- * @tags GlobalChanges
5866
- * @name V1GlobalchangesDetail
5867
- * @summary Change by id
5868
- * @request GET:/api/v1/globalchanges/{id}
5869
- * @secure
5870
- */
5871
- v1GlobalchangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<ChangeDetailResponse, ApiError | ProblemDetails>>;
5758
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaChange, ApiError | ProblemDetails>>;
5872
5759
  /**
5873
5760
  * @description Kostet 1 Credit.
5874
5761
  *
@@ -5906,93 +5793,36 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5906
5793
  * @format int32
5907
5794
  * @min 1
5908
5795
  * @max 1000
5909
- */
5910
- page?: number;
5911
- /**
5912
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5913
- * @format int32
5914
- * @min 1
5915
- * @max 100
5916
- */
5917
- pageSize?: number;
5918
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfFoerderungChange, ApiError | ProblemDetails>>;
5919
- /**
5920
- * @description Returns one Ediktsdatei change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "edikt" answers 404 here. Kostet 1 Credit.
5921
- *
5922
- * @tags Edikte
5923
- * @name V1EdikteChangesDetail
5924
- * @summary Edikt change by id
5925
- * @request GET:/api/v1/edikte/changes/{id}
5926
- * @secure
5927
- */
5928
- v1EdikteChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<EdiktChange, ApiError | ProblemDetails>>;
5929
- /**
5930
- * @description Feed of Ediktsdatei changes — insolvency and other court notices published about a company or a person. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the publication date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss an insolvency notice resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
5931
- *
5932
- * @tags Edikte
5933
- * @name V1EdikteChangesList
5934
- * @summary Ediktsdatei change feed
5935
- * @request GET:/api/v1/edikte/changes
5936
- * @secure
5937
- */
5938
- v1EdikteChangesList: (query?: {
5939
- /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5940
- fnr?: string;
5941
- /**
5942
- * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
5943
- * @format date-time
5944
- */
5945
- since?: string;
5946
- /**
5947
- * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
5948
- * @format int64
5949
- */
5950
- sinceId?: number;
5951
- /**
5952
- * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
5953
- * @format int32
5954
- * @min 1
5955
- * @max 1000
5956
- */
5957
- page?: number;
5958
- /**
5959
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5960
- * @format int32
5961
- * @min 1
5962
- * @max 100
5963
- */
5964
- pageSize?: number;
5965
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfEdiktChange, ApiError | ProblemDetails>>;
5966
- /**
5967
- * @description Downloads a Firmenbuch document (PDF/XML) by its document key. Kostet 3 Credits.
5968
- *
5969
- * @tags Documents
5970
- * @name V1DocumentsDownloadDetail
5971
- * @summary Firmenbuch document download
5972
- * @request GET:/api/v1/documents/download/{documentKey}
5973
- * @secure
5974
- */
5975
- v1DocumentsDownloadDetail: (documentKey: string, params?: RequestParams) => Promise<HttpResponse<void, string | ApiError | ProblemDetails>>;
5796
+ */
5797
+ page?: number;
5798
+ /**
5799
+ * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5800
+ * @format int32
5801
+ * @min 1
5802
+ * @max 100
5803
+ */
5804
+ pageSize?: number;
5805
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfFoerderungChange, ApiError | ProblemDetails>>;
5976
5806
  /**
5977
- * @description Returns one document change by id, with the document's metadata. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "document" answers 404 here. Kostet 1 Credit.
5807
+ * @description Returns one Ediktsdatei change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "edikt" answers 404 here. Kostet 1 Credit.
5978
5808
  *
5979
- * @tags Documents
5980
- * @name V1DocumentsChangesDetail
5981
- * @summary Document change by id
5982
- * @request GET:/api/v1/documents/changes/{id}
5809
+ * @tags Edikte
5810
+ * @name V1EdikteChangesDetail
5811
+ * @summary Edikt change by id
5812
+ * @request GET:/api/v1/edikte/changes/{id}
5983
5813
  * @secure
5984
5814
  */
5985
- v1DocumentsChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<DocumentChange, ApiError | ProblemDetails>>;
5815
+ v1EdikteChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<EdiktChange, ApiError | ProblemDetails>>;
5986
5816
  /**
5987
- * @description Feed of newly filed Firmenbuch documents — this is how you learn that a company has published a new Jahresabschluss. Each entry names a documentKey; fetch the file itself with GET /documents/download/{documentKey}. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the document date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
5817
+ * @description Feed of Ediktsdatei changes — insolvency and other court notices published about a company or a person. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the publication date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss an insolvency notice resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
5988
5818
  *
5989
- * @tags Documents
5990
- * @name V1DocumentsChangesList
5991
- * @summary Document change feed
5992
- * @request GET:/api/v1/documents/changes
5819
+ * @tags Edikte
5820
+ * @name V1EdikteChangesList
5821
+ * @summary Ediktsdatei change feed
5822
+ * @request GET:/api/v1/edikte/changes
5993
5823
  * @secure
5994
5824
  */
5995
- v1DocumentsChangesList: (query?: {
5825
+ v1EdikteChangesList: (query?: {
5996
5826
  /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5997
5827
  fnr?: string;
5998
5828
  /**
@@ -6019,19 +5849,45 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6019
5849
  * @max 100
6020
5850
  */
6021
5851
  pageSize?: number;
6022
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfDocumentChange, ApiError | ProblemDetails>>;
5852
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfEdiktChange, ApiError | ProblemDetails>>;
6023
5853
  /**
6024
- * @description Returns all courts with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
5854
+ * @description Returns (id, name) pairs for all people with at least one business assignment. For client-side name index. id is the person's Firmenakte-ID, e.g. "P-7K3M-QX91". Kostet 1 Credit.
6025
5855
  *
6026
- * @tags Courts
6027
- * @name V1CourtsList
6028
- * @summary Court catalog
6029
- * @request GET:/api/v1/courts
5856
+ * @tags People
5857
+ * @name V1PeopleNamesList
5858
+ * @summary Person name index
5859
+ * @request GET:/api/v1/people/names
6030
5860
  * @secure
6031
5861
  */
6032
- v1CourtsList: (query?: {
6033
- /** @maxLength 200 */
5862
+ v1PeopleNamesList: (params?: RequestParams) => Promise<HttpResponse<PersonNameItem[], ApiError | ProblemDetails>>;
5863
+ /**
5864
+ * @description Lists people who hold a function in, or a GISA licence for, an Austrian company. name and search behave identically here — both split the term on spaces and keep people whose "firstName lastName" contains every token, case-insensitively — except that search wins when both are given. Ordered by last name, then first name. Combine with fnr or businessName to get the officers of one company, or with functionCode for one role. Each row's id is the person's Firmenakte-ID, the id GET /people/{personId} takes. fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte all describe one and the same assignment: a person comes back only if a single company of theirs satisfies every one of them. So the owners of this year's new Viennese companies are one query: ?businessCity=Wien&businessRegisteredSince_gte=2026-01-01&functionCode=IN&functionCode=KP&functionCode=GS&functionCode=PG A row's assignments are a sample, not the person's whole collection: at most 25, and only the ones matching the fnr, functionCode, businessName, businessCity and businessRegisteredSince_gte you sent, so ?fnr=34853f gives you that company's row and nothing else. Ask GET /people/{personId} for all of them. Kostet 1 Credit.
5865
+ *
5866
+ * @tags People
5867
+ * @name V1PeopleList
5868
+ * @summary People search
5869
+ * @request GET:/api/v1/people
5870
+ * @secure
5871
+ */
5872
+ v1PeopleList: (query?: {
5873
+ name?: string;
6034
5874
  search?: string;
5875
+ firstName?: string;
5876
+ lastName?: string;
5877
+ /** Only people holding one of these functions, e.g. IN, KP, GS and PG for the owner roles. Repeat the parameter for more than one code; they are ORed. Only a person's current role at a company counts — where the register filed several rows for them there, the newest (highest vnr) one is the one matched, so a GS later superseded by a GF no longer answers to functionCode=GS. */
5878
+ functionCode?: string[];
5879
+ businessName?: string;
5880
+ /** Only people assigned to a company whose Geschäftsanschrift is in this city. Matched exactly (trimmed, case-insensitively), unlike city on /businesses, which is a substring match: businessCity=Wien does not return Wiener Neustadt. */
5881
+ businessCity?: string;
5882
+ /**
5883
+ * Only people assigned to a company registered ("Eingetragen seit") on or after this date — the same fact as registeredSince_gte on /businesses. Companies whose registration date is unknown are excluded, as they are there.
5884
+ * @format date-time
5885
+ */
5886
+ businessRegisteredSince_gte?: string;
5887
+ /** Only people assigned to this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
5888
+ fnr?: string;
5889
+ /** Only people who have an Edikt of their own — a notice in the Ediktsdatei filed against the person, which the edikte collection on the row carries. An Edikt against one of their companies does not count; that is hasEdikt on /businesses. */
5890
+ hasEdikt?: boolean;
6035
5891
  /**
6036
5892
  * 1-based page number; defaults to 1 when omitted.
6037
5893
  * @format int32
@@ -6046,7 +5902,17 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6046
5902
  * @max 100
6047
5903
  */
6048
5904
  pageSize?: number;
6049
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCourtCatalogItemResponse, ApiError | ProblemDetails>>;
5905
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfPerson, ApiError | ProblemDetails>>;
5906
+ /**
5907
+ * @description Returns one person with every company function, GISA licence and Edikt attached to them. personId is the person's Firmenakte-ID as the glossary describes it, e.g. "P-7K3M-QX91", the id every list row, assignment and graph node carries. Take it from there rather than composing it yourself. Only that spelling answers. Any other spelling of the same Firmenakte-ID ("p7k3mqx91"), and the "vorname-nachname-…" id people carried before, answer one 308 whose relative Location is the canonical form. A Firmenakte-ID with a wrong check character, and an id nobody holds, answer 404; so does the bucket every nameless assignment in the register lands in, which is not a person. Kostet 1 Credit.
5908
+ *
5909
+ * @tags People
5910
+ * @name V1PeopleDetail
5911
+ * @summary Person detail
5912
+ * @request GET:/api/v1/people/{personId}
5913
+ * @secure
5914
+ */
5915
+ v1PeopleDetail: (personId: string, params?: RequestParams) => Promise<HttpResponse<PersonDetailResponse, ApiError | ProblemDetails>>;
6050
5916
  /**
6051
5917
  * @description Resolve company names to FNRs by exact name match (1:1). Used for CSV import. Kostet 1 Credit.
6052
5918
  *
@@ -6058,7 +5924,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6058
5924
  */
6059
5925
  v1BusinessesResolveNamesCreate: (data: ResolveBusinessNamesRequest, params?: RequestParams) => Promise<HttpResponse<ResolveBusinessNamesResponse, ApiError | ProblemDetails>>;
6060
5926
  /**
6061
- * @description Lists companies matching the filters, one page of list rows per call. name and search are different tools. name is a case-insensitive substring match on the company name and nothing else. search splits the term on spaces and keeps only companies matching every token, where a token matches the name, the fnr, or — when the whole term is a number — a GISA licence key or GISA-Zahl; it additionally lifts companies whose name starts with the term to the top of the default (name) ordering. So name narrows a known name, search finds an unknown one. Inactive companies always sort after active ones, whatever orderBy says. inInsolvency is a Firmenbuch evidence filter, not an Ediktsdatei or Insolvenzdatei one. True matches a classified open court record or an active administrator role (MW, IW, AW, VW). False includes closed evidence without an active role, missing evidence and unclassified or uncertain evidence without another opening or role. Omit the parameter to leave this state unfiltered. A false value means no current positive evidence in this dataset, not verified legal assurance that no proceeding exists. The proceedings are published in the Insolvenzdatei, which this API does not read. Examples: ?inInsolvency=true; ?inInsolvency=false&name=Graf; ?inInsolvency=true&countOnly=true. The same values combine with every other filter. Pass countOnly=true for totalRecords without the rows, and use /businesses/aggregate to group the same filter set instead of paging through it. Place filters: the Firmenbuch records no Bundesland and no Gemeinde, only the Sitzgericht, so both state and gemeinde are derived from the PLZ of the Geschäftsanschrift. state is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich and are counted as Salzburg. gemeinde takes the slug of a Gemeinde, and because it reads the PLZ it answers every spelling of a place at once — "Klagenfurt am Wörthersee", "Klagenfurt" and "Klagenfurt-Viktring" are one Gemeinde, where city= would be three separate filters over free text. GET /addresses/gemeinden is the catalogue of the slugs, their aliases, their Bundesland and their PLZ; a company with a foreign or unusable PLZ is in no Gemeinde and no gemeinde= filter finds it. Ohne API-Key abrufbar und kostet keine Credits.
5927
+ * @description Lists companies matching the filters, one page of list rows per call. name and search are different tools. name is a case-insensitive substring match on the company name and nothing else. search splits the term on spaces and keeps only companies matching every token, where a token matches the name, the fnr, or — when the whole term is a number — a GISA licence key or GISA-Zahl; it additionally lifts companies whose name starts with the term to the top of the default (name) ordering. So name narrows a known name, search finds an unknown one. Inactive companies always sort after active ones, whatever orderBy says. inInsolvency is a Firmenbuch evidence filter, not an Ediktsdatei or Insolvenzdatei one. True matches a classified open court record or an active administrator role (MW, IW, AW, VW). False includes closed evidence without an active role, missing evidence and unclassified or uncertain evidence without another opening or role. Omit the parameter to leave this state unfiltered. A false value means no current positive evidence in this dataset, not verified legal assurance that no proceeding exists. The proceedings are published in the Insolvenzdatei, which this API does not read. Examples: ?inInsolvency=true; ?inInsolvency=false&name=Graf; ?inInsolvency=true&countOnly=true. The same values combine with every other filter. Pass countOnly=true for totalRecords without the rows, and use /businesses/aggregate to group the same filter set instead of paging through it. Place filters: the Firmenbuch records no Bundesland and no Gemeinde, only the Sitzgericht, so both state and gemeinde are derived from the PLZ of the Geschäftsanschrift: the PLZ names a Gemeinde, and state is that Gemeinde's Land, so the Innviertel PLZ 5120–5399 are in Oberösterreich. gemeinde takes the slug of a Gemeinde, and because it reads the PLZ it answers every spelling of a place at once — "Klagenfurt am Wörthersee", "Klagenfurt" and "Klagenfurt-Viktring" are one Gemeinde, where city= would be three separate filters over free text. GET /addresses/gemeinden is the catalogue of the slugs, their aliases, their Bundesland and their PLZ; a company with a foreign or unusable PLZ is in no Gemeinde and no gemeinde= filter finds it. Kostet 1 Credit.
6062
5928
  *
6063
5929
  * @tags Businesses
6064
5930
  * @name V1BusinessesList
@@ -6623,7 +6489,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6623
6489
  "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
6624
6490
  }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessListResponse, ApiError | ProblemDetails>>;
6625
6491
  /**
6626
- * @description Returns all business (fnr, name) pairs for client-side name index. No pagination. Ohne API-Key abrufbar und kostet keine Credits.
6492
+ * @description Returns all business (fnr, name) pairs for client-side name index. No pagination. Kostet 1 Credit.
6627
6493
  *
6628
6494
  * @tags Businesses
6629
6495
  * @name V1BusinessesNamesList
@@ -7222,7 +7088,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7222
7088
  "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
7223
7089
  }, params?: RequestParams) => Promise<HttpResponse<BusinessAggregateResponse, ApiError | ProblemDetails>>;
7224
7090
  /**
7225
- * @description Counts for every value of every filter group at once — what a filter builder puts on its chips. Takes the same filters as GET /businesses and means them the same way; page, pageSize, orderBy, orderByDescending and countOnly are ignored. Faceted semantics: a group is counted with all *other* active filters applied but its own lifted, so a value's count answers "how many results if I also select this", and selecting one never empties its own group. totalRecords is the current result count, with every filter applied. Each group returns its top values (top, default 10) plus every value the request already filters on, marked selected — a "Mehr" expander is a second call for that one group with a larger top, e.g. ?groups=city&top=50. city and zipCode count a business once per distinct value, so those counts can sum above totalRecords. One caveat worth knowing before wiring a chip up: the city filter matches a substring, while a city facet key is a whole city name, so selecting "Wien" also keeps "Wien-Umgebung" and can return more than the chip promised. Every other group matches its key exactly. Every group costs its own count, so ask for the groups you are rendering rather than all ten; the answer is cacheable for a day and varies on the whole query string. Ohne API-Key abrufbar und kostet keine Credits.
7091
+ * @description Counts for every value of every filter group at once — what a filter builder puts on its chips. Takes the same filters as GET /businesses and means them the same way; page, pageSize, orderBy, orderByDescending and countOnly are ignored. Faceted semantics: a group is counted with all *other* active filters applied but its own lifted, so a value's count answers "how many results if I also select this", and selecting one never empties its own group. totalRecords is the current result count, with every filter applied. Each group returns its top values (top, default 10) plus every value the request already filters on, marked selected — a "Mehr" expander is a second call for that one group with a larger top, e.g. ?groups=city&top=50. city and zipCode count a business once per distinct value, so those counts can sum above totalRecords. One caveat worth knowing before wiring a chip up: the city filter matches a substring, while a city facet key is a whole city name, so selecting "Wien" also keeps "Wien-Umgebung" and can return more than the chip promised. Every other group matches its key exactly. Every group costs its own count, so ask for the groups you are rendering rather than all ten; the answer is cacheable for a day and varies on the whole query string. Kostet 1 Credit.
7226
7092
  *
7227
7093
  * @tags Businesses
7228
7094
  * @name V1BusinessesFacetsList
@@ -7231,7 +7097,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7231
7097
  * @secure
7232
7098
  */
7233
7099
  v1BusinessesFacetsList: (query?: {
7234
- /** Groups to count; all of them when omitted. One or more of city, zipCode, legalFormCode, courtCode, oenaceCode, gisaLicenseKey, active, hasEdikt, isScheinunternehmen, kennzahl. */
7100
+ /** Groups to count; all of them when omitted. One or more of city, zipCode, legalFormCode, courtCode, oenaceCode, gisaLicenseKey, active, hasEdikt, isScheinunternehmen, inInsolvency, kennzahl. */
7235
7101
  groups?: string[];
7236
7102
  /**
7237
7103
  * Values per group, largest count first. The status and kennzahl groups are complete lists and ignore it. A "Mehr" expander is a second call for the one group with a larger top.
@@ -7796,7 +7662,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7796
7662
  "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
7797
7663
  }, params?: RequestParams) => Promise<HttpResponse<BusinessFacetsResponse, ApiError | ProblemDetails>>;
7798
7664
  /**
7799
- * @description The single largest company of every place in the viewport, by one metric — what a map draws as one pin per place instead of every dot in the box. groupBy picks the place: state (the nine Bundesländer, the default) or city (the towns in view). metric is one of detailViews (Aufrufe), bilanzSumme or employees (Mitarbeiter). minLat, maxLat, minLng and maxLng are required for groupBy=city and ignored for groupBy=state: the nine Bundesländer are the same nine wherever the map is looking, so that call takes no viewport at all — which is what lets one URL serve every pan and actually be cached, here and in the browser. Every /businesses filter additionally applies and means exactly what it means there; page, pageSize, orderBy, orderByDescending and countOnly are ignored. groupLabel is the place's name — "Tirol", "Innsbruck" — and is what the pin's card is headed with. A company carrying no value for the metric is skipped rather than counted as 0, so a place holding only such companies — like an empty one — returns nothing at all and the array is shorter than the number of places. Each item carries everything a popover card shows, so no second call per pin is needed. groupBy=city answers at most 16 pins, the biggest of the towns in view; the rest is what zooming in is for. Bundesländer are derived from the PLZ of the Geschäftsanschrift, the same rule the state filter on GET /businesses uses, because the Firmenbuch carries no Land. A company that is the biggest of two places in view wins both, each pin carrying an address that is actually on screen and in the town it won. Cached for an hour rather than the day GET /businesses gets: view counts move. Ohne API-Key abrufbar und kostet keine Credits.
7665
+ * @description The single largest company of every place in the viewport, by one metric — what a map draws as one pin per place instead of every dot in the box. groupBy picks the place: state (the nine Bundesländer, the default) or city (the towns in view). metric is one of detailViews (Aufrufe), bilanzSumme or employees (Mitarbeiter). minLat, maxLat, minLng and maxLng are required for groupBy=city and ignored for groupBy=state: the nine Bundesländer are the same nine wherever the map is looking, so that call takes no viewport at all — which is what lets one URL serve every pan and actually be cached, here and in the browser. Every /businesses filter additionally applies and means exactly what it means there; page, pageSize, orderBy, orderByDescending and countOnly are ignored. groupLabel is the place's name — "Tirol", "Innsbruck" — and is what the pin's card is headed with. A company carrying no value for the metric is skipped rather than counted as 0, so a place holding only such companies — like an empty one — returns nothing at all and the array is shorter than the number of places. Each item carries everything a popover card shows, so no second call per pin is needed. groupBy=city answers at most 16 pins, the biggest of the towns in view; the rest is what zooming in is for. Bundesländer are derived from the PLZ of the Geschäftsanschrift, the same rule the state filter on GET /businesses uses, because the Firmenbuch carries no Land. A company that is the biggest of two places in view wins both, each pin carrying an address that is actually on screen and in the town it won. Cached for an hour rather than the day GET /businesses gets: view counts move. Kostet 1 Credit.
7800
7666
  *
7801
7667
  * @tags Businesses
7802
7668
  * @name V1BusinessesMapTopList
@@ -8354,76 +8220,311 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8354
8220
  */
8355
8221
  "guv.WarenUndMaterialeinkauf_lte"?: number | null;
8356
8222
  /**
8357
- * Lower bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
8358
- * @format decimal
8223
+ * Lower bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
8224
+ * @format decimal
8225
+ */
8226
+ "guv.ZinsenUndAehnlicheAufwendungen_gte"?: number | null;
8227
+ /**
8228
+ * Upper bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
8229
+ * @format decimal
8230
+ */
8231
+ "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
8232
+ }, params?: RequestParams) => Promise<HttpResponse<BusinessMapTopItem[], ApiError | ProblemDetails>>;
8233
+ /**
8234
+ * @description Active businesses similar to the given one (same OeNACE branch, same region preferred). Kostet 3 Credits.
8235
+ *
8236
+ * @tags Businesses
8237
+ * @name V1BusinessesSimilarList
8238
+ * @summary Similar companies
8239
+ * @request GET:/api/v1/businesses/{fnr}/similar
8240
+ * @secure
8241
+ */
8242
+ v1BusinessesSimilarList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessListResponse[], ApiError | ProblemDetails>>;
8243
+ /**
8244
+ * @description Returns the whole Firmenakte of one company: master data, addresses, people, GISA licences, Edikte, documents and the parsed annual accounts. fnr is matched exactly against the stored, normalised Firmenbuchnummer — lower case, no spaces, no leading zeros and no "FN" prefix, e.g. 34853f. Nothing is normalised on the way in, so "FN 34853 f" answers 404 rather than the company. 404 also means the company is not in the dataset yet. Kostet 1 Credit.
8245
+ *
8246
+ * @tags Businesses
8247
+ * @name V1BusinessesDetail
8248
+ * @summary Company Firmenakte
8249
+ * @request GET:/api/v1/businesses/{fnr}
8250
+ * @secure
8251
+ */
8252
+ v1BusinessesDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessDetailResponse, ApiError | ProblemDetails>>;
8253
+ /**
8254
+ * @description Every parsed Jahresabschluss of one company, one entry per fiscal closing date, newest first. The Firmenakte itself (GET /businesses/{fnr}) carries only the last five periods. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
8255
+ *
8256
+ * @tags Businesses
8257
+ * @name V1BusinessesJahresabschluesseList
8258
+ * @summary Company annual accounts
8259
+ * @request GET:/api/v1/businesses/{fnr}/jahresabschluesse
8260
+ * @secure
8261
+ */
8262
+ v1BusinessesJahresabschluesseList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<ParsedJahresabschlussDto[], ApiError | ProblemDetails>>;
8263
+ /**
8264
+ * @description The state aid published for one company by the Transparenzportal des BMF (§ 40k TDBG), newest year first and the largest amount first within a year, plus a summary of count, sum, the years and the freshest Stichtag. Published are Leistungen from 1.500 € per calendar year to non-natural persons; the COVID-19 reports start at 10.000 €. So an empty list means "nothing published for this company", never "this company received nothing" — and a company the portal names but that could not be matched to a Firmenbuchnummer is not here either. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
8265
+ *
8266
+ * @tags Businesses
8267
+ * @name V1BusinessesFoerderungenList
8268
+ * @summary Company Foerderungen
8269
+ * @request GET:/api/v1/businesses/{fnr}/foerderungen
8270
+ * @secure
8271
+ */
8272
+ v1BusinessesFoerderungenList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessFoerderungenResponse, ApiError | ProblemDetails>>;
8273
+ /**
8274
+ * @description Returns one Firmenbuch change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "business" answers 404 here. Kostet 1 Credit.
8275
+ *
8276
+ * @tags Businesses
8277
+ * @name V1BusinessesChangesDetail
8278
+ * @summary Firmenbuch change by id
8279
+ * @request GET:/api/v1/businesses/changes/{id}
8280
+ * @secure
8281
+ */
8282
+ v1BusinessesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<BusinessChange, ApiError | ProblemDetails>>;
8283
+ /**
8284
+ * @description Feed of Firmenbuch changes — one entry per new legal record (Eintragung). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate — so a back-dated entry is not missed — and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Use GET /globalchanges for the same feed across all four registers. Kostet 1 Credit.
8285
+ *
8286
+ * @tags Businesses
8287
+ * @name V1BusinessesChangesList
8288
+ * @summary Firmenbuch change feed
8289
+ * @request GET:/api/v1/businesses/changes
8290
+ * @secure
8291
+ */
8292
+ v1BusinessesChangesList: (query?: {
8293
+ /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
8294
+ fnr?: string;
8295
+ /**
8296
+ * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
8297
+ * @format date-time
8298
+ */
8299
+ since?: string;
8300
+ /**
8301
+ * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
8302
+ * @format int64
8303
+ */
8304
+ sinceId?: number;
8305
+ /**
8306
+ * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
8307
+ * @format int32
8308
+ * @min 1
8309
+ * @max 1000
8310
+ */
8311
+ page?: number;
8312
+ /**
8313
+ * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
8314
+ * @format int32
8315
+ * @min 1
8316
+ * @max 100
8317
+ */
8318
+ pageSize?: number;
8319
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessChange, ApiError | ProblemDetails>>;
8320
+ /**
8321
+ * @description Returns unique City+ZipCode combinations from addresses with pagination and optional search. Kostet 1 Credit.
8322
+ *
8323
+ * @tags Addresses
8324
+ * @name V1AddressesLocationsList
8325
+ * @summary City and ZIP combinations
8326
+ * @request GET:/api/v1/addresses/locations
8327
+ * @secure
8328
+ */
8329
+ v1AddressesLocationsList: (query?: {
8330
+ search?: string;
8331
+ /**
8332
+ * 1-based page number; defaults to 1 when omitted.
8333
+ * @format int32
8334
+ * @min 1
8335
+ * @max 1000
8336
+ */
8337
+ page?: number;
8338
+ /**
8339
+ * Number of items per page; defaults to 10 when omitted.
8340
+ * @format int32
8341
+ * @min 1
8342
+ * @max 100
8343
+ */
8344
+ pageSize?: number;
8345
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfAddressLocationResponse, ApiError | ProblemDetails>>;
8346
+ /**
8347
+ * @description Returns unique cities from addresses with pagination and optional search. Kostet 1 Credit.
8348
+ *
8349
+ * @tags Addresses
8350
+ * @name V1AddressesCitiesList
8351
+ * @summary Cities
8352
+ * @request GET:/api/v1/addresses/cities
8353
+ * @secure
8354
+ */
8355
+ v1AddressesCitiesList: (query?: {
8356
+ search?: string;
8357
+ /**
8358
+ * 1-based page number; defaults to 1 when omitted.
8359
+ * @format int32
8360
+ * @min 1
8361
+ * @max 1000
8362
+ */
8363
+ page?: number;
8364
+ /**
8365
+ * Number of items per page; defaults to 10 when omitted.
8366
+ * @format int32
8367
+ * @min 1
8368
+ * @max 100
8369
+ */
8370
+ pageSize?: number;
8371
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCityResponse, ApiError | ProblemDetails>>;
8372
+ /**
8373
+ * @description Ranks cities and City+ZipCode combinations against one term and answers the best few of both, as one ranking split into two lists — what a location filter's type-ahead needs, where /addresses/locations and /addresses/cities are the paged catalogues behind it. Ordered by where the term sits in the label, then by the shorter label, then by company count, so "wien" answers Wien before Wiener Neustadt and before every 1xxx ZIP that carries it. A term shorter than two characters is ignored and the biggest groups come back instead. top caps both lists together, not each. Kostet 1 Credit.
8374
+ *
8375
+ * @tags Addresses
8376
+ * @name V1AddressesSuggestList
8377
+ * @summary Location autocomplete
8378
+ * @request GET:/api/v1/addresses/suggest
8379
+ * @secure
8380
+ */
8381
+ v1AddressesSuggestList: (query?: {
8382
+ /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
8383
+ search?: string;
8384
+ /**
8385
+ * How many suggestions to answer, across both lists; defaults to 10 when omitted.
8386
+ * @format int32
8387
+ */
8388
+ top?: number;
8389
+ }, params?: RequestParams) => Promise<HttpResponse<LocationSuggestionsResponse, ApiError | ProblemDetails>>;
8390
+ /**
8391
+ * @description Returns unique zip codes from addresses with pagination and optional search. Kostet 1 Credit.
8392
+ *
8393
+ * @tags Addresses
8394
+ * @name V1AddressesZipcodesList
8395
+ * @summary ZIP codes
8396
+ * @request GET:/api/v1/addresses/zipcodes
8397
+ * @secure
8398
+ */
8399
+ v1AddressesZipcodesList: (query?: {
8400
+ search?: string;
8401
+ /**
8402
+ * 1-based page number; defaults to 1 when omitted.
8403
+ * @format int32
8404
+ * @min 1
8405
+ * @max 1000
8359
8406
  */
8360
- "guv.ZinsenUndAehnlicheAufwendungen_gte"?: number | null;
8407
+ page?: number;
8361
8408
  /**
8362
- * Upper bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
8363
- * @format decimal
8409
+ * Number of items per page; defaults to 10 when omitted.
8410
+ * @format int32
8411
+ * @min 1
8412
+ * @max 100
8364
8413
  */
8365
- "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
8366
- }, params?: RequestParams) => Promise<HttpResponse<BusinessMapTopItem[], ApiError | ProblemDetails>>;
8414
+ pageSize?: number;
8415
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfZipCodeResponse, ApiError | ProblemDetails>>;
8367
8416
  /**
8368
- * @description Active businesses similar to the given one (same OeNACE branch, same region preferred). Kostet 3 Credits.
8417
+ * @description The Gemeinde catalogue: one row per Austrian Gemeinde the register can address, with its official name, its URL slug, its Bundesland and that Land's slug, the PLZ that resolve to it, the alias slugs that name it and, for Wien, its Bezirke. This is the one source for a place's identity. The city column of an address is Firmenbuch free text and carries "Klagenfurt am Wörthersee", "Klagenfurt", "Klagenfurt-Viktring" and "Klagenfurt-Wölfnitz" side by side, so it cannot be a key; a Gemeinde is derived from the PLZ of the Geschäftsanschrift instead, and GET /businesses?gemeinde=<slug> answers every one of those spellings at once. Fold the zipCode buckets of GET /businesses/aggregate through zipCodes to count companies per Gemeinde. Unpaged and without a filter on purpose: 1.893 rows that change only with a new Gebietsstand, so one cacheable answer is cheaper for every caller than paging a list they all want whole. Companies with a foreign or unusable PLZ resolve to no Gemeinde and appear under none. Kostet 1 Credit.
8369
8418
  *
8370
- * @tags Businesses
8371
- * @name V1BusinessesSimilarList
8372
- * @summary Similar companies
8373
- * @request GET:/api/v1/businesses/{fnr}/similar
8419
+ * @tags Addresses
8420
+ * @name V1AddressesGemeindenList
8421
+ * @summary Gemeinden
8422
+ * @request GET:/api/v1/addresses/gemeinden
8374
8423
  * @secure
8375
8424
  */
8376
- v1BusinessesSimilarList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessListResponse[], ApiError | ProblemDetails>>;
8425
+ v1AddressesGemeindenList: (params?: RequestParams) => Promise<HttpResponse<GemeindeResponse[], ApiError | ProblemDetails>>;
8377
8426
  /**
8378
- * @description Returns the whole Firmenakte of one company: master data, addresses, people, GISA licences, Edikte, documents and the parsed annual accounts. fnr is matched exactly against the stored, normalised Firmenbuchnummer — lower case, no spaces, no leading zeros and no "FN" prefix, e.g. 34853f. Nothing is normalised on the way in, so "FN 34853 f" answers 404 rather than the company. 404 also means the company is not in the dataset yet. Kostet 1 Credit.
8427
+ * @description Downloads a Firmenbuch document (PDF/XML) by its document key. Kostet 3 Credits.
8379
8428
  *
8380
- * @tags Businesses
8381
- * @name V1BusinessesDetail
8382
- * @summary Company Firmenakte
8383
- * @request GET:/api/v1/businesses/{fnr}
8429
+ * @tags Documents
8430
+ * @name V1DocumentsDownloadDetail
8431
+ * @summary Firmenbuch document download
8432
+ * @request GET:/api/v1/documents/download/{documentKey}
8384
8433
  * @secure
8385
8434
  */
8386
- v1BusinessesDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessDetailResponse, ApiError | ProblemDetails>>;
8435
+ v1DocumentsDownloadDetail: (documentKey: string, params?: RequestParams) => Promise<HttpResponse<void, string | ApiError | ProblemDetails>>;
8387
8436
  /**
8388
- * @description Every parsed Jahresabschluss of one company, one entry per calendar year, newest first. The Firmenakte itself (GET /businesses/{fnr}) carries only the last five years. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
8437
+ * @description Returns one document change by id, with the document's metadata. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "document" answers 404 here. Kostet 1 Credit.
8389
8438
  *
8390
- * @tags Businesses
8391
- * @name V1BusinessesJahresabschluesseList
8392
- * @summary Company annual accounts
8393
- * @request GET:/api/v1/businesses/{fnr}/jahresabschluesse
8439
+ * @tags Documents
8440
+ * @name V1DocumentsChangesDetail
8441
+ * @summary Document change by id
8442
+ * @request GET:/api/v1/documents/changes/{id}
8394
8443
  * @secure
8395
8444
  */
8396
- v1BusinessesJahresabschluesseList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<ParsedJahresabschlussDto[], ApiError | ProblemDetails>>;
8445
+ v1DocumentsChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<DocumentChange, ApiError | ProblemDetails>>;
8397
8446
  /**
8398
- * @description The state aid published for one company by the Transparenzportal des BMF (§ 40k TDBG), newest year first and the largest amount first within a year, plus a summary of count, sum, the years and the freshest Stichtag. Published are Leistungen from 1.500 € per calendar year to non-natural persons; the COVID-19 reports start at 10.000 €. So an empty list means "nothing published for this company", never "this company received nothing" — and a company the portal names but that could not be matched to a Firmenbuchnummer is not here either. 404 only where the company itself is unknown, exactly as on GET /businesses/{fnr}. Kostet 1 Credit.
8447
+ * @description Feed of newly filed Firmenbuch documents — this is how you learn that a company has published a new Jahresabschluss. Each entry names a documentKey; fetch the file itself with GET /documents/download/{documentKey}. Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on the document date, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Kostet 1 Credit.
8399
8448
  *
8400
- * @tags Businesses
8401
- * @name V1BusinessesFoerderungenList
8402
- * @summary Company Foerderungen
8403
- * @request GET:/api/v1/businesses/{fnr}/foerderungen
8449
+ * @tags Documents
8450
+ * @name V1DocumentsChangesList
8451
+ * @summary Document change feed
8452
+ * @request GET:/api/v1/documents/changes
8404
8453
  * @secure
8405
8454
  */
8406
- v1BusinessesFoerderungenList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessFoerderungenResponse, ApiError | ProblemDetails>>;
8455
+ v1DocumentsChangesList: (query?: {
8456
+ /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
8457
+ fnr?: string;
8458
+ /**
8459
+ * Only changes we recorded at or after this instant — inclusive, and ANDed with sinceId when both are sent. A timestamp is not a cursor: poll on sinceId.
8460
+ * @format date-time
8461
+ */
8462
+ since?: string;
8463
+ /**
8464
+ * Only changes with a higher id than this — exclusive, so pass back the highest id you have stored. This is the cursor to poll the feed on.
8465
+ * @format int64
8466
+ */
8467
+ sinceId?: number;
8468
+ /**
8469
+ * 1-based page number; defaults to 1 when omitted. Walk it upwards within one poll, holding sinceId fixed, until a page comes back with fewer than pageSize rows.
8470
+ * @format int32
8471
+ * @min 1
8472
+ * @max 1000
8473
+ */
8474
+ page?: number;
8475
+ /**
8476
+ * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
8477
+ * @format int32
8478
+ * @min 1
8479
+ * @max 100
8480
+ */
8481
+ pageSize?: number;
8482
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfDocumentChange, ApiError | ProblemDetails>>;
8407
8483
  /**
8408
- * @description Returns one Firmenbuch change by id. The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "business" answers 404 here. Kostet 1 Credit.
8484
+ * @description The autocomplete read: /businesses and /people for one term, ranked together, so a search field costs one request per keystroke rather than two and does not have to merge two orders itself. Each row carries either business or person, whichever type names. Ordered by where the term sits in the name, then by the shorter name, then companies before people. pageSize is per side, so the answer holds up to twice as many rows. An empty search answers an empty list; use /businesses to page through the whole dataset. Kostet 1 Credit.
8409
8485
  *
8410
- * @tags Businesses
8411
- * @name V1BusinessesChangesDetail
8412
- * @summary Firmenbuch change by id
8413
- * @request GET:/api/v1/businesses/changes/{id}
8486
+ * @tags Search
8487
+ * @name V1SearchList
8488
+ * @summary Companies and people in one ranked list
8489
+ * @request GET:/api/v1/search
8414
8490
  * @secure
8415
8491
  */
8416
- v1BusinessesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<BusinessChange, ApiError | ProblemDetails>>;
8492
+ v1SearchList: (query?: {
8493
+ /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
8494
+ search?: string;
8495
+ /**
8496
+ * How many rows to take from each side before they are ranked together, so the answer holds at most twice this many; defaults to 10 when omitted.
8497
+ * @format int32
8498
+ * @min 1
8499
+ * @max 100
8500
+ */
8501
+ pageSize?: number;
8502
+ }, params?: RequestParams) => Promise<HttpResponse<SearchResponse, ApiError | ProblemDetails>>;
8417
8503
  /**
8418
- * @description Feed of Firmenbuch changes — one entry per new legal record (Eintragung). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate — so a back-dated entry is not missed — and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. fnr is normalised before matching — trimmed, spaces and leading zeros removed, case left alone — so 034853 f and 34853f are the same company, exactly as on GET /businesses. Use GET /globalchanges for the same feed across all four registers. Kostet 1 Credit.
8504
+ * @description Returns the graph (nodes and edges) within 2 hops of the start entity. Exactly one of personId or fnr must be provided. The network of people and companies around one starting point — who sits on which board with whom. nodes are people ("person") and companies ("business"), each carrying the id you would pass to /people/{personId} or /businesses/{fnr} — a person's is the Firmenakte-ID, e.g. "P-7K3M-QX91"; edges are source/target pairs of those ids whose relationshipType is "assignment", a person holding a function in a company. Two further edge types the deployment can enable: "address", two companies registered at the same street address, and "ownership", a company holding shares in another — source is the shareholder, target the company it holds, and capitalAmount, currency and sharePercent carry the stake where the register gives one. Ownership edges are drawn only for companies crawled since the shareholder mapping went live, so a company not yet re-crawled reports none rather than implying it has none. The traversal depth is fixed at 2 hops and is not a parameter — a node with further connections outside that boundary carries hasMore=true, and isCentralNode marks the entity you started from. personId and fnr are mutually exclusive, not combinable: supplying both, or neither, is a 400, and an id that exists in neither register is a 404. personId answers on the canonical Firmenakte-ID; another spelling of it and a person's old "vorname-nachname-…" id answer one 308 whose relative Location carries the canonical form. Kostet 3 Credits.
8419
8505
  *
8420
- * @tags Businesses
8421
- * @name V1BusinessesChangesList
8422
- * @summary Firmenbuch change feed
8423
- * @request GET:/api/v1/businesses/changes
8506
+ * @tags Graph
8507
+ * @name V1GraphList
8508
+ * @summary Relationship graph
8509
+ * @request GET:/api/v1/graph
8424
8510
  * @secure
8425
8511
  */
8426
- v1BusinessesChangesList: (query?: {
8512
+ v1GraphList: (query?: {
8513
+ /** Start from this person, by Firmenakte-ID ("P-7K3M-QX91"). Mutually exclusive with fnr. */
8514
+ personId?: string;
8515
+ /** Start from this company. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company; case is not folded. Mutually exclusive with personId. */
8516
+ fnr?: string;
8517
+ }, params?: RequestParams) => Promise<HttpResponse<GraphResponse, ApiError | ProblemDetails>>;
8518
+ /**
8519
+ * @description The single feed of every change across all registers — Firmenbuch, GISA, Ediktsdatei and the BMF Scheinunternehmen list — as lightweight reference rows. Each row carries only id, fnr, changeType and the dates; fetch the payload with GET /globalchanges/{id}, or poll one register's typed feed instead (/businesses/changes, /documents/changes, /edikte/changes, /trades/changes). Ordered by ascending id, and that id is the cursor: request with sinceId set to the highest id you have stored, walk page=1,2,… at a fixed pageSize until a page comes back with fewer than pageSize rows, keep the highest id you saw, and start the next poll from it. sinceId is exclusive, so nothing is delivered twice, and a new change always takes a higher id than every change already in the feed, so it appends to the end and never shifts a page you have already read. since is inclusive, filters on when we recorded the change rather than on changedDate, and applies together with sinceId when both are sent. Paging without sinceId is not a reliable feed: an offset is not a watermark, and page stops at 1000. totalRecords stops there too — it is counted only as far as page 1000 reaches, so it caps at 1000 × pageSize and means "at least this many" once it is that; stop on a short page, not on a count. Under concurrent writes a change can become visible just after a higher id, so a consumer that must not miss one resumes from the previous poll's watermark and de-duplicates by id. Kostet 1 Credit.
8520
+ *
8521
+ * @tags GlobalChanges
8522
+ * @name V1GlobalchangesList
8523
+ * @summary All-register change feed
8524
+ * @request GET:/api/v1/globalchanges
8525
+ * @secure
8526
+ */
8527
+ v1GlobalchangesList: (query?: {
8427
8528
  /** Only changes for this Firmenbuchnummer. Normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
8428
8529
  fnr?: string;
8429
8530
  /**
@@ -8450,28 +8551,59 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8450
8551
  * @max 100
8451
8552
  */
8452
8553
  pageSize?: number;
8453
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessChange, ApiError | ProblemDetails>>;
8554
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGlobalChange, ApiError | ProblemDetails>>;
8454
8555
  /**
8455
- * @description Returns all assignment functions (code/text lookup) for display. Cached 24h. Ohne API-Key abrufbar und kostet keine Credits.
8556
+ * @description Changes for a watchlist of companies, all four change types in one unpaged response. Built for watchlist polling: pass up to 1000 fnr values (repeat the parameter) and one cursor, and get back four arrays — businessChanges, documentChanges, ediktChanges, globalChanges — each ordered by ascending id and capped at maxResultsPerType. Not paged: raise maxResultsPerType or advance sinceId instead. sinceId is exclusive and since is inclusive, exactly as on the paged feeds, but one sinceId covers all four arrays: an array that comes back full at maxResultsPerType has more behind it and bounds the cursor, so advance sinceId only to the lowest of the full arrays' highest ids, and to the highest id of all four once none comes back full. Passing no fnr returns four empty arrays, not the whole feed. Kostet 3 Credits.
8456
8557
  *
8457
- * @tags AssignmentFunctions
8458
- * @name V1AssignmentfunctionsList
8459
- * @summary Assignment function catalog
8460
- * @request GET:/api/v1/assignmentfunctions
8558
+ * @tags GlobalChanges
8559
+ * @name V1GlobalchangesAggregatedList
8560
+ * @summary Aggregated watchlist changes
8561
+ * @request GET:/api/v1/globalchanges/aggregated
8461
8562
  * @secure
8462
8563
  */
8463
- v1AssignmentfunctionsList: (params?: RequestParams) => Promise<HttpResponse<AssignmentFunctionItemResponse[], ApiError | ProblemDetails>>;
8564
+ v1GlobalchangesAggregatedList: (query?: {
8565
+ /** Firmenbuch numbers to fetch changes for. Max 1000 items. Each is normalised before matching — trimmed, spaces and leading zeros removed — so 034853 f and 34853f are the same company. Case is not folded: pass the lower-case form the API gives you. */
8566
+ fnr?: string[];
8567
+ /** @format date-time */
8568
+ since?: string;
8569
+ /** @format int64 */
8570
+ sinceId?: number;
8571
+ /**
8572
+ * Max number of changes to return per type. Default 500, max 2000.
8573
+ * @format int32
8574
+ * @min 1
8575
+ * @max 2000
8576
+ */
8577
+ maxResultsPerType?: number;
8578
+ }, params?: RequestParams) => Promise<HttpResponse<AggregatedChangesResponse, ApiError | ProblemDetails>>;
8464
8579
  /**
8465
- * @description Returns unique City+ZipCode combinations from addresses with pagination and optional search. Kostet 1 Credit.
8580
+ * @description Returns one change with its typed payload, whichever register it came from. The envelope is a discriminator plus the payload: changeType says which register, and data is the matching object — a BusinessChange, DocumentChange, EdiktChange, GisaChange, FoerderungChange or ScheinunternehmenChange. Since data is a union, read changeType before it. Kostet 1 Credit.
8466
8581
  *
8467
- * @tags Addresses
8468
- * @name V1AddressesLocationsList
8469
- * @summary City and ZIP combinations
8470
- * @request GET:/api/v1/addresses/locations
8582
+ * @tags GlobalChanges
8583
+ * @name V1GlobalchangesDetail
8584
+ * @summary Change by id
8585
+ * @request GET:/api/v1/globalchanges/{id}
8471
8586
  * @secure
8472
8587
  */
8473
- v1AddressesLocationsList: (query?: {
8588
+ v1GlobalchangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<ChangeDetailResponse, ApiError | ProblemDetails>>;
8589
+ /**
8590
+ * @description Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first. Kostet 1 Credit.
8591
+ *
8592
+ * @tags Oenace
8593
+ * @name V1OenaceList
8594
+ * @summary OeNACE classification catalog
8595
+ * @request GET:/api/v1/oenace
8596
+ * @secure
8597
+ */
8598
+ v1OenaceList: (query?: {
8474
8599
  search?: string;
8600
+ /**
8601
+ * Filter by hierarchy level (1–5). Omit to return all levels.
8602
+ * @format int32
8603
+ */
8604
+ ebene?: number;
8605
+ /** @format int32 */
8606
+ minCompanyCount?: number;
8475
8607
  /**
8476
8608
  * 1-based page number; defaults to 1 when omitted.
8477
8609
  * @format int32
@@ -8486,17 +8618,18 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8486
8618
  * @max 100
8487
8619
  */
8488
8620
  pageSize?: number;
8489
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfAddressLocationResponse, ApiError | ProblemDetails>>;
8621
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfOenaceCatalogItemResponse, ApiError | ProblemDetails>>;
8490
8622
  /**
8491
- * @description Returns unique cities from addresses with pagination and optional search. Kostet 1 Credit.
8623
+ * @description Returns all legal forms with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
8492
8624
  *
8493
- * @tags Addresses
8494
- * @name V1AddressesCitiesList
8495
- * @summary Cities
8496
- * @request GET:/api/v1/addresses/cities
8625
+ * @tags LegalForms
8626
+ * @name V1LegalformsList
8627
+ * @summary Legal form catalog
8628
+ * @request GET:/api/v1/legalforms
8497
8629
  * @secure
8498
8630
  */
8499
- v1AddressesCitiesList: (query?: {
8631
+ v1LegalformsList: (query?: {
8632
+ /** @maxLength 200 */
8500
8633
  search?: string;
8501
8634
  /**
8502
8635
  * 1-based page number; defaults to 1 when omitted.
@@ -8512,35 +8645,18 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8512
8645
  * @max 100
8513
8646
  */
8514
8647
  pageSize?: number;
8515
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCityResponse, ApiError | ProblemDetails>>;
8516
- /**
8517
- * @description Ranks cities and City+ZipCode combinations against one term and answers the best few of both, as one ranking split into two lists — what a location filter's type-ahead needs, where /addresses/locations and /addresses/cities are the paged catalogues behind it. Ordered by where the term sits in the label, then by the shorter label, then by company count, so "wien" answers Wien before Wiener Neustadt and before every 1xxx ZIP that carries it. A term shorter than two characters is ignored and the biggest groups come back instead. top caps both lists together, not each. Ohne API-Key abrufbar und kostet keine Credits.
8518
- *
8519
- * @tags Addresses
8520
- * @name V1AddressesSuggestList
8521
- * @summary Location autocomplete
8522
- * @request GET:/api/v1/addresses/suggest
8523
- * @secure
8524
- */
8525
- v1AddressesSuggestList: (query?: {
8526
- /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
8527
- search?: string;
8528
- /**
8529
- * How many suggestions to answer, across both lists; defaults to 10 when omitted.
8530
- * @format int32
8531
- */
8532
- top?: number;
8533
- }, params?: RequestParams) => Promise<HttpResponse<LocationSuggestionsResponse, ApiError | ProblemDetails>>;
8648
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfLegalFormCatalogItemResponse, ApiError | ProblemDetails>>;
8534
8649
  /**
8535
- * @description Returns unique zip codes from addresses with pagination and optional search. Kostet 1 Credit.
8650
+ * @description Returns all courts with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
8536
8651
  *
8537
- * @tags Addresses
8538
- * @name V1AddressesZipcodesList
8539
- * @summary ZIP codes
8540
- * @request GET:/api/v1/addresses/zipcodes
8652
+ * @tags Courts
8653
+ * @name V1CourtsList
8654
+ * @summary Court catalog
8655
+ * @request GET:/api/v1/courts
8541
8656
  * @secure
8542
8657
  */
8543
- v1AddressesZipcodesList: (query?: {
8658
+ v1CourtsList: (query?: {
8659
+ /** @maxLength 200 */
8544
8660
  search?: string;
8545
8661
  /**
8546
8662
  * 1-based page number; defaults to 1 when omitted.
@@ -8556,17 +8672,17 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8556
8672
  * @max 100
8557
8673
  */
8558
8674
  pageSize?: number;
8559
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfZipCodeResponse, ApiError | ProblemDetails>>;
8675
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCourtCatalogItemResponse, ApiError | ProblemDetails>>;
8560
8676
  /**
8561
- * @description The Gemeinde catalogue: one row per Austrian Gemeinde the register can address, with its official name, its URL slug, its Bundesland, the PLZ that resolve to it and the alias slugs that name it. This is the one source for a place's identity. The city column of an address is Firmenbuch free text and carries "Klagenfurt am Wörthersee", "Klagenfurt", "Klagenfurt-Viktring" and "Klagenfurt-Wölfnitz" side by side, so it cannot be a key; a Gemeinde is derived from the PLZ of the Geschäftsanschrift instead, and GET /businesses?gemeinde=<slug> answers every one of those spellings at once. Fold the zipCode buckets of GET /businesses/aggregate through zipCodes to count companies per Gemeinde. Unpaged and without a filter on purpose: 1.893 rows that change only with a new Gebietsstand, so one cacheable answer is cheaper for every caller than paging a list they all want whole. Companies with a foreign or unusable PLZ resolve to no Gemeinde and appear under none. Kostet 1 Credit.
8677
+ * @description Returns all assignment functions (code/text lookup) for display. Cached 24h. Kostet 1 Credit.
8562
8678
  *
8563
- * @tags Addresses
8564
- * @name V1AddressesGemeindenList
8565
- * @summary Gemeinden
8566
- * @request GET:/api/v1/addresses/gemeinden
8679
+ * @tags AssignmentFunctions
8680
+ * @name V1AssignmentfunctionsList
8681
+ * @summary Assignment function catalog
8682
+ * @request GET:/api/v1/assignmentfunctions
8567
8683
  * @secure
8568
8684
  */
8569
- v1AddressesGemeindenList: (params?: RequestParams) => Promise<HttpResponse<GemeindeResponse[], ApiError | ProblemDetails>>;
8685
+ v1AssignmentfunctionsList: (params?: RequestParams) => Promise<HttpResponse<AssignmentFunctionItemResponse[], ApiError | ProblemDetails>>;
8570
8686
  };
8571
8687
  }
8572
8688
  export {};