@firmenakte/api-client 2.11.8 → 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 +1256 -1084
  3. package/client.d.ts.map +1 -1
  4. package/client.js +247 -224
  5. package/index.d.ts +82 -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,6 +920,34 @@ export interface FoerderungenSummaryDto {
883
920
  */
884
921
  stichtag?: string | null;
885
922
  }
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. */
933
+ export interface GemeindeResponse {
934
+ /** The Gemeinde's path segment, unique across the catalogue: "klagenfurt-am-woerthersee". */
935
+ slug?: string;
936
+ /** The official name, as STATISTIK AUSTRIA spells it: "Klagenfurt am Wörthersee". */
937
+ name?: string;
938
+ /** Bundesland, the same nine names the state filter on GET /businesses takes. */
939
+ state?: string;
940
+ /** The Bundesland's path segment: "kaernten", "niederoesterreich". */
941
+ stateSlug?: string;
942
+ /** The Gemeindekennziffer of STATISTIK AUSTRIA, five digits. */
943
+ kennziffer?: string;
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. */
945
+ zipCodes?: string[];
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. */
947
+ aliases?: string[];
948
+ /** The Gemeinde's Bezirke, each addressed by one PLZ; Wien's 23, empty for every other Gemeinde. */
949
+ districts?: GemeindeDistrictResponse[];
950
+ }
886
951
  export interface GisaChange {
887
952
  /** @format int64 */
888
953
  id?: number;
@@ -910,6 +975,7 @@ export interface GisaLicense {
910
975
  isActive?: boolean | null;
911
976
  /** @format int32 */
912
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. */
913
979
  personId?: string | null;
914
980
  }
915
981
  export interface GisaLicenseItemDto {
@@ -952,28 +1018,32 @@ export interface GlobalChange {
952
1018
  updatedAt?: string;
953
1019
  }
954
1020
  export interface GraphEdgeDto {
1021
+ /** Evidence sources for the ownership component, without duplicating functions. */
1022
+ ownershipSources?: string[];
1023
+ ownershipUncertainty?: string | null;
955
1024
  source?: string;
956
1025
  target?: string;
957
- /** 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. */
958
1027
  isActive?: boolean;
959
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". */
960
1029
  relationshipType?: string;
961
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". */
962
1031
  functionCodes?: string[];
963
1032
  /**
964
- * 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.
965
1034
  * @format double
966
1035
  */
967
1036
  capitalAmount?: number | null;
968
1037
  /** The currency of CapitalAmount — ATS occurs in this data, not only EUR. */
969
1038
  currency?: string | null;
970
1039
  /**
971
- * 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.
972
1041
  * @format double
973
1042
  */
974
1043
  sharePercent?: number | null;
975
1044
  }
976
1045
  export interface GraphNodeDto {
1046
+ /** A company's fnr, or a person's Firmenakte-ID ("P-7K3M-QX91"). */
977
1047
  id?: string;
978
1048
  type?: string;
979
1049
  label?: string;
@@ -1095,6 +1165,10 @@ export interface LegalRecordChangeDto {
1095
1165
  type?: string;
1096
1166
  /** Payload; shape depends on Type (string, LegalForm, Court, Address, or list of assignments). */
1097
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;
1098
1172
  }
1099
1173
  export interface LegalRecordDetailDto {
1100
1174
  fnr?: string;
@@ -1149,6 +1223,40 @@ export interface OenaceDto {
1149
1223
  code?: string | null;
1150
1224
  numericCode?: string | null;
1151
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
+ }
1152
1260
  /** One page of a list endpoint's result, plus the counters needed to fetch the rest. */
1153
1261
  export interface PagedResponseOfAddressLocationResponse {
1154
1262
  /** The rows on this page. Empty when the page is past the end, or when countOnly was requested. */
@@ -1580,6 +1688,7 @@ export interface ParsedJahresabschlussDto {
1580
1688
  guv?: GuvDto | null;
1581
1689
  }
1582
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. */
1583
1692
  id?: string;
1584
1693
  /** @format date-time */
1585
1694
  createdAt?: string;
@@ -1589,7 +1698,6 @@ export interface Person {
1589
1698
  firstName?: string | null;
1590
1699
  /** @maxLength 200 */
1591
1700
  lastName?: string | null;
1592
- birthDate?: string | null;
1593
1701
  titlePrefix?: string | null;
1594
1702
  titleSuffix?: string | null;
1595
1703
  assignments?: BusinessAssignment[];
@@ -1601,19 +1709,23 @@ export interface PersonAssignmentItemDto {
1601
1709
  fnr?: string;
1602
1710
  vnr?: string;
1603
1711
  pnr?: string;
1712
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1604
1713
  personId?: string;
1605
1714
  functionCode?: string;
1606
1715
  /** @format double */
1607
1716
  capitalAmount?: number | null;
1608
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;
1609
1720
  business?: BusinessSummaryDto | null;
1610
1721
  businessEdikte?: Edikt[];
1611
1722
  }
1612
1723
  export interface PersonDetailResponse {
1724
+ ownerships?: OwnershipDto[];
1725
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1613
1726
  id?: string;
1614
1727
  firstName?: string | null;
1615
1728
  lastName?: string | null;
1616
- birthDate?: string | null;
1617
1729
  titlePrefix?: string | null;
1618
1730
  titleSuffix?: string | null;
1619
1731
  assignments?: PersonAssignmentItemDto[];
@@ -1621,14 +1733,15 @@ export interface PersonDetailResponse {
1621
1733
  edikte?: any[];
1622
1734
  }
1623
1735
  export interface PersonNameItem {
1736
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1624
1737
  id?: string;
1625
1738
  name?: string;
1626
1739
  }
1627
1740
  export interface PersonResponse {
1741
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91" — the id GET /people/{personId} takes. */
1628
1742
  id?: string;
1629
1743
  firstName?: string | null;
1630
1744
  lastName?: string | null;
1631
- birthDate?: string | null;
1632
1745
  titlePrefix?: string | null;
1633
1746
  titleSuffix?: string | null;
1634
1747
  }
@@ -1704,7 +1817,7 @@ export interface ScheinunternehmenKundmachung {
1704
1817
  uid?: string | null;
1705
1818
  /** Firmenbuch number for company entries; null for natural persons. */
1706
1819
  fnr?: string | null;
1707
- /** 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. */
1708
1821
  personId?: string | null;
1709
1822
  displayName?: string | null;
1710
1823
  /** @format date-time */
@@ -1725,6 +1838,7 @@ export interface ScheinunternehmenKundmachungDto {
1725
1838
  guid?: string;
1726
1839
  uid?: string | null;
1727
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. */
1728
1842
  personId?: string | null;
1729
1843
  displayName?: string | null;
1730
1844
  /** @format date-time */
@@ -1775,6 +1889,30 @@ export interface UpdateListRequest {
1775
1889
  removedFnrs?: string[] | null;
1776
1890
  settings?: JsonDocument | null;
1777
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
+ }
1778
1916
  export interface ZipCodeResponse {
1779
1917
  zipCode?: string;
1780
1918
  /** @format int32 */
@@ -2157,20 +2295,55 @@ export declare namespace Api {
2157
2295
  type ResponseBody = PagedResponseOfGisaChange;
2158
2296
  }
2159
2297
  /**
2160
- * @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.
2161
- * @tags Search
2162
- * @name V1SearchList
2163
- * @summary Companies and people in one ranked list
2164
- * @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}
2165
2303
  * @secure
2166
2304
  */
2167
- 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 {
2168
2324
  type RequestParams = {};
2169
2325
  type RequestQuery = {
2170
- /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
2171
- 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;
2172
2328
  /**
2173
- * 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.
2174
2347
  * @format int32
2175
2348
  * @min 1
2176
2349
  * @max 100
@@ -2179,10 +2352,70 @@ export declare namespace Api {
2179
2352
  };
2180
2353
  type RequestBody = never;
2181
2354
  type RequestHeaders = {};
2182
- 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;
2183
2416
  }
2184
2417
  /**
2185
- * @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.
2186
2419
  * @tags People
2187
2420
  * @name V1PeopleNamesList
2188
2421
  * @summary Person name index
@@ -2197,7 +2430,7 @@ export declare namespace Api {
2197
2430
  type ResponseBody = PersonNameItem[];
2198
2431
  }
2199
2432
  /**
2200
- * @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.
2201
2434
  * @tags People
2202
2435
  * @name V1PeopleList
2203
2436
  * @summary People search
@@ -2225,10 +2458,6 @@ export declare namespace Api {
2225
2458
  fnr?: string;
2226
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. */
2227
2460
  hasEdikt?: boolean;
2228
- /** 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. */
2229
- orderBy?: string;
2230
- /** If true, sort descending; with orderBy=birthDate that is the youngest first. */
2231
- orderByDescending?: boolean;
2232
2461
  /**
2233
2462
  * 1-based page number; defaults to 1 when omitted.
2234
2463
  * @format int32
@@ -2249,7 +2478,7 @@ export declare namespace Api {
2249
2478
  type ResponseBody = PagedResponseOfPerson;
2250
2479
  }
2251
2480
  /**
2252
- * @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.
2253
2482
  * @tags People
2254
2483
  * @name V1PeopleDetail
2255
2484
  * @summary Person detail
@@ -2258,6 +2487,7 @@ export declare namespace Api {
2258
2487
  */
2259
2488
  namespace V1PeopleDetail {
2260
2489
  type RequestParams = {
2490
+ /** The person's Firmenakte-ID, e.g. "P-7K3M-QX91". */
2261
2491
  personId: string;
2262
2492
  };
2263
2493
  type RequestQuery = {};
@@ -2266,472 +2496,66 @@ export declare namespace Api {
2266
2496
  type ResponseBody = PersonDetailResponse;
2267
2497
  }
2268
2498
  /**
2269
- * @description Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first. Kostet 1 Credit.
2270
- * @tags Oenace
2271
- * @name V1OenaceList
2272
- * @summary OeNACE classification catalog
2273
- * @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
2274
2504
  * @secure
2275
2505
  */
2276
- namespace V1OenaceList {
2506
+ namespace V1BusinessesResolveNamesCreate {
2277
2507
  type RequestParams = {};
2278
- type RequestQuery = {
2279
- search?: string;
2280
- /**
2281
- * Filter by hierarchy level (1–5). Omit to return all levels.
2282
- * @format int32
2283
- */
2284
- ebene?: number;
2285
- /** @format int32 */
2286
- minCompanyCount?: number;
2287
- /**
2288
- * 1-based page number; defaults to 1 when omitted.
2289
- * @format int32
2290
- * @min 1
2291
- * @max 1000
2292
- */
2293
- page?: number;
2294
- /**
2295
- * Number of items per page; defaults to 10 when omitted.
2296
- * @format int32
2297
- * @min 1
2298
- * @max 100
2299
- */
2300
- pageSize?: number;
2301
- };
2302
- type RequestBody = never;
2508
+ type RequestQuery = {};
2509
+ type RequestBody = ResolveBusinessNamesRequest;
2303
2510
  type RequestHeaders = {};
2304
- type ResponseBody = PagedResponseOfOenaceCatalogItemResponse;
2511
+ type ResponseBody = ResolveBusinessNamesResponse;
2305
2512
  }
2306
2513
  /**
2307
- * @description Returns all legal forms with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
2308
- * @tags LegalForms
2309
- * @name V1LegalformsList
2310
- * @summary Legal form catalog
2311
- * @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
2312
2519
  * @secure
2313
2520
  */
2314
- namespace V1LegalformsList {
2521
+ namespace V1BusinessesList {
2315
2522
  type RequestParams = {};
2316
2523
  type RequestQuery = {
2317
- /** @maxLength 200 */
2524
+ fnr?: string[];
2525
+ name?: string;
2318
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[];
2319
2542
  /**
2320
- * 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.
2321
2554
  * @format int32
2322
- * @min 1
2323
- * @max 1000
2324
2555
  */
2325
- page?: number;
2556
+ signerCount_gte?: number;
2326
2557
  /**
2327
- * Number of items per page; defaults to 10 when omitted.
2328
- * @format int32
2329
- * @min 1
2330
- * @max 100
2331
- */
2332
- pageSize?: number;
2333
- };
2334
- type RequestBody = never;
2335
- type RequestHeaders = {};
2336
- type ResponseBody = PagedResponseOfLegalFormCatalogItemResponse;
2337
- }
2338
- /**
2339
- * @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.
2340
- * @tags Graph
2341
- * @name V1GraphList
2342
- * @summary Relationship graph
2343
- * @request GET:/api/v1/graph
2344
- * @secure
2345
- */
2346
- namespace V1GraphList {
2347
- type RequestParams = {};
2348
- type RequestQuery = {
2349
- /** Start from this person. Mutually exclusive with fnr. */
2350
- personId?: string;
2351
- /** 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. */
2352
- fnr?: string;
2353
- };
2354
- type RequestBody = never;
2355
- type RequestHeaders = {};
2356
- type ResponseBody = GraphResponse;
2357
- }
2358
- /**
2359
- * @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.
2360
- * @tags GlobalChanges
2361
- * @name V1GlobalchangesList
2362
- * @summary All-register change feed
2363
- * @request GET:/api/v1/globalchanges
2364
- * @secure
2365
- */
2366
- namespace V1GlobalchangesList {
2367
- type RequestParams = {};
2368
- type RequestQuery = {
2369
- /** 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. */
2370
- fnr?: string;
2371
- /**
2372
- * 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.
2373
- * @format date-time
2374
- */
2375
- since?: string;
2376
- /**
2377
- * 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.
2378
- * @format int64
2379
- */
2380
- sinceId?: number;
2381
- /**
2382
- * 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.
2383
- * @format int32
2384
- * @min 1
2385
- * @max 1000
2386
- */
2387
- page?: number;
2388
- /**
2389
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2390
- * @format int32
2391
- * @min 1
2392
- * @max 100
2393
- */
2394
- pageSize?: number;
2395
- };
2396
- type RequestBody = never;
2397
- type RequestHeaders = {};
2398
- type ResponseBody = PagedResponseOfGlobalChange;
2399
- }
2400
- /**
2401
- * @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.
2402
- * @tags GlobalChanges
2403
- * @name V1GlobalchangesAggregatedList
2404
- * @summary Aggregated watchlist changes
2405
- * @request GET:/api/v1/globalchanges/aggregated
2406
- * @secure
2407
- */
2408
- namespace V1GlobalchangesAggregatedList {
2409
- type RequestParams = {};
2410
- type RequestQuery = {
2411
- /** 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. */
2412
- fnr?: string[];
2413
- /** @format date-time */
2414
- since?: string;
2415
- /** @format int64 */
2416
- sinceId?: number;
2417
- /**
2418
- * Max number of changes to return per type. Default 500, max 2000.
2419
- * @format int32
2420
- * @min 1
2421
- * @max 2000
2422
- */
2423
- maxResultsPerType?: number;
2424
- };
2425
- type RequestBody = never;
2426
- type RequestHeaders = {};
2427
- type ResponseBody = AggregatedChangesResponse;
2428
- }
2429
- /**
2430
- * @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.
2431
- * @tags GlobalChanges
2432
- * @name V1GlobalchangesDetail
2433
- * @summary Change by id
2434
- * @request GET:/api/v1/globalchanges/{id}
2435
- * @secure
2436
- */
2437
- namespace V1GlobalchangesDetail {
2438
- type RequestParams = {
2439
- /** @format int64 */
2440
- id: number;
2441
- };
2442
- type RequestQuery = {};
2443
- type RequestBody = never;
2444
- type RequestHeaders = {};
2445
- type ResponseBody = ChangeDetailResponse;
2446
- }
2447
- /**
2448
- * @description Kostet 1 Credit.
2449
- * @tags Foerderungen
2450
- * @name V1FoerderungenChangesDetail
2451
- * @summary Funding change by id
2452
- * @request GET:/api/v1/foerderungen/changes/{id}
2453
- * @secure
2454
- */
2455
- namespace V1FoerderungenChangesDetail {
2456
- type RequestParams = {
2457
- /** @format int64 */
2458
- id: number;
2459
- };
2460
- type RequestQuery = {};
2461
- type RequestBody = never;
2462
- type RequestHeaders = {};
2463
- type ResponseBody = FoerderungChange;
2464
- }
2465
- /**
2466
- * @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.
2467
- * @tags Foerderungen
2468
- * @name V1FoerderungenChangesList
2469
- * @summary Funding change feed
2470
- * @request GET:/api/v1/foerderungen/changes
2471
- * @secure
2472
- */
2473
- namespace V1FoerderungenChangesList {
2474
- type RequestParams = {};
2475
- type RequestQuery = {
2476
- /** 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. */
2477
- fnr?: string;
2478
- /**
2479
- * 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.
2480
- * @format date-time
2481
- */
2482
- since?: string;
2483
- /**
2484
- * 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.
2485
- * @format int64
2486
- */
2487
- sinceId?: number;
2488
- /**
2489
- * 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.
2490
- * @format int32
2491
- * @min 1
2492
- * @max 1000
2493
- */
2494
- page?: number;
2495
- /**
2496
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2497
- * @format int32
2498
- * @min 1
2499
- * @max 100
2500
- */
2501
- pageSize?: number;
2502
- };
2503
- type RequestBody = never;
2504
- type RequestHeaders = {};
2505
- type ResponseBody = PagedResponseOfFoerderungChange;
2506
- }
2507
- /**
2508
- * @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.
2509
- * @tags Edikte
2510
- * @name V1EdikteChangesDetail
2511
- * @summary Edikt change by id
2512
- * @request GET:/api/v1/edikte/changes/{id}
2513
- * @secure
2514
- */
2515
- namespace V1EdikteChangesDetail {
2516
- type RequestParams = {
2517
- /** @format int64 */
2518
- id: number;
2519
- };
2520
- type RequestQuery = {};
2521
- type RequestBody = never;
2522
- type RequestHeaders = {};
2523
- type ResponseBody = EdiktChange;
2524
- }
2525
- /**
2526
- * @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.
2527
- * @tags Edikte
2528
- * @name V1EdikteChangesList
2529
- * @summary Ediktsdatei change feed
2530
- * @request GET:/api/v1/edikte/changes
2531
- * @secure
2532
- */
2533
- namespace V1EdikteChangesList {
2534
- type RequestParams = {};
2535
- type RequestQuery = {
2536
- /** 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. */
2537
- fnr?: string;
2538
- /**
2539
- * 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.
2540
- * @format date-time
2541
- */
2542
- since?: string;
2543
- /**
2544
- * 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.
2545
- * @format int64
2546
- */
2547
- sinceId?: number;
2548
- /**
2549
- * 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.
2550
- * @format int32
2551
- * @min 1
2552
- * @max 1000
2553
- */
2554
- page?: number;
2555
- /**
2556
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2557
- * @format int32
2558
- * @min 1
2559
- * @max 100
2560
- */
2561
- pageSize?: number;
2562
- };
2563
- type RequestBody = never;
2564
- type RequestHeaders = {};
2565
- type ResponseBody = PagedResponseOfEdiktChange;
2566
- }
2567
- /**
2568
- * @description Downloads a Firmenbuch document (PDF/XML) by its document key. Kostet 3 Credits.
2569
- * @tags Documents
2570
- * @name V1DocumentsDownloadDetail
2571
- * @summary Firmenbuch document download
2572
- * @request GET:/api/v1/documents/download/{documentKey}
2573
- * @secure
2574
- */
2575
- namespace V1DocumentsDownloadDetail {
2576
- type RequestParams = {
2577
- documentKey: string;
2578
- };
2579
- type RequestQuery = {};
2580
- type RequestBody = never;
2581
- type RequestHeaders = {};
2582
- type ResponseBody = void;
2583
- }
2584
- /**
2585
- * @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.
2586
- * @tags Documents
2587
- * @name V1DocumentsChangesDetail
2588
- * @summary Document change by id
2589
- * @request GET:/api/v1/documents/changes/{id}
2590
- * @secure
2591
- */
2592
- namespace V1DocumentsChangesDetail {
2593
- type RequestParams = {
2594
- /** @format int64 */
2595
- id: number;
2596
- };
2597
- type RequestQuery = {};
2598
- type RequestBody = never;
2599
- type RequestHeaders = {};
2600
- type ResponseBody = DocumentChange;
2601
- }
2602
- /**
2603
- * @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.
2604
- * @tags Documents
2605
- * @name V1DocumentsChangesList
2606
- * @summary Document change feed
2607
- * @request GET:/api/v1/documents/changes
2608
- * @secure
2609
- */
2610
- namespace V1DocumentsChangesList {
2611
- type RequestParams = {};
2612
- type RequestQuery = {
2613
- /** 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. */
2614
- fnr?: string;
2615
- /**
2616
- * 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.
2617
- * @format date-time
2618
- */
2619
- since?: string;
2620
- /**
2621
- * 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.
2622
- * @format int64
2623
- */
2624
- sinceId?: number;
2625
- /**
2626
- * 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.
2627
- * @format int32
2628
- * @min 1
2629
- * @max 1000
2630
- */
2631
- page?: number;
2632
- /**
2633
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
2634
- * @format int32
2635
- * @min 1
2636
- * @max 100
2637
- */
2638
- pageSize?: number;
2639
- };
2640
- type RequestBody = never;
2641
- type RequestHeaders = {};
2642
- type ResponseBody = PagedResponseOfDocumentChange;
2643
- }
2644
- /**
2645
- * @description Returns all courts with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
2646
- * @tags Courts
2647
- * @name V1CourtsList
2648
- * @summary Court catalog
2649
- * @request GET:/api/v1/courts
2650
- * @secure
2651
- */
2652
- namespace V1CourtsList {
2653
- type RequestParams = {};
2654
- type RequestQuery = {
2655
- /** @maxLength 200 */
2656
- search?: string;
2657
- /**
2658
- * 1-based page number; defaults to 1 when omitted.
2659
- * @format int32
2660
- * @min 1
2661
- * @max 1000
2662
- */
2663
- page?: number;
2664
- /**
2665
- * Number of items per page; defaults to 10 when omitted.
2666
- * @format int32
2667
- * @min 1
2668
- * @max 100
2669
- */
2670
- pageSize?: number;
2671
- };
2672
- type RequestBody = never;
2673
- type RequestHeaders = {};
2674
- type ResponseBody = PagedResponseOfCourtCatalogItemResponse;
2675
- }
2676
- /**
2677
- * @description Resolve company names to FNRs by exact name match (1:1). Used for CSV import. Kostet 1 Credit.
2678
- * @tags Businesses
2679
- * @name V1BusinessesResolveNamesCreate
2680
- * @summary Name to FNR resolution
2681
- * @request POST:/api/v1/businesses/resolve-names
2682
- * @secure
2683
- */
2684
- namespace V1BusinessesResolveNamesCreate {
2685
- type RequestParams = {};
2686
- type RequestQuery = {};
2687
- type RequestBody = ResolveBusinessNamesRequest;
2688
- type RequestHeaders = {};
2689
- type ResponseBody = ResolveBusinessNamesResponse;
2690
- }
2691
- /**
2692
- * @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. Kostet 1 Credit.
2693
- * @tags Businesses
2694
- * @name V1BusinessesList
2695
- * @summary Company search
2696
- * @request GET:/api/v1/businesses
2697
- * @secure
2698
- */
2699
- namespace V1BusinessesList {
2700
- type RequestParams = {};
2701
- type RequestQuery = {
2702
- fnr?: string[];
2703
- name?: string;
2704
- search?: string;
2705
- city?: string[];
2706
- courtCode?: string[];
2707
- legalFormCode?: string[];
2708
- zipCode?: string[];
2709
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
2710
- state?: string[];
2711
- hasEdikt?: boolean;
2712
- active?: boolean;
2713
- /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
2714
- isScheinunternehmen?: boolean;
2715
- gisaLicenseKey?: number[];
2716
- /** Filter by OeNACE code (OenaceZuord / NumericCode), e.g. ["46649"]. */
2717
- oenaceCode?: string[];
2718
- /**
2719
- * 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.
2720
- * @format date-time
2721
- */
2722
- registeredSince_gte?: string;
2723
- /**
2724
- * 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.
2725
- * @format date-time
2726
- */
2727
- registeredSince_lte?: string;
2728
- /**
2729
- * 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.
2730
- * @format int32
2731
- */
2732
- signerCount_gte?: number;
2733
- /**
2734
- * 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.
2735
2559
  * @format int32
2736
2560
  */
2737
2561
  signerCount_lte?: number;
@@ -3318,8 +3142,10 @@ export declare namespace Api {
3318
3142
  courtCode?: string[];
3319
3143
  legalFormCode?: string[];
3320
3144
  zipCode?: string[];
3321
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
3145
+ /** 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. */
3322
3146
  state?: string[];
3147
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
3148
+ gemeinde?: string[];
3323
3149
  hasEdikt?: boolean;
3324
3150
  active?: boolean;
3325
3151
  /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
@@ -3879,7 +3705,7 @@ export declare namespace Api {
3879
3705
  namespace V1BusinessesFacetsList {
3880
3706
  type RequestParams = {};
3881
3707
  type RequestQuery = {
3882
- /** 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. */
3883
3709
  groups?: string[];
3884
3710
  /**
3885
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.
@@ -3895,8 +3721,10 @@ export declare namespace Api {
3895
3721
  courtCode?: string[];
3896
3722
  legalFormCode?: string[];
3897
3723
  zipCode?: string[];
3898
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
3724
+ /** 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. */
3899
3725
  state?: string[];
3726
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
3727
+ gemeinde?: string[];
3900
3728
  hasEdikt?: boolean;
3901
3729
  active?: boolean;
3902
3730
  /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
@@ -4467,8 +4295,10 @@ export declare namespace Api {
4467
4295
  courtCode?: string[];
4468
4296
  legalFormCode?: string[];
4469
4297
  zipCode?: string[];
4470
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
4298
+ /** 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. */
4471
4299
  state?: string[];
4300
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
4301
+ gemeinde?: string[];
4472
4302
  hasEdikt?: boolean;
4473
4303
  active?: boolean;
4474
4304
  /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
@@ -4998,120 +4828,415 @@ export declare namespace Api {
4998
4828
  */
4999
4829
  "guv.WarenUndMaterialeinkauf_gte"?: number | null;
5000
4830
  /**
5001
- * Upper bound (inclusive) for Filter by profit and loss item: WarenUndMaterialeinkauf
5002
- * @format decimal
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
5026
+ */
5027
+ page?: number;
5028
+ /**
5029
+ * Number of items per page; defaults to 10 when omitted.
5030
+ * @format int32
5031
+ * @min 1
5032
+ * @max 100
5033
+ */
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;
5053
+ /**
5054
+ * How many suggestions to answer, across both lists; defaults to 10 when omitted.
5055
+ * @format int32
5003
5056
  */
5004
- "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;
5005
5075
  /**
5006
- * Lower bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
5007
- * @format decimal
5076
+ * 1-based page number; defaults to 1 when omitted.
5077
+ * @format int32
5078
+ * @min 1
5079
+ * @max 1000
5008
5080
  */
5009
- "guv.ZinsenUndAehnlicheAufwendungen_gte"?: number | null;
5081
+ page?: number;
5010
5082
  /**
5011
- * Upper bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
5012
- * @format decimal
5083
+ * Number of items per page; defaults to 10 when omitted.
5084
+ * @format int32
5085
+ * @min 1
5086
+ * @max 100
5013
5087
  */
5014
- "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
5088
+ pageSize?: number;
5015
5089
  };
5016
5090
  type RequestBody = never;
5017
5091
  type RequestHeaders = {};
5018
- type ResponseBody = BusinessMapTopItem[];
5092
+ type ResponseBody = PagedResponseOfZipCodeResponse;
5019
5093
  }
5020
5094
  /**
5021
- * @description Active businesses similar to the given one (same OeNACE branch, same region preferred). Kostet 3 Credits.
5022
- * @tags Businesses
5023
- * @name V1BusinessesSimilarList
5024
- * @summary Similar companies
5025
- * @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
5026
5100
  * @secure
5027
5101
  */
5028
- namespace V1BusinessesSimilarList {
5029
- type RequestParams = {
5030
- fnr: string;
5031
- };
5102
+ namespace V1AddressesGemeindenList {
5103
+ type RequestParams = {};
5032
5104
  type RequestQuery = {};
5033
5105
  type RequestBody = never;
5034
5106
  type RequestHeaders = {};
5035
- type ResponseBody = BusinessListResponse[];
5107
+ type ResponseBody = GemeindeResponse[];
5036
5108
  }
5037
5109
  /**
5038
- * @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.
5039
- * @tags Businesses
5040
- * @name V1BusinessesDetail
5041
- * @summary Company Firmenakte
5042
- * @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}
5043
5115
  * @secure
5044
5116
  */
5045
- namespace V1BusinessesDetail {
5117
+ namespace V1DocumentsDownloadDetail {
5046
5118
  type RequestParams = {
5047
- fnr: string;
5119
+ documentKey: string;
5048
5120
  };
5049
5121
  type RequestQuery = {};
5050
5122
  type RequestBody = never;
5051
5123
  type RequestHeaders = {};
5052
- type ResponseBody = BusinessDetailResponse;
5124
+ type ResponseBody = void;
5053
5125
  }
5054
5126
  /**
5055
- * @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.
5056
- * @tags Businesses
5057
- * @name V1BusinessesJahresabschluesseList
5058
- * @summary Company annual accounts
5059
- * @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}
5060
5132
  * @secure
5061
5133
  */
5062
- namespace V1BusinessesJahresabschluesseList {
5134
+ namespace V1DocumentsChangesDetail {
5063
5135
  type RequestParams = {
5064
- fnr: string;
5136
+ /** @format int64 */
5137
+ id: number;
5065
5138
  };
5066
5139
  type RequestQuery = {};
5067
5140
  type RequestBody = never;
5068
5141
  type RequestHeaders = {};
5069
- type ResponseBody = ParsedJahresabschlussDto[];
5142
+ type ResponseBody = DocumentChange;
5070
5143
  }
5071
5144
  /**
5072
- * @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.
5073
- * @tags Businesses
5074
- * @name V1BusinessesFoerderungenList
5075
- * @summary Company Foerderungen
5076
- * @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
5077
5150
  * @secure
5078
5151
  */
5079
- namespace V1BusinessesFoerderungenList {
5080
- type RequestParams = {
5081
- 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;
5082
5181
  };
5083
- type RequestQuery = {};
5084
5182
  type RequestBody = never;
5085
5183
  type RequestHeaders = {};
5086
- type ResponseBody = BusinessFoerderungenResponse;
5184
+ type ResponseBody = PagedResponseOfDocumentChange;
5087
5185
  }
5088
5186
  /**
5089
- * @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.
5090
- * @tags Businesses
5091
- * @name V1BusinessesChangesDetail
5092
- * @summary Firmenbuch change by id
5093
- * @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
5094
5192
  * @secure
5095
5193
  */
5096
- namespace V1BusinessesChangesDetail {
5097
- type RequestParams = {
5098
- /** @format int64 */
5099
- 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;
5100
5206
  };
5101
- type RequestQuery = {};
5102
5207
  type RequestBody = never;
5103
5208
  type RequestHeaders = {};
5104
- type ResponseBody = BusinessChange;
5209
+ type ResponseBody = SearchResponse;
5105
5210
  }
5106
5211
  /**
5107
- * @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.
5108
- * @tags Businesses
5109
- * @name V1BusinessesChangesList
5110
- * @summary Firmenbuch change feed
5111
- * @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
5112
5217
  * @secure
5113
5218
  */
5114
- 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 {
5115
5240
  type RequestParams = {};
5116
5241
  type RequestQuery = {
5117
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. */
@@ -5143,35 +5268,74 @@ export declare namespace Api {
5143
5268
  };
5144
5269
  type RequestBody = never;
5145
5270
  type RequestHeaders = {};
5146
- type ResponseBody = PagedResponseOfBusinessChange;
5271
+ type ResponseBody = PagedResponseOfGlobalChange;
5147
5272
  }
5148
5273
  /**
5149
- * @description Returns all assignment functions (code/text lookup) for display. Cached 24h. Kostet 1 Credit.
5150
- * @tags AssignmentFunctions
5151
- * @name V1AssignmentfunctionsList
5152
- * @summary Assignment function catalog
5153
- * @request GET:/api/v1/assignmentfunctions
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
5154
5279
  * @secure
5155
5280
  */
5156
- namespace V1AssignmentfunctionsList {
5281
+ namespace V1GlobalchangesAggregatedList {
5157
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;
5301
+ }
5302
+ /**
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}
5308
+ * @secure
5309
+ */
5310
+ namespace V1GlobalchangesDetail {
5311
+ type RequestParams = {
5312
+ /** @format int64 */
5313
+ id: number;
5314
+ };
5158
5315
  type RequestQuery = {};
5159
5316
  type RequestBody = never;
5160
5317
  type RequestHeaders = {};
5161
- type ResponseBody = AssignmentFunctionItemResponse[];
5318
+ type ResponseBody = ChangeDetailResponse;
5162
5319
  }
5163
5320
  /**
5164
- * @description Returns unique City+ZipCode combinations from addresses with pagination and optional search. Kostet 1 Credit.
5165
- * @tags Addresses
5166
- * @name V1AddressesLocationsList
5167
- * @summary City and ZIP combinations
5168
- * @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
5169
5326
  * @secure
5170
5327
  */
5171
- namespace V1AddressesLocationsList {
5328
+ namespace V1OenaceList {
5172
5329
  type RequestParams = {};
5173
5330
  type RequestQuery = {
5174
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;
5175
5339
  /**
5176
5340
  * 1-based page number; defaults to 1 when omitted.
5177
5341
  * @format int32
@@ -5189,19 +5353,20 @@ export declare namespace Api {
5189
5353
  };
5190
5354
  type RequestBody = never;
5191
5355
  type RequestHeaders = {};
5192
- type ResponseBody = PagedResponseOfAddressLocationResponse;
5356
+ type ResponseBody = PagedResponseOfOenaceCatalogItemResponse;
5193
5357
  }
5194
5358
  /**
5195
- * @description Returns unique cities from addresses with pagination and optional search. Kostet 1 Credit.
5196
- * @tags Addresses
5197
- * @name V1AddressesCitiesList
5198
- * @summary Cities
5199
- * @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
5200
5364
  * @secure
5201
5365
  */
5202
- namespace V1AddressesCitiesList {
5366
+ namespace V1LegalformsList {
5203
5367
  type RequestParams = {};
5204
5368
  type RequestQuery = {
5369
+ /** @maxLength 200 */
5205
5370
  search?: string;
5206
5371
  /**
5207
5372
  * 1-based page number; defaults to 1 when omitted.
@@ -5220,42 +5385,20 @@ export declare namespace Api {
5220
5385
  };
5221
5386
  type RequestBody = never;
5222
5387
  type RequestHeaders = {};
5223
- type ResponseBody = PagedResponseOfCityResponse;
5224
- }
5225
- /**
5226
- * @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.
5227
- * @tags Addresses
5228
- * @name V1AddressesSuggestList
5229
- * @summary Location autocomplete
5230
- * @request GET:/api/v1/addresses/suggest
5231
- * @secure
5232
- */
5233
- namespace V1AddressesSuggestList {
5234
- type RequestParams = {};
5235
- type RequestQuery = {
5236
- /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
5237
- search?: string;
5238
- /**
5239
- * How many suggestions to answer, across both lists; defaults to 10 when omitted.
5240
- * @format int32
5241
- */
5242
- top?: number;
5243
- };
5244
- type RequestBody = never;
5245
- type RequestHeaders = {};
5246
- type ResponseBody = LocationSuggestionsResponse;
5388
+ type ResponseBody = PagedResponseOfLegalFormCatalogItemResponse;
5247
5389
  }
5248
5390
  /**
5249
- * @description Returns unique zip codes from addresses with pagination and optional search. Kostet 1 Credit.
5250
- * @tags Addresses
5251
- * @name V1AddressesZipcodesList
5252
- * @summary ZIP codes
5253
- * @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
5254
5396
  * @secure
5255
5397
  */
5256
- namespace V1AddressesZipcodesList {
5398
+ namespace V1CourtsList {
5257
5399
  type RequestParams = {};
5258
5400
  type RequestQuery = {
5401
+ /** @maxLength 200 */
5259
5402
  search?: string;
5260
5403
  /**
5261
5404
  * 1-based page number; defaults to 1 when omitted.
@@ -5274,7 +5417,22 @@ export declare namespace Api {
5274
5417
  };
5275
5418
  type RequestBody = never;
5276
5419
  type RequestHeaders = {};
5277
- type ResponseBody = PagedResponseOfZipCodeResponse;
5420
+ type ResponseBody = PagedResponseOfCourtCatalogItemResponse;
5421
+ }
5422
+ /**
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
5428
+ * @secure
5429
+ */
5430
+ namespace V1AssignmentfunctionsList {
5431
+ type RequestParams = {};
5432
+ type RequestQuery = {};
5433
+ type RequestBody = never;
5434
+ type RequestHeaders = {};
5435
+ type ResponseBody = AssignmentFunctionItemResponse[];
5278
5436
  }
5279
5437
  }
5280
5438
  export type QueryParamsType = Record<string | number, any>;
@@ -5337,7 +5495,7 @@ export declare class HttpClient<SecurityDataType = unknown> {
5337
5495
  request: <T = any, E = any>({ body, secure, path, type, query, format, baseUrl, cancelToken, ...params }: FullRequestParams) => Promise<HttpResponse<T, E>>;
5338
5496
  }
5339
5497
  /**
5340
- * @title UnternehmensScreener API
5498
+ * @title Firmenakte API
5341
5499
  * @version v1
5342
5500
  * @baseUrl https://api.firmenakte.at
5343
5501
  */
@@ -5442,265 +5600,63 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5442
5600
  * @request DELETE:/api/v1/lists/{id}
5443
5601
  * @secure
5444
5602
  */
5445
- v1ListsDelete: (id: string, params?: RequestParams) => Promise<HttpResponse<void, ApiError | ProblemDetails>>;
5446
- /**
5447
- * @description Appends the companies that are not on it yet, keeping the order of the ones that are. A company that had been taken off comes back off the removed set. Kostet 1 Credit.
5448
- *
5449
- * @tags Lists
5450
- * @name V1ListsAddCreate
5451
- * @summary Add companies to a Liste
5452
- * @request POST:/api/v1/lists/{id}/add
5453
- * @secure
5454
- */
5455
- v1ListsAddCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5456
- /**
5457
- * @description Takes the companies off the Liste and records them as removed. Kostet 1 Credit.
5458
- *
5459
- * @tags Lists
5460
- * @name V1ListsRemoveCreate
5461
- * @summary Remove companies from a Liste
5462
- * @request POST:/api/v1/lists/{id}/remove
5463
- * @secure
5464
- */
5465
- v1ListsRemoveCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5466
- /**
5467
- * @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.
5468
- *
5469
- * @tags Exports
5470
- * @name V1ExportsBusinessesCreate
5471
- * @summary Export companies
5472
- * @request POST:/api/v1/exports/businesses
5473
- * @secure
5474
- */
5475
- v1ExportsBusinessesCreate: (data: ExportBusinessesRequest, params?: RequestParams) => Promise<HttpResponse<FileResult, ApiError | ProblemDetails>>;
5476
- /**
5477
- * @description Downloads the signed GISA PDF extract for a license (GISA-Zahl). Language defaults to German (De). Kostet 3 Credits.
5478
- *
5479
- * @tags Trades
5480
- * @name V1TradesDocumentsDetail
5481
- * @summary GISA PDF extract
5482
- * @request GET:/api/v1/trades/documents/{gisaZahl}
5483
- * @secure
5484
- */
5485
- v1TradesDocumentsDetail: (gisaZahl: number, query?: {
5486
- /** @default false */
5487
- historical?: boolean;
5488
- /** @default "De" */
5489
- language?: "De" | "En";
5490
- }, params?: RequestParams) => Promise<HttpResponse<Blob, ApiError | ProblemDetails>>;
5491
- /**
5492
- * @description Returns the global catalog of GISA Trade Definitions with pagination. Kostet 1 Credit.
5493
- *
5494
- * @tags Trades
5495
- * @name V1TradesList
5496
- * @summary GISA trade catalog
5497
- * @request GET:/api/v1/trades
5498
- * @secure
5499
- */
5500
- v1TradesList: (query?: {
5501
- search?: string;
5502
- /** @format int32 */
5503
- minCompanyCount?: number;
5504
- /**
5505
- * 1-based page number; defaults to 1 when omitted.
5506
- * @format int32
5507
- * @min 1
5508
- * @max 1000
5509
- */
5510
- page?: number;
5511
- /**
5512
- * Number of items per page; defaults to 10 when omitted.
5513
- * @format int32
5514
- * @min 1
5515
- * @max 100
5516
- */
5517
- pageSize?: number;
5518
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfTradeCatalogItemResponse, ApiError | ProblemDetails>>;
5519
- /**
5520
- * @description Returns all company licenses for a specific trade definition with pagination. Kostet 1 Credit.
5521
- *
5522
- * @tags Trades
5523
- * @name V1TradesLicensesList
5524
- * @summary Licenses by trade
5525
- * @request GET:/api/v1/trades/{tradeKey}/licenses
5526
- * @secure
5527
- */
5528
- v1TradesLicensesList: (tradeKey: number, query?: {
5529
- /**
5530
- * 1-based page number; defaults to 1 when omitted.
5531
- * @format int32
5532
- * @min 1
5533
- * @max 1000
5534
- */
5535
- page?: number;
5536
- /**
5537
- * Number of items per page; defaults to 10 when omitted.
5538
- * @format int32
5539
- * @min 1
5540
- * @max 100
5541
- */
5542
- pageSize?: number;
5543
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaLicense, ApiError | ProblemDetails>>;
5544
- /**
5545
- * @description Returns all licenses for a specific company (FNR). Kostet 1 Credit.
5546
- *
5547
- * @tags Trades
5548
- * @name V1TradesCompanyDetail
5549
- * @summary Company GISA licenses
5550
- * @request GET:/api/v1/trades/company/{fnr}
5551
- * @secure
5552
- */
5553
- v1TradesCompanyDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<GisaLicense[], ApiError | ProblemDetails>>;
5554
- /**
5555
- * @description Returns a single GISA change by id. Kostet 1 Credit.
5556
- *
5557
- * @tags Trades
5558
- * @name V1TradesChangesDetail
5559
- * @summary GISA change by id
5560
- * @request GET:/api/v1/trades/changes/{id}
5561
- * @secure
5562
- */
5563
- v1TradesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<GisaChange, ApiError | ProblemDetails>>;
5564
- /**
5565
- * @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.
5566
- *
5567
- * @tags Trades
5568
- * @name V1TradesChangesList
5569
- * @summary GISA change feed
5570
- * @request GET:/api/v1/trades/changes
5571
- * @secure
5572
- */
5573
- v1TradesChangesList: (query?: {
5574
- /** 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. */
5575
- fnr?: string;
5576
- /**
5577
- * 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.
5578
- * @format date-time
5579
- */
5580
- since?: string;
5581
- /**
5582
- * 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.
5583
- * @format int64
5584
- */
5585
- sinceId?: number;
5586
- /**
5587
- * 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.
5588
- * @format int32
5589
- * @min 1
5590
- * @max 1000
5591
- */
5592
- page?: number;
5593
- /**
5594
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5595
- * @format int32
5596
- * @min 1
5597
- * @max 100
5598
- */
5599
- pageSize?: number;
5600
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaChange, ApiError | ProblemDetails>>;
5601
- /**
5602
- * @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.
5603
- *
5604
- * @tags Search
5605
- * @name V1SearchList
5606
- * @summary Companies and people in one ranked list
5607
- * @request GET:/api/v1/search
5608
- * @secure
5609
- */
5610
- v1SearchList: (query?: {
5611
- /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
5612
- search?: string;
5613
- /**
5614
- * 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.
5615
- * @format int32
5616
- * @min 1
5617
- * @max 100
5618
- */
5619
- pageSize?: number;
5620
- }, params?: RequestParams) => Promise<HttpResponse<SearchResponse, ApiError | ProblemDetails>>;
5603
+ v1ListsDelete: (id: string, params?: RequestParams) => Promise<HttpResponse<void, ApiError | ProblemDetails>>;
5621
5604
  /**
5622
- * @description Returns (id, name) pairs for all people with at least one business assignment. For client-side name index. Kostet 1 Credit.
5605
+ * @description Appends the companies that are not on it yet, keeping the order of the ones that are. A company that had been taken off comes back off the removed set. Kostet 1 Credit.
5623
5606
  *
5624
- * @tags People
5625
- * @name V1PeopleNamesList
5626
- * @summary Person name index
5627
- * @request GET:/api/v1/people/names
5607
+ * @tags Lists
5608
+ * @name V1ListsAddCreate
5609
+ * @summary Add companies to a Liste
5610
+ * @request POST:/api/v1/lists/{id}/add
5628
5611
  * @secure
5629
5612
  */
5630
- v1PeopleNamesList: (params?: RequestParams) => Promise<HttpResponse<PersonNameItem[], ApiError | ProblemDetails>>;
5613
+ v1ListsAddCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5631
5614
  /**
5632
- * @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.
5615
+ * @description Takes the companies off the Liste and records them as removed. Kostet 1 Credit.
5633
5616
  *
5634
- * @tags People
5635
- * @name V1PeopleList
5636
- * @summary People search
5637
- * @request GET:/api/v1/people
5617
+ * @tags Lists
5618
+ * @name V1ListsRemoveCreate
5619
+ * @summary Remove companies from a Liste
5620
+ * @request POST:/api/v1/lists/{id}/remove
5638
5621
  * @secure
5639
5622
  */
5640
- v1PeopleList: (query?: {
5641
- name?: string;
5642
- search?: string;
5643
- firstName?: string;
5644
- lastName?: string;
5645
- /** 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. */
5646
- functionCode?: string[];
5647
- businessName?: string;
5648
- /** 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. */
5649
- businessCity?: string;
5650
- /**
5651
- * 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.
5652
- * @format date-time
5653
- */
5654
- businessRegisteredSince_gte?: string;
5655
- /** 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. */
5656
- fnr?: string;
5657
- /** 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. */
5658
- hasEdikt?: boolean;
5659
- /** 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. */
5660
- orderBy?: string;
5661
- /** If true, sort descending; with orderBy=birthDate that is the youngest first. */
5662
- orderByDescending?: boolean;
5663
- /**
5664
- * 1-based page number; defaults to 1 when omitted.
5665
- * @format int32
5666
- * @min 1
5667
- * @max 1000
5668
- */
5669
- page?: number;
5670
- /**
5671
- * Number of items per page; defaults to 10 when omitted.
5672
- * @format int32
5673
- * @min 1
5674
- * @max 100
5675
- */
5676
- pageSize?: number;
5677
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfPerson, ApiError | ProblemDetails>>;
5623
+ v1ListsRemoveCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5678
5624
  /**
5679
- * @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.
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.
5680
5626
  *
5681
- * @tags People
5682
- * @name V1PeopleDetail
5683
- * @summary Person detail
5684
- * @request GET:/api/v1/people/{personId}
5627
+ * @tags Exports
5628
+ * @name V1ExportsBusinessesCreate
5629
+ * @summary Export companies
5630
+ * @request POST:/api/v1/exports/businesses
5685
5631
  * @secure
5686
5632
  */
5687
- v1PeopleDetail: (personId: string, params?: RequestParams) => Promise<HttpResponse<PersonDetailResponse, ApiError | ProblemDetails>>;
5633
+ v1ExportsBusinessesCreate: (data: ExportBusinessesRequest, params?: RequestParams) => Promise<HttpResponse<FileResult, ApiError | ProblemDetails>>;
5688
5634
  /**
5689
- * @description Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first. Kostet 1 Credit.
5635
+ * @description Downloads the signed GISA PDF extract for a license (GISA-Zahl). Language defaults to German (De). Kostet 3 Credits.
5690
5636
  *
5691
- * @tags Oenace
5692
- * @name V1OenaceList
5693
- * @summary OeNACE classification catalog
5694
- * @request GET:/api/v1/oenace
5637
+ * @tags Trades
5638
+ * @name V1TradesDocumentsDetail
5639
+ * @summary GISA PDF extract
5640
+ * @request GET:/api/v1/trades/documents/{gisaZahl}
5695
5641
  * @secure
5696
5642
  */
5697
- v1OenaceList: (query?: {
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>>;
5649
+ /**
5650
+ * @description Returns the global catalog of GISA Trade Definitions with pagination. Kostet 1 Credit.
5651
+ *
5652
+ * @tags Trades
5653
+ * @name V1TradesList
5654
+ * @summary GISA trade catalog
5655
+ * @request GET:/api/v1/trades
5656
+ * @secure
5657
+ */
5658
+ v1TradesList: (query?: {
5698
5659
  search?: string;
5699
- /**
5700
- * Filter by hierarchy level (1–5). Omit to return all levels.
5701
- * @format int32
5702
- */
5703
- ebene?: number;
5704
5660
  /** @format int32 */
5705
5661
  minCompanyCount?: number;
5706
5662
  /**
@@ -5717,19 +5673,17 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5717
5673
  * @max 100
5718
5674
  */
5719
5675
  pageSize?: number;
5720
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfOenaceCatalogItemResponse, ApiError | ProblemDetails>>;
5676
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfTradeCatalogItemResponse, ApiError | ProblemDetails>>;
5721
5677
  /**
5722
- * @description Returns all legal forms with pagination and optional search, sorted by business count descending. Kostet 1 Credit.
5678
+ * @description Returns all company licenses for a specific trade definition with pagination. Kostet 1 Credit.
5723
5679
  *
5724
- * @tags LegalForms
5725
- * @name V1LegalformsList
5726
- * @summary Legal form catalog
5727
- * @request GET:/api/v1/legalforms
5680
+ * @tags Trades
5681
+ * @name V1TradesLicensesList
5682
+ * @summary Licenses by trade
5683
+ * @request GET:/api/v1/trades/{tradeKey}/licenses
5728
5684
  * @secure
5729
5685
  */
5730
- v1LegalformsList: (query?: {
5731
- /** @maxLength 200 */
5732
- search?: string;
5686
+ v1TradesLicensesList: (tradeKey: number, query?: {
5733
5687
  /**
5734
5688
  * 1-based page number; defaults to 1 when omitted.
5735
5689
  * @format int32
@@ -5744,32 +5698,37 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5744
5698
  * @max 100
5745
5699
  */
5746
5700
  pageSize?: number;
5747
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfLegalFormCatalogItemResponse, ApiError | ProblemDetails>>;
5701
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaLicense, ApiError | ProblemDetails>>;
5748
5702
  /**
5749
- * @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.
5750
5704
  *
5751
- * @tags Graph
5752
- * @name V1GraphList
5753
- * @summary Relationship graph
5754
- * @request GET:/api/v1/graph
5705
+ * @tags Trades
5706
+ * @name V1TradesCompanyDetail
5707
+ * @summary Company GISA licenses
5708
+ * @request GET:/api/v1/trades/company/{fnr}
5755
5709
  * @secure
5756
5710
  */
5757
- v1GraphList: (query?: {
5758
- /** Start from this person. Mutually exclusive with fnr. */
5759
- personId?: string;
5760
- /** 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. */
5761
- fnr?: string;
5762
- }, params?: RequestParams) => Promise<HttpResponse<GraphResponse, ApiError | ProblemDetails>>;
5711
+ v1TradesCompanyDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<GisaLicense[], ApiError | ProblemDetails>>;
5763
5712
  /**
5764
- * @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.
5765
5714
  *
5766
- * @tags GlobalChanges
5767
- * @name V1GlobalchangesList
5768
- * @summary All-register change feed
5769
- * @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}
5770
5719
  * @secure
5771
5720
  */
5772
- 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?: {
5773
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. */
5774
5733
  fnr?: string;
5775
5734
  /**
@@ -5796,41 +5755,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5796
5755
  * @max 100
5797
5756
  */
5798
5757
  pageSize?: number;
5799
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGlobalChange, ApiError | ProblemDetails>>;
5800
- /**
5801
- * @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.
5802
- *
5803
- * @tags GlobalChanges
5804
- * @name V1GlobalchangesAggregatedList
5805
- * @summary Aggregated watchlist changes
5806
- * @request GET:/api/v1/globalchanges/aggregated
5807
- * @secure
5808
- */
5809
- v1GlobalchangesAggregatedList: (query?: {
5810
- /** 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. */
5811
- fnr?: string[];
5812
- /** @format date-time */
5813
- since?: string;
5814
- /** @format int64 */
5815
- sinceId?: number;
5816
- /**
5817
- * Max number of changes to return per type. Default 500, max 2000.
5818
- * @format int32
5819
- * @min 1
5820
- * @max 2000
5821
- */
5822
- maxResultsPerType?: number;
5823
- }, params?: RequestParams) => Promise<HttpResponse<AggregatedChangesResponse, ApiError | ProblemDetails>>;
5824
- /**
5825
- * @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.
5826
- *
5827
- * @tags GlobalChanges
5828
- * @name V1GlobalchangesDetail
5829
- * @summary Change by id
5830
- * @request GET:/api/v1/globalchanges/{id}
5831
- * @secure
5832
- */
5833
- v1GlobalchangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<ChangeDetailResponse, ApiError | ProblemDetails>>;
5758
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaChange, ApiError | ProblemDetails>>;
5834
5759
  /**
5835
5760
  * @description Kostet 1 Credit.
5836
5761
  *
@@ -5870,91 +5795,34 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5870
5795
  * @max 1000
5871
5796
  */
5872
5797
  page?: number;
5873
- /**
5874
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5875
- * @format int32
5876
- * @min 1
5877
- * @max 100
5878
- */
5879
- pageSize?: number;
5880
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfFoerderungChange, ApiError | ProblemDetails>>;
5881
- /**
5882
- * @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.
5883
- *
5884
- * @tags Edikte
5885
- * @name V1EdikteChangesDetail
5886
- * @summary Edikt change by id
5887
- * @request GET:/api/v1/edikte/changes/{id}
5888
- * @secure
5889
- */
5890
- v1EdikteChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<EdiktChange, ApiError | ProblemDetails>>;
5891
- /**
5892
- * @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.
5893
- *
5894
- * @tags Edikte
5895
- * @name V1EdikteChangesList
5896
- * @summary Ediktsdatei change feed
5897
- * @request GET:/api/v1/edikte/changes
5898
- * @secure
5899
- */
5900
- v1EdikteChangesList: (query?: {
5901
- /** 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. */
5902
- fnr?: string;
5903
- /**
5904
- * 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.
5905
- * @format date-time
5906
- */
5907
- since?: string;
5908
- /**
5909
- * 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.
5910
- * @format int64
5911
- */
5912
- sinceId?: number;
5913
- /**
5914
- * 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.
5915
- * @format int32
5916
- * @min 1
5917
- * @max 1000
5918
- */
5919
- page?: number;
5920
- /**
5921
- * Number of items per page; defaults to 100 when omitted. A page shorter than this is the end of the feed.
5922
- * @format int32
5923
- * @min 1
5924
- * @max 100
5925
- */
5926
- pageSize?: number;
5927
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfEdiktChange, ApiError | ProblemDetails>>;
5928
- /**
5929
- * @description Downloads a Firmenbuch document (PDF/XML) by its document key. Kostet 3 Credits.
5930
- *
5931
- * @tags Documents
5932
- * @name V1DocumentsDownloadDetail
5933
- * @summary Firmenbuch document download
5934
- * @request GET:/api/v1/documents/download/{documentKey}
5935
- * @secure
5936
- */
5937
- v1DocumentsDownloadDetail: (documentKey: string, params?: RequestParams) => Promise<HttpResponse<void, string | ApiError | ProblemDetails>>;
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>>;
5938
5806
  /**
5939
- * @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.
5940
5808
  *
5941
- * @tags Documents
5942
- * @name V1DocumentsChangesDetail
5943
- * @summary Document change by id
5944
- * @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}
5945
5813
  * @secure
5946
5814
  */
5947
- v1DocumentsChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<DocumentChange, ApiError | ProblemDetails>>;
5815
+ v1EdikteChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<EdiktChange, ApiError | ProblemDetails>>;
5948
5816
  /**
5949
- * @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.
5950
5818
  *
5951
- * @tags Documents
5952
- * @name V1DocumentsChangesList
5953
- * @summary Document change feed
5954
- * @request GET:/api/v1/documents/changes
5819
+ * @tags Edikte
5820
+ * @name V1EdikteChangesList
5821
+ * @summary Ediktsdatei change feed
5822
+ * @request GET:/api/v1/edikte/changes
5955
5823
  * @secure
5956
5824
  */
5957
- v1DocumentsChangesList: (query?: {
5825
+ v1EdikteChangesList: (query?: {
5958
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. */
5959
5827
  fnr?: string;
5960
5828
  /**
@@ -5981,19 +5849,45 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5981
5849
  * @max 100
5982
5850
  */
5983
5851
  pageSize?: number;
5984
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfDocumentChange, ApiError | ProblemDetails>>;
5852
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfEdiktChange, ApiError | ProblemDetails>>;
5985
5853
  /**
5986
- * @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.
5987
5855
  *
5988
- * @tags Courts
5989
- * @name V1CourtsList
5990
- * @summary Court catalog
5991
- * @request GET:/api/v1/courts
5856
+ * @tags People
5857
+ * @name V1PeopleNamesList
5858
+ * @summary Person name index
5859
+ * @request GET:/api/v1/people/names
5992
5860
  * @secure
5993
5861
  */
5994
- v1CourtsList: (query?: {
5995
- /** @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;
5996
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;
5997
5891
  /**
5998
5892
  * 1-based page number; defaults to 1 when omitted.
5999
5893
  * @format int32
@@ -6008,7 +5902,17 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6008
5902
  * @max 100
6009
5903
  */
6010
5904
  pageSize?: number;
6011
- }, 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>>;
6012
5916
  /**
6013
5917
  * @description Resolve company names to FNRs by exact name match (1:1). Used for CSV import. Kostet 1 Credit.
6014
5918
  *
@@ -6020,7 +5924,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6020
5924
  */
6021
5925
  v1BusinessesResolveNamesCreate: (data: ResolveBusinessNamesRequest, params?: RequestParams) => Promise<HttpResponse<ResolveBusinessNamesResponse, ApiError | ProblemDetails>>;
6022
5926
  /**
6023
- * @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. Kostet 1 Credit.
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.
6024
5928
  *
6025
5929
  * @tags Businesses
6026
5930
  * @name V1BusinessesList
@@ -6036,8 +5940,10 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6036
5940
  courtCode?: string[];
6037
5941
  legalFormCode?: string[];
6038
5942
  zipCode?: string[];
6039
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
5943
+ /** 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. */
6040
5944
  state?: string[];
5945
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
5946
+ gemeinde?: string[];
6041
5947
  hasEdikt?: boolean;
6042
5948
  active?: boolean;
6043
5949
  /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
@@ -6633,8 +6539,10 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6633
6539
  courtCode?: string[];
6634
6540
  legalFormCode?: string[];
6635
6541
  zipCode?: string[];
6636
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
6542
+ /** 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. */
6637
6543
  state?: string[];
6544
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
6545
+ gemeinde?: string[];
6638
6546
  hasEdikt?: boolean;
6639
6547
  active?: boolean;
6640
6548
  /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
@@ -7189,7 +7097,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7189
7097
  * @secure
7190
7098
  */
7191
7099
  v1BusinessesFacetsList: (query?: {
7192
- /** 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. */
7193
7101
  groups?: string[];
7194
7102
  /**
7195
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.
@@ -7205,8 +7113,10 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7205
7113
  courtCode?: string[];
7206
7114
  legalFormCode?: string[];
7207
7115
  zipCode?: string[];
7208
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
7116
+ /** 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. */
7209
7117
  state?: string[];
7118
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
7119
+ gemeinde?: string[];
7210
7120
  hasEdikt?: boolean;
7211
7121
  active?: boolean;
7212
7122
  /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
@@ -7772,8 +7682,10 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7772
7682
  courtCode?: string[];
7773
7683
  legalFormCode?: string[];
7774
7684
  zipCode?: string[];
7775
- /** Filter by Bundesland: Burgenland, Kärnten, Niederösterreich, Oberösterreich, Salzburg, Steiermark, Tirol, Vorarlberg, Wien. The Firmenbuch stores no Bundesland, so the assignment is derived from the PLZ of the Geschäftsanschrift; it is exact except for the Innviertel PLZ 5120–5399, which are postally Salzburg but politically Oberösterreich. An unknown name is a 400. */
7685
+ /** 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. */
7776
7686
  state?: string[];
7687
+ /** Filter by Gemeinde slug, derived from the PLZ. GET /addresses/gemeinden lists them. Unknown slug is a 400. */
7688
+ gemeinde?: string[];
7777
7689
  hasEdikt?: boolean;
7778
7690
  active?: boolean;
7779
7691
  /** Filter by BMF Scheinunternehmen (LSU) list: true = only businesses on the list, false = only not on the list. */
@@ -8308,76 +8220,311 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8308
8220
  */
8309
8221
  "guv.WarenUndMaterialeinkauf_lte"?: number | null;
8310
8222
  /**
8311
- * Lower bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
8312
- * @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
8313
8406
  */
8314
- "guv.ZinsenUndAehnlicheAufwendungen_gte"?: number | null;
8407
+ page?: number;
8315
8408
  /**
8316
- * Upper bound (inclusive) for Filter by profit and loss item: ZinsenUndAehnlicheAufwendungen
8317
- * @format decimal
8409
+ * Number of items per page; defaults to 10 when omitted.
8410
+ * @format int32
8411
+ * @min 1
8412
+ * @max 100
8318
8413
  */
8319
- "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
8320
- }, params?: RequestParams) => Promise<HttpResponse<BusinessMapTopItem[], ApiError | ProblemDetails>>;
8414
+ pageSize?: number;
8415
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfZipCodeResponse, ApiError | ProblemDetails>>;
8321
8416
  /**
8322
- * @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.
8323
8418
  *
8324
- * @tags Businesses
8325
- * @name V1BusinessesSimilarList
8326
- * @summary Similar companies
8327
- * @request GET:/api/v1/businesses/{fnr}/similar
8419
+ * @tags Addresses
8420
+ * @name V1AddressesGemeindenList
8421
+ * @summary Gemeinden
8422
+ * @request GET:/api/v1/addresses/gemeinden
8328
8423
  * @secure
8329
8424
  */
8330
- v1BusinessesSimilarList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessListResponse[], ApiError | ProblemDetails>>;
8425
+ v1AddressesGemeindenList: (params?: RequestParams) => Promise<HttpResponse<GemeindeResponse[], ApiError | ProblemDetails>>;
8331
8426
  /**
8332
- * @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.
8333
8428
  *
8334
- * @tags Businesses
8335
- * @name V1BusinessesDetail
8336
- * @summary Company Firmenakte
8337
- * @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}
8338
8433
  * @secure
8339
8434
  */
8340
- v1BusinessesDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessDetailResponse, ApiError | ProblemDetails>>;
8435
+ v1DocumentsDownloadDetail: (documentKey: string, params?: RequestParams) => Promise<HttpResponse<void, string | ApiError | ProblemDetails>>;
8341
8436
  /**
8342
- * @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.
8343
8438
  *
8344
- * @tags Businesses
8345
- * @name V1BusinessesJahresabschluesseList
8346
- * @summary Company annual accounts
8347
- * @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}
8348
8443
  * @secure
8349
8444
  */
8350
- v1BusinessesJahresabschluesseList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<ParsedJahresabschlussDto[], ApiError | ProblemDetails>>;
8445
+ v1DocumentsChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<DocumentChange, ApiError | ProblemDetails>>;
8351
8446
  /**
8352
- * @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.
8353
8448
  *
8354
- * @tags Businesses
8355
- * @name V1BusinessesFoerderungenList
8356
- * @summary Company Foerderungen
8357
- * @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
8358
8453
  * @secure
8359
8454
  */
8360
- 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>>;
8361
8483
  /**
8362
- * @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.
8363
8485
  *
8364
- * @tags Businesses
8365
- * @name V1BusinessesChangesDetail
8366
- * @summary Firmenbuch change by id
8367
- * @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
8368
8490
  * @secure
8369
8491
  */
8370
- 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>>;
8371
8503
  /**
8372
- * @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.
8373
8505
  *
8374
- * @tags Businesses
8375
- * @name V1BusinessesChangesList
8376
- * @summary Firmenbuch change feed
8377
- * @request GET:/api/v1/businesses/changes
8506
+ * @tags Graph
8507
+ * @name V1GraphList
8508
+ * @summary Relationship graph
8509
+ * @request GET:/api/v1/graph
8378
8510
  * @secure
8379
8511
  */
8380
- 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?: {
8381
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. */
8382
8529
  fnr?: string;
8383
8530
  /**
@@ -8404,28 +8551,59 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8404
8551
  * @max 100
8405
8552
  */
8406
8553
  pageSize?: number;
8407
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessChange, ApiError | ProblemDetails>>;
8554
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGlobalChange, ApiError | ProblemDetails>>;
8408
8555
  /**
8409
- * @description Returns all assignment functions (code/text lookup) for display. Cached 24h. Kostet 1 Credit.
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.
8410
8557
  *
8411
- * @tags AssignmentFunctions
8412
- * @name V1AssignmentfunctionsList
8413
- * @summary Assignment function catalog
8414
- * @request GET:/api/v1/assignmentfunctions
8558
+ * @tags GlobalChanges
8559
+ * @name V1GlobalchangesAggregatedList
8560
+ * @summary Aggregated watchlist changes
8561
+ * @request GET:/api/v1/globalchanges/aggregated
8415
8562
  * @secure
8416
8563
  */
8417
- 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>>;
8418
8579
  /**
8419
- * @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.
8420
8581
  *
8421
- * @tags Addresses
8422
- * @name V1AddressesLocationsList
8423
- * @summary City and ZIP combinations
8424
- * @request GET:/api/v1/addresses/locations
8582
+ * @tags GlobalChanges
8583
+ * @name V1GlobalchangesDetail
8584
+ * @summary Change by id
8585
+ * @request GET:/api/v1/globalchanges/{id}
8425
8586
  * @secure
8426
8587
  */
8427
- 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?: {
8428
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;
8429
8607
  /**
8430
8608
  * 1-based page number; defaults to 1 when omitted.
8431
8609
  * @format int32
@@ -8440,17 +8618,18 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8440
8618
  * @max 100
8441
8619
  */
8442
8620
  pageSize?: number;
8443
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfAddressLocationResponse, ApiError | ProblemDetails>>;
8621
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfOenaceCatalogItemResponse, ApiError | ProblemDetails>>;
8444
8622
  /**
8445
- * @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.
8446
8624
  *
8447
- * @tags Addresses
8448
- * @name V1AddressesCitiesList
8449
- * @summary Cities
8450
- * @request GET:/api/v1/addresses/cities
8625
+ * @tags LegalForms
8626
+ * @name V1LegalformsList
8627
+ * @summary Legal form catalog
8628
+ * @request GET:/api/v1/legalforms
8451
8629
  * @secure
8452
8630
  */
8453
- v1AddressesCitiesList: (query?: {
8631
+ v1LegalformsList: (query?: {
8632
+ /** @maxLength 200 */
8454
8633
  search?: string;
8455
8634
  /**
8456
8635
  * 1-based page number; defaults to 1 when omitted.
@@ -8466,35 +8645,18 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8466
8645
  * @max 100
8467
8646
  */
8468
8647
  pageSize?: number;
8469
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCityResponse, ApiError | ProblemDetails>>;
8470
- /**
8471
- * @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.
8472
- *
8473
- * @tags Addresses
8474
- * @name V1AddressesSuggestList
8475
- * @summary Location autocomplete
8476
- * @request GET:/api/v1/addresses/suggest
8477
- * @secure
8478
- */
8479
- v1AddressesSuggestList: (query?: {
8480
- /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
8481
- search?: string;
8482
- /**
8483
- * How many suggestions to answer, across both lists; defaults to 10 when omitted.
8484
- * @format int32
8485
- */
8486
- top?: number;
8487
- }, params?: RequestParams) => Promise<HttpResponse<LocationSuggestionsResponse, ApiError | ProblemDetails>>;
8648
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfLegalFormCatalogItemResponse, ApiError | ProblemDetails>>;
8488
8649
  /**
8489
- * @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.
8490
8651
  *
8491
- * @tags Addresses
8492
- * @name V1AddressesZipcodesList
8493
- * @summary ZIP codes
8494
- * @request GET:/api/v1/addresses/zipcodes
8652
+ * @tags Courts
8653
+ * @name V1CourtsList
8654
+ * @summary Court catalog
8655
+ * @request GET:/api/v1/courts
8495
8656
  * @secure
8496
8657
  */
8497
- v1AddressesZipcodesList: (query?: {
8658
+ v1CourtsList: (query?: {
8659
+ /** @maxLength 200 */
8498
8660
  search?: string;
8499
8661
  /**
8500
8662
  * 1-based page number; defaults to 1 when omitted.
@@ -8510,7 +8672,17 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
8510
8672
  * @max 100
8511
8673
  */
8512
8674
  pageSize?: number;
8513
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfZipCodeResponse, ApiError | ProblemDetails>>;
8675
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCourtCatalogItemResponse, ApiError | ProblemDetails>>;
8676
+ /**
8677
+ * @description Returns all assignment functions (code/text lookup) for display. Cached 24h. Kostet 1 Credit.
8678
+ *
8679
+ * @tags AssignmentFunctions
8680
+ * @name V1AssignmentfunctionsList
8681
+ * @summary Assignment function catalog
8682
+ * @request GET:/api/v1/assignmentfunctions
8683
+ * @secure
8684
+ */
8685
+ v1AssignmentfunctionsList: (params?: RequestParams) => Promise<HttpResponse<AssignmentFunctionItemResponse[], ApiError | ProblemDetails>>;
8514
8686
  };
8515
8687
  }
8516
8688
  export {};