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