@firmenakte/api-client 2.3.1 → 2.7.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.
package/client.d.ts CHANGED
@@ -7,6 +7,11 @@ export declare enum ChangeType {
7
7
  Scheinunternehmen = "scheinunternehmen",
8
8
  Unknown = "unknown"
9
9
  }
10
+ /** The two files an export can produce. Same columns, same rows — only the serialiser differs. */
11
+ export declare enum BusinessExportFormat {
12
+ Csv = "Csv",
13
+ Xlsx = "Xlsx"
14
+ }
10
15
  /** Error body of the responses written before the request reaches an endpoint (401, 429). */
11
16
  export interface ApiError {
12
17
  /** Human-readable description of what was rejected. */
@@ -249,6 +254,10 @@ export interface BusinessDetailResponse {
249
254
  fnr?: string;
250
255
  /** 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. */
251
256
  euid?: string | null;
257
+ /** 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. */
258
+ uid?: string | null;
259
+ /** The company's URLs as the webscraper found them, its own site before its Impressum and the freshest first. Empty when none is known. */
260
+ websites?: BusinessWebsiteDto[];
252
261
  /** Current company name as registered in the Firmenbuch, including the legal-form suffix. */
253
262
  name?: string;
254
263
  /** Business purpose (Geschäftszweig) as filed with the Firmenbuch, free text. Null when none is on file. */
@@ -297,6 +306,33 @@ export interface BusinessDetailResponse {
297
306
  /** OENACE 2008 industry classifications assigned to the company. Filter by oenaceCode on /businesses; the catalogue is GET /oenace. */
298
307
  oenaces?: OenaceDto[];
299
308
  }
309
+ /** The eleven columns an export can carry, each on or off. The first nine are served by the company search, so an export is a projection of rows rather than a detail request per company; the two webscraper columns are read once for the whole export (#1270), never per company. */
310
+ export interface BusinessExportColumns {
311
+ /** Company name as registered. */
312
+ firmenname?: boolean;
313
+ /** Firmenbuchnummer. */
314
+ fnr?: boolean;
315
+ /** Whether the company is still active. */
316
+ aktiv?: boolean;
317
+ /** First registered address as one line. */
318
+ adresse?: boolean;
319
+ /** Legal form, spelled out. */
320
+ rechtsform?: boolean;
321
+ /** Primary OENACE 2008 classification as its numeric code. */
322
+ oenace?: boolean;
323
+ /** Latest balance-sheet total. */
324
+ bilanzsumme?: boolean;
325
+ /** Whether an Ediktsdatei notice is on file. */
326
+ edikt?: boolean;
327
+ /** Whether the company is on the BMF's Scheinunternehmen list. */
328
+ scheinunternehmen?: boolean;
329
+ /** The company's UID, as the webscraper last read it. Empty for a company none was found for. */
330
+ uid?: boolean;
331
+ /** The company's own site — the first URL in the website role. An Impressum URL is not one, so a company known only by its Impressum leaves this cell empty. */
332
+ website?: boolean;
333
+ /** True when the export would have no columns at all, which is not a file. */
334
+ none?: boolean;
335
+ }
300
336
  export interface BusinessFacetGroup {
301
337
  /** The group name, echoed back. */
302
338
  group?: string;
@@ -509,6 +545,18 @@ export interface BusinessSummaryDto {
509
545
  zipCode?: string | null;
510
546
  isActive?: boolean;
511
547
  }
548
+ /** One URL the webscraper found for a company, in one role. */
549
+ export interface BusinessWebsiteDto {
550
+ /** Absolute URL, host lower-cased, without a fragment. */
551
+ url?: string;
552
+ /** What the URL is to the company: website for its start page, impressum for the Impressum page the company data was read on. */
553
+ role?: string;
554
+ /**
555
+ * The day the URL was last seen naming this company. How fresh the entry is, not when the page itself changed.
556
+ * @format date
557
+ */
558
+ lastSeen?: string;
559
+ }
512
560
  /** Envelope for GET /api/v1/globalchanges/{id}. Exposes the resolved change type and the typed payload. */
513
561
  export interface ChangeDetailResponse {
514
562
  /** Discriminator: "business", "document", "edikt", "gisa", "scheinunternehmen", or "unknown". Read it before data. */
@@ -538,6 +586,15 @@ export interface CourtCatalogItemResponse {
538
586
  /** @format int32 */
539
587
  businessCount?: number;
540
588
  }
589
+ /** A new Liste. Everything but the name is optional. */
590
+ export interface CreateListRequest {
591
+ /** Display name. Blank or missing becomes "Neue Liste". */
592
+ name?: string | null;
593
+ /** Icon key, or null for none. */
594
+ icon?: string | null;
595
+ /** Companies to start the Liste with, in the order they should appear. */
596
+ fnrs?: string[] | null;
597
+ }
541
598
  export interface DocumentChange {
542
599
  /** @format int64 */
543
600
  id?: number;
@@ -574,6 +631,10 @@ export interface Edikt {
574
631
  displayName?: string | null;
575
632
  hinweis?: string | null;
576
633
  ergaenzung?: string | null;
634
+ beschreibung?: string | null;
635
+ kategorie?: string | null;
636
+ transaktion?: string | null;
637
+ adresse?: string | null;
577
638
  /** @format date */
578
639
  bekanntmachungsDatum?: string;
579
640
  /** @format date */
@@ -602,6 +663,31 @@ export interface EdiktChange {
602
663
  /** Which register a change came from, and therefore which typed feed and payload it belongs to: "business" the Firmenbuch, "document" a newly filed document, "edikt" the Ediktsdatei, "gisa" the trade register, "scheinunternehmen" the BMF list. "unknown" is a change we could not classify. */
603
664
  changeType?: ChangeType;
604
665
  }
666
+ export interface EntityTagHeaderValue {
667
+ tag?: StringSegment;
668
+ isWeak?: boolean;
669
+ }
670
+ /** Which companies to export and in which shape. Exactly one source is read, in the order below: an explicit set of companies, a Liste, or a saved Abfrage. */
671
+ export interface ExportBusinessesRequest {
672
+ /** The companies to export, in the order the file should list them. At most 1000; more is refused rather than cut short. */
673
+ fnrs?: string[] | null;
674
+ /** A Liste of the calling account: its companies, in the order it holds them. Same 1000-company cap as an explicit set, over the FNRs the Liste stores. */
675
+ listId?: string | null;
676
+ /** A saved Abfrage of the calling account: the companies its filters match right now, ordered the way the search orders them. Capped at 1000 rows. */
677
+ queryId?: string | null;
678
+ /** The two files an export can produce. Same columns, same rows — only the serialiser differs. */
679
+ format?: BusinessExportFormat;
680
+ /** The eleven columns an export can carry, each on or off. The first nine are served by the company search, so an export is a projection of rows rather than a detail request per company; the two webscraper columns are read once for the whole export (#1270), never per company. */
681
+ columns?: BusinessExportColumns | null;
682
+ }
683
+ export interface FileResult {
684
+ contentType?: string | null;
685
+ fileDownloadName?: string | null;
686
+ /** @format date-time */
687
+ lastModified?: string | null;
688
+ entityTag?: EntityTagHeaderValue | null;
689
+ enableRangeProcessing?: boolean;
690
+ }
605
691
  export interface GisaChange {
606
692
  /** @format int64 */
607
693
  id?: number;
@@ -673,8 +759,22 @@ export interface GlobalChange {
673
759
  export interface GraphEdgeDto {
674
760
  source?: string;
675
761
  target?: string;
762
+ /** 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. */
676
763
  isActive?: boolean;
764
+ /** "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". */
677
765
  relationshipType?: string;
766
+ /**
767
+ * The shareholder's übernommene Stammeinlage. Null on any edge but "ownership", and on an ownership edge whose Firmenbuch entry carries no KAPITAL.
768
+ * @format double
769
+ */
770
+ capitalAmount?: number | null;
771
+ /** The currency of CapitalAmount — ATS occurs in this data, not only EUR. */
772
+ currency?: string | null;
773
+ /**
774
+ * 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.
775
+ * @format double
776
+ */
777
+ sharePercent?: number | null;
678
778
  }
679
779
  export interface GraphNodeDto {
680
780
  id?: string;
@@ -774,12 +874,7 @@ export interface GuvDto {
774
874
  /** @format double */
775
875
  aufloesungGewinnruecklagen?: number | null;
776
876
  }
777
- export interface KeyFigureFilterDto {
778
- /** @format double */
779
- min?: number | null;
780
- /** @format double */
781
- max?: number | null;
782
- }
877
+ export type JsonDocument = any;
783
878
  /** 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. */
784
879
  export interface LegalForm {
785
880
  /** Firmenbuch legal-form code, e.g. "AG" or "GMBH". The value legalFormCode takes. */
@@ -814,6 +909,32 @@ export interface LegalRecordDetailDto {
814
909
  changeType?: string | null;
815
910
  changes?: LegalRecordChangeDto[];
816
911
  }
912
+ /** The companies to add to, or take off, a Liste. */
913
+ export interface ListMembersRequest {
914
+ /** Company numbers. An empty array is accepted and changes nothing. */
915
+ fnrs?: string[] | null;
916
+ }
917
+ /** A Liste: the companies one account watches, as the FNRs it holds. */
918
+ export interface ListResponse {
919
+ /** Stable id of the Liste. */
920
+ id: string;
921
+ /** What the account called it. */
922
+ name: string;
923
+ /** Icon key for the Liste, or null where it has none. */
924
+ icon?: string | null;
925
+ /** The companies on the Liste, in the order they were added. */
926
+ fnrs: string[];
927
+ /** Companies that were taken off again; re-adding one lifts it back out of here. */
928
+ removedFnrs: string[];
929
+ settings: JsonDocument;
930
+ }
931
+ /** The ranked suggestions of one term, split back into the two lists the filter renders. The two together are one ranking, not two: top caps their combined length. */
932
+ export interface LocationSuggestionsResponse {
933
+ /** ZIP+city suggestions, best first. */
934
+ locations?: AddressLocationResponse[];
935
+ /** Whole-city suggestions, best first. */
936
+ cities?: CityResponse[];
937
+ }
817
938
  export interface OenaceCatalogItemResponse {
818
939
  edvCode?: string;
819
940
  code?: string;
@@ -846,7 +967,7 @@ export interface PagedResponseOfAddressLocationResponse {
846
967
  */
847
968
  pageSize: number;
848
969
  /**
849
- * Total number of rows matching the filters, across all pages — not the length of data.
970
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
850
971
  * @format int32
851
972
  */
852
973
  totalRecords: number;
@@ -871,7 +992,7 @@ export interface PagedResponseOfBusinessChange {
871
992
  */
872
993
  pageSize: number;
873
994
  /**
874
- * Total number of rows matching the filters, across all pages — not the length of data.
995
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
875
996
  * @format int32
876
997
  */
877
998
  totalRecords: number;
@@ -896,7 +1017,7 @@ export interface PagedResponseOfBusinessListResponse {
896
1017
  */
897
1018
  pageSize: number;
898
1019
  /**
899
- * Total number of rows matching the filters, across all pages — not the length of data.
1020
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
900
1021
  * @format int32
901
1022
  */
902
1023
  totalRecords: number;
@@ -921,7 +1042,7 @@ export interface PagedResponseOfCityResponse {
921
1042
  */
922
1043
  pageSize: number;
923
1044
  /**
924
- * Total number of rows matching the filters, across all pages — not the length of data.
1045
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
925
1046
  * @format int32
926
1047
  */
927
1048
  totalRecords: number;
@@ -946,7 +1067,7 @@ export interface PagedResponseOfCourtCatalogItemResponse {
946
1067
  */
947
1068
  pageSize: number;
948
1069
  /**
949
- * Total number of rows matching the filters, across all pages — not the length of data.
1070
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
950
1071
  * @format int32
951
1072
  */
952
1073
  totalRecords: number;
@@ -971,7 +1092,7 @@ export interface PagedResponseOfDocumentChange {
971
1092
  */
972
1093
  pageSize: number;
973
1094
  /**
974
- * Total number of rows matching the filters, across all pages — not the length of data.
1095
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
975
1096
  * @format int32
976
1097
  */
977
1098
  totalRecords: number;
@@ -996,7 +1117,7 @@ export interface PagedResponseOfEdiktChange {
996
1117
  */
997
1118
  pageSize: number;
998
1119
  /**
999
- * Total number of rows matching the filters, across all pages — not the length of data.
1120
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1000
1121
  * @format int32
1001
1122
  */
1002
1123
  totalRecords: number;
@@ -1021,7 +1142,7 @@ export interface PagedResponseOfGisaChange {
1021
1142
  */
1022
1143
  pageSize: number;
1023
1144
  /**
1024
- * Total number of rows matching the filters, across all pages — not the length of data.
1145
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1025
1146
  * @format int32
1026
1147
  */
1027
1148
  totalRecords: number;
@@ -1046,7 +1167,7 @@ export interface PagedResponseOfGisaLicense {
1046
1167
  */
1047
1168
  pageSize: number;
1048
1169
  /**
1049
- * Total number of rows matching the filters, across all pages — not the length of data.
1170
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1050
1171
  * @format int32
1051
1172
  */
1052
1173
  totalRecords: number;
@@ -1071,7 +1192,7 @@ export interface PagedResponseOfGlobalChange {
1071
1192
  */
1072
1193
  pageSize: number;
1073
1194
  /**
1074
- * Total number of rows matching the filters, across all pages — not the length of data.
1195
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1075
1196
  * @format int32
1076
1197
  */
1077
1198
  totalRecords: number;
@@ -1096,7 +1217,7 @@ export interface PagedResponseOfLegalFormCatalogItemResponse {
1096
1217
  */
1097
1218
  pageSize: number;
1098
1219
  /**
1099
- * Total number of rows matching the filters, across all pages — not the length of data.
1220
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1100
1221
  * @format int32
1101
1222
  */
1102
1223
  totalRecords: number;
@@ -1121,7 +1242,7 @@ export interface PagedResponseOfOenaceCatalogItemResponse {
1121
1242
  */
1122
1243
  pageSize: number;
1123
1244
  /**
1124
- * Total number of rows matching the filters, across all pages — not the length of data.
1245
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1125
1246
  * @format int32
1126
1247
  */
1127
1248
  totalRecords: number;
@@ -1146,7 +1267,7 @@ export interface PagedResponseOfPerson {
1146
1267
  */
1147
1268
  pageSize: number;
1148
1269
  /**
1149
- * Total number of rows matching the filters, across all pages — not the length of data.
1270
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1150
1271
  * @format int32
1151
1272
  */
1152
1273
  totalRecords: number;
@@ -1171,7 +1292,7 @@ export interface PagedResponseOfTradeCatalogItemResponse {
1171
1292
  */
1172
1293
  pageSize: number;
1173
1294
  /**
1174
- * Total number of rows matching the filters, across all pages — not the length of data.
1295
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1175
1296
  * @format int32
1176
1297
  */
1177
1298
  totalRecords: number;
@@ -1196,7 +1317,7 @@ export interface PagedResponseOfZipCodeResponse {
1196
1317
  */
1197
1318
  pageSize: number;
1198
1319
  /**
1199
- * Total number of rows matching the filters, across all pages — not the length of data.
1320
+ * Total number of rows matching the filters, across all pages — not the length of data. The change feeds count it only as far as page reaches — 1000 × pageSize — where that exact value means "at least this many".
1200
1321
  * @format int32
1201
1322
  */
1202
1323
  totalRecords: number;
@@ -1304,6 +1425,24 @@ export interface ProblemDetails {
1304
1425
  /** Validation failures per field; present only on a model validation 400. */
1305
1426
  errors?: Record<string, string[]> | null;
1306
1427
  }
1428
+ /** A saved Abfrage: one filter set an account kept, to run again later. */
1429
+ export interface QueryResponse {
1430
+ /** Stable id of the Abfrage. */
1431
+ id: string;
1432
+ /** Icon key for the Abfrage, or null where it has none. */
1433
+ icon?: string | null;
1434
+ query: JsonDocument;
1435
+ /**
1436
+ * How many companies matched when the Abfrage was last saved. A snapshot: it is not recomputed on read and may have drifted.
1437
+ * @format int32
1438
+ */
1439
+ resultCount?: number | null;
1440
+ /**
1441
+ * When the Abfrage was last written, UTC. The Suchverlauf sorts on it.
1442
+ * @format date-time
1443
+ */
1444
+ updatedAt: string;
1445
+ }
1307
1446
  /** Request to resolve company names to FNRs by exact match (1:1). Used for CSV import. */
1308
1447
  export interface ResolveBusinessNamesRequest {
1309
1448
  /** Company names to resolve (trimmed, distinct, max 500). Order is preserved in the response. */
@@ -1318,6 +1457,17 @@ export interface ResolveBusinessNamesResultItem {
1318
1457
  name?: string;
1319
1458
  fnr?: string | null;
1320
1459
  }
1460
+ /** An Abfrage to keep: the filters, and what they matched when they ran. */
1461
+ export interface SaveQueryRequest {
1462
+ query?: JsonDocument | null;
1463
+ /**
1464
+ * How many companies the filters matched. Omit it where the count could not be determined — a missing count leaves the one the Abfrage already carries alone rather than erasing it.
1465
+ * @format int32
1466
+ */
1467
+ resultCount?: number | null;
1468
+ /** The Abfrage being edited. Sending it pins the row that is written, so an edit that changes the filters into another Abfrage's still updates this one instead of merging into that. Without it, a save that filters for the same companies as an existing Abfrage updates that one, which is what keeps throwaway searches out of the Suchverlauf. */
1469
+ updateId?: string | null;
1470
+ }
1321
1471
  /** One entry from the BMF LSU (Scheinunternehmen) RSS feed. Company entries have Fnr; natural-person entries have PersonId. */
1322
1472
  export interface ScheinunternehmenKundmachung {
1323
1473
  /** @format int64 */
@@ -1362,6 +1512,28 @@ export interface ScheinunternehmenKundmachungDto {
1362
1512
  /** @format date-time */
1363
1513
  zeitpunktAlsScheinunternehmen?: string | null;
1364
1514
  }
1515
+ /** One suggestion: a company or a person, whichever type names. The other property is null. */
1516
+ export interface SearchItemResponse {
1517
+ /** "business" or "person". */
1518
+ type?: string;
1519
+ /** One company as it appears in a list or on the map — the subset of the Firmenakte that a screening result needs. Fetch the rest with GET /businesses/{fnr}. */
1520
+ business?: BusinessListResponse | null;
1521
+ person?: Person | null;
1522
+ }
1523
+ /** Companies and people for one term, ranked into a single list. */
1524
+ export interface SearchResponse {
1525
+ /** The suggestions, best first. */
1526
+ data?: SearchItemResponse[];
1527
+ }
1528
+ export interface StringSegment {
1529
+ buffer?: string | null;
1530
+ /** @format int32 */
1531
+ offset?: number;
1532
+ /** @format int32 */
1533
+ length?: number;
1534
+ value?: string | null;
1535
+ hasValue?: boolean;
1536
+ }
1365
1537
  export interface TradeCatalogItemResponse {
1366
1538
  /** @format int32 */
1367
1539
  licenseKey?: number;
@@ -1369,12 +1541,233 @@ export interface TradeCatalogItemResponse {
1369
1541
  /** @format int32 */
1370
1542
  companyCount?: number;
1371
1543
  }
1544
+ /** A partial update of a Liste: every field is optional and only the ones sent are written. "Sent" is the property being present in the body, which is not the same as it being non-null — {"icon": null} clears the icon while an omitted icon leaves it alone. System.Text.Json calls a setter only for a property the body carries, so each setter records that it was called; a nullable property alone could not tell the two apart. */
1545
+ export interface UpdateListRequest {
1546
+ /** New display name. */
1547
+ name?: string | null;
1548
+ /** New icon key, or null to clear it. */
1549
+ icon?: string | null;
1550
+ /** The companies on the Liste, replacing the current set. */
1551
+ fnrs?: string[] | null;
1552
+ /** The companies taken off the Liste, replacing the current set. */
1553
+ removedFnrs?: string[] | null;
1554
+ settings?: JsonDocument | null;
1555
+ }
1372
1556
  export interface ZipCodeResponse {
1373
1557
  zipCode?: string;
1374
1558
  /** @format int32 */
1375
1559
  businessCount?: number;
1376
1560
  }
1377
1561
  export declare namespace Api {
1562
+ /**
1563
+ * @description Every saved Abfrage of the calling account, newest first.
1564
+ * @tags Queries
1565
+ * @name V1QueriesList
1566
+ * @summary Your Abfragen
1567
+ * @request GET:/api/v1/queries
1568
+ * @secure
1569
+ */
1570
+ namespace V1QueriesList {
1571
+ type RequestParams = {};
1572
+ type RequestQuery = {};
1573
+ type RequestBody = never;
1574
+ type RequestHeaders = {};
1575
+ type ResponseBody = QueryResponse[];
1576
+ }
1577
+ /**
1578
+ * @description Keeps a filter set. A save whose filters match an Abfrage the account already has updates that one instead of adding a second — pass updateId to pin the row being edited.
1579
+ * @tags Queries
1580
+ * @name V1QueriesCreate
1581
+ * @summary Save an Abfrage
1582
+ * @request POST:/api/v1/queries
1583
+ * @secure
1584
+ */
1585
+ namespace V1QueriesCreate {
1586
+ type RequestParams = {};
1587
+ type RequestQuery = {};
1588
+ type RequestBody = SaveQueryRequest;
1589
+ type RequestHeaders = {};
1590
+ type ResponseBody = QueryResponse;
1591
+ }
1592
+ /**
1593
+ * @description The saved Abfrage with this id, when it belongs to the calling account.
1594
+ * @tags Queries
1595
+ * @name V1QueriesDetail
1596
+ * @summary One Abfrage
1597
+ * @request GET:/api/v1/queries/{id}
1598
+ * @secure
1599
+ */
1600
+ namespace V1QueriesDetail {
1601
+ type RequestParams = {
1602
+ id: string;
1603
+ };
1604
+ type RequestQuery = {};
1605
+ type RequestBody = never;
1606
+ type RequestHeaders = {};
1607
+ type ResponseBody = QueryResponse;
1608
+ }
1609
+ /**
1610
+ * @description Removes one saved Abfrage from the Suchverlauf.
1611
+ * @tags Queries
1612
+ * @name V1QueriesDelete
1613
+ * @summary Delete an Abfrage
1614
+ * @request DELETE:/api/v1/queries/{id}
1615
+ * @secure
1616
+ */
1617
+ namespace V1QueriesDelete {
1618
+ type RequestParams = {
1619
+ id: string;
1620
+ };
1621
+ type RequestQuery = {};
1622
+ type RequestBody = never;
1623
+ type RequestHeaders = {};
1624
+ type ResponseBody = void;
1625
+ }
1626
+ /**
1627
+ * @description Deletes every saved Abfrage of the calling account.
1628
+ * @tags Queries
1629
+ * @name V1QueriesAllDelete
1630
+ * @summary Clear the Suchverlauf
1631
+ * @request DELETE:/api/v1/queries/all
1632
+ * @secure
1633
+ */
1634
+ namespace V1QueriesAllDelete {
1635
+ type RequestParams = {};
1636
+ type RequestQuery = {};
1637
+ type RequestBody = never;
1638
+ type RequestHeaders = {};
1639
+ type ResponseBody = void;
1640
+ }
1641
+ /**
1642
+ * @description Every Liste of the calling account, oldest first.
1643
+ * @tags Lists
1644
+ * @name V1ListsList
1645
+ * @summary Your Listen
1646
+ * @request GET:/api/v1/lists
1647
+ * @secure
1648
+ */
1649
+ namespace V1ListsList {
1650
+ type RequestParams = {};
1651
+ type RequestQuery = {};
1652
+ type RequestBody = never;
1653
+ type RequestHeaders = {};
1654
+ type ResponseBody = ListResponse[];
1655
+ }
1656
+ /**
1657
+ * @description Creates an empty Liste, or one already holding the companies you pass.
1658
+ * @tags Lists
1659
+ * @name V1ListsCreate
1660
+ * @summary Create a Liste
1661
+ * @request POST:/api/v1/lists
1662
+ * @secure
1663
+ */
1664
+ namespace V1ListsCreate {
1665
+ type RequestParams = {};
1666
+ type RequestQuery = {};
1667
+ type RequestBody = CreateListRequest;
1668
+ type RequestHeaders = {};
1669
+ type ResponseBody = ListResponse;
1670
+ }
1671
+ /**
1672
+ * @description The Liste with this id, when it belongs to the calling account.
1673
+ * @tags Lists
1674
+ * @name V1ListsDetail
1675
+ * @summary One Liste
1676
+ * @request GET:/api/v1/lists/{id}
1677
+ * @secure
1678
+ */
1679
+ namespace V1ListsDetail {
1680
+ type RequestParams = {
1681
+ id: string;
1682
+ };
1683
+ type RequestQuery = {};
1684
+ type RequestBody = never;
1685
+ type RequestHeaders = {};
1686
+ type ResponseBody = ListResponse;
1687
+ }
1688
+ /**
1689
+ * @description A partial update: only the fields the body carries are written, and settings are merged into the stored ones rather than replacing them.
1690
+ * @tags Lists
1691
+ * @name V1ListsPartialUpdate
1692
+ * @summary Update a Liste
1693
+ * @request PATCH:/api/v1/lists/{id}
1694
+ * @secure
1695
+ */
1696
+ namespace V1ListsPartialUpdate {
1697
+ type RequestParams = {
1698
+ id: string;
1699
+ };
1700
+ type RequestQuery = {};
1701
+ type RequestBody = UpdateListRequest;
1702
+ type RequestHeaders = {};
1703
+ type ResponseBody = ListResponse;
1704
+ }
1705
+ /**
1706
+ * @description Deletes the Liste. The companies on it are not touched anywhere else.
1707
+ * @tags Lists
1708
+ * @name V1ListsDelete
1709
+ * @summary Delete a Liste
1710
+ * @request DELETE:/api/v1/lists/{id}
1711
+ * @secure
1712
+ */
1713
+ namespace V1ListsDelete {
1714
+ type RequestParams = {
1715
+ id: string;
1716
+ };
1717
+ type RequestQuery = {};
1718
+ type RequestBody = never;
1719
+ type RequestHeaders = {};
1720
+ type ResponseBody = void;
1721
+ }
1722
+ /**
1723
+ * @description Appends the companies that are not on it yet, keeping the order of the ones that are. A company that had been taken off comes back off the removed set.
1724
+ * @tags Lists
1725
+ * @name V1ListsAddCreate
1726
+ * @summary Add companies to a Liste
1727
+ * @request POST:/api/v1/lists/{id}/add
1728
+ * @secure
1729
+ */
1730
+ namespace V1ListsAddCreate {
1731
+ type RequestParams = {
1732
+ id: string;
1733
+ };
1734
+ type RequestQuery = {};
1735
+ type RequestBody = ListMembersRequest;
1736
+ type RequestHeaders = {};
1737
+ type ResponseBody = ListResponse;
1738
+ }
1739
+ /**
1740
+ * @description Takes the companies off the Liste and records them as removed.
1741
+ * @tags Lists
1742
+ * @name V1ListsRemoveCreate
1743
+ * @summary Remove companies from a Liste
1744
+ * @request POST:/api/v1/lists/{id}/remove
1745
+ * @secure
1746
+ */
1747
+ namespace V1ListsRemoveCreate {
1748
+ type RequestParams = {
1749
+ id: string;
1750
+ };
1751
+ type RequestQuery = {};
1752
+ type RequestBody = ListMembersRequest;
1753
+ type RequestHeaders = {};
1754
+ type ResponseBody = ListResponse;
1755
+ }
1756
+ /**
1757
+ * @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.
1758
+ * @tags Exports
1759
+ * @name V1ExportsBusinessesCreate
1760
+ * @summary Export companies
1761
+ * @request POST:/api/v1/exports/businesses
1762
+ * @secure
1763
+ */
1764
+ namespace V1ExportsBusinessesCreate {
1765
+ type RequestParams = {};
1766
+ type RequestQuery = {};
1767
+ type RequestBody = ExportBusinessesRequest;
1768
+ type RequestHeaders = {};
1769
+ type ResponseBody = FileResult;
1770
+ }
1378
1771
  /**
1379
1772
  * @description Downloads the signed GISA PDF extract for a license (GISA-Zahl). Language defaults to German (De).
1380
1773
  * @tags Trades
@@ -1500,7 +1893,7 @@ export declare namespace Api {
1500
1893
  type ResponseBody = GisaChange;
1501
1894
  }
1502
1895
  /**
1503
- * @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. 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.
1896
+ * @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.
1504
1897
  * @tags Trades
1505
1898
  * @name V1TradesChangesList
1506
1899
  * @summary GISA change feed
@@ -1541,6 +1934,31 @@ export declare namespace Api {
1541
1934
  type RequestHeaders = {};
1542
1935
  type ResponseBody = PagedResponseOfGisaChange;
1543
1936
  }
1937
+ /**
1938
+ * @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.
1939
+ * @tags Search
1940
+ * @name V1SearchList
1941
+ * @summary Companies and people in one ranked list
1942
+ * @request GET:/api/v1/search
1943
+ * @secure
1944
+ */
1945
+ namespace V1SearchList {
1946
+ type RequestParams = {};
1947
+ type RequestQuery = {
1948
+ /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
1949
+ search?: string;
1950
+ /**
1951
+ * 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.
1952
+ * @format int32
1953
+ * @min 1
1954
+ * @max 100
1955
+ */
1956
+ pageSize?: number;
1957
+ };
1958
+ type RequestBody = never;
1959
+ type RequestHeaders = {};
1960
+ type ResponseBody = SearchResponse;
1961
+ }
1544
1962
  /**
1545
1963
  * @description Returns (id, name) pairs for all people with at least one business assignment. For client-side name index.
1546
1964
  * @tags People
@@ -1695,7 +2113,7 @@ export declare namespace Api {
1695
2113
  type ResponseBody = PagedResponseOfLegalFormCatalogItemResponse;
1696
2114
  }
1697
2115
  /**
1698
- * @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. ("address", two companies registered at the same street address, is a second edge type the deployment can enable; it is off today, so expect only assignment edges.) 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.
2116
+ * @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.
1699
2117
  * @tags Graph
1700
2118
  * @name V1GraphList
1701
2119
  * @summary Relationship graph
@@ -1715,7 +2133,7 @@ export declare namespace Api {
1715
2133
  type ResponseBody = GraphResponse;
1716
2134
  }
1717
2135
  /**
1718
- * @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. 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.
2136
+ * @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.
1719
2137
  * @tags GlobalChanges
1720
2138
  * @name V1GlobalchangesList
1721
2139
  * @summary All-register change feed
@@ -1822,7 +2240,7 @@ export declare namespace Api {
1822
2240
  type ResponseBody = EdiktChange;
1823
2241
  }
1824
2242
  /**
1825
- * @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. 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.
2243
+ * @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.
1826
2244
  * @tags Edikte
1827
2245
  * @name V1EdikteChangesList
1828
2246
  * @summary Ediktsdatei change feed
@@ -1899,7 +2317,7 @@ export declare namespace Api {
1899
2317
  type ResponseBody = DocumentChange;
1900
2318
  }
1901
2319
  /**
1902
- * @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. 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.
2320
+ * @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.
1903
2321
  * @tags Documents
1904
2322
  * @name V1DocumentsChangesList
1905
2323
  * @summary Document change feed
@@ -3739,7 +4157,7 @@ export declare namespace Api {
3739
4157
  type ResponseBody = BusinessFacetsResponse;
3740
4158
  }
3741
4159
  /**
3742
- * @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 towns holding the most companies 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. Cached for an hour rather than the day GET /businesses gets: view counts move.
4160
+ * @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.
3743
4161
  * @tags Businesses
3744
4162
  * @name V1BusinessesMapTopList
3745
4163
  * @summary Top company per Bundesland or city
@@ -4361,7 +4779,7 @@ export declare namespace Api {
4361
4779
  type ResponseBody = BusinessChange;
4362
4780
  }
4363
4781
  /**
4364
- * @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. 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.
4782
+ * @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.
4365
4783
  * @tags Businesses
4366
4784
  * @name V1BusinessesChangesList
4367
4785
  * @summary Firmenbuch change feed
@@ -4479,6 +4897,29 @@ export declare namespace Api {
4479
4897
  type RequestHeaders = {};
4480
4898
  type ResponseBody = PagedResponseOfCityResponse;
4481
4899
  }
4900
+ /**
4901
+ * @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.
4902
+ * @tags Addresses
4903
+ * @name V1AddressesSuggestList
4904
+ * @summary Location autocomplete
4905
+ * @request GET:/api/v1/addresses/suggest
4906
+ * @secure
4907
+ */
4908
+ namespace V1AddressesSuggestList {
4909
+ type RequestParams = {};
4910
+ type RequestQuery = {
4911
+ /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
4912
+ search?: string;
4913
+ /**
4914
+ * How many suggestions to answer, across both lists; defaults to 10 when omitted.
4915
+ * @format int32
4916
+ */
4917
+ top?: number;
4918
+ };
4919
+ type RequestBody = never;
4920
+ type RequestHeaders = {};
4921
+ type ResponseBody = LocationSuggestionsResponse;
4922
+ }
4482
4923
  /**
4483
4924
  * @description Returns unique zip codes from addresses with pagination and optional search.
4484
4925
  * @tags Addresses
@@ -4577,6 +5018,136 @@ export declare class HttpClient<SecurityDataType = unknown> {
4577
5018
  */
4578
5019
  export declare class Api<SecurityDataType extends unknown> extends HttpClient<SecurityDataType> {
4579
5020
  api: {
5021
+ /**
5022
+ * @description Every saved Abfrage of the calling account, newest first.
5023
+ *
5024
+ * @tags Queries
5025
+ * @name V1QueriesList
5026
+ * @summary Your Abfragen
5027
+ * @request GET:/api/v1/queries
5028
+ * @secure
5029
+ */
5030
+ v1QueriesList: (params?: RequestParams) => Promise<HttpResponse<QueryResponse[], ApiError | ProblemDetails>>;
5031
+ /**
5032
+ * @description Keeps a filter set. A save whose filters match an Abfrage the account already has updates that one instead of adding a second — pass updateId to pin the row being edited.
5033
+ *
5034
+ * @tags Queries
5035
+ * @name V1QueriesCreate
5036
+ * @summary Save an Abfrage
5037
+ * @request POST:/api/v1/queries
5038
+ * @secure
5039
+ */
5040
+ v1QueriesCreate: (data: SaveQueryRequest, params?: RequestParams) => Promise<HttpResponse<QueryResponse, ApiError | ProblemDetails>>;
5041
+ /**
5042
+ * @description The saved Abfrage with this id, when it belongs to the calling account.
5043
+ *
5044
+ * @tags Queries
5045
+ * @name V1QueriesDetail
5046
+ * @summary One Abfrage
5047
+ * @request GET:/api/v1/queries/{id}
5048
+ * @secure
5049
+ */
5050
+ v1QueriesDetail: (id: string, params?: RequestParams) => Promise<HttpResponse<QueryResponse, ApiError | ProblemDetails>>;
5051
+ /**
5052
+ * @description Removes one saved Abfrage from the Suchverlauf.
5053
+ *
5054
+ * @tags Queries
5055
+ * @name V1QueriesDelete
5056
+ * @summary Delete an Abfrage
5057
+ * @request DELETE:/api/v1/queries/{id}
5058
+ * @secure
5059
+ */
5060
+ v1QueriesDelete: (id: string, params?: RequestParams) => Promise<HttpResponse<void, ApiError | ProblemDetails>>;
5061
+ /**
5062
+ * @description Deletes every saved Abfrage of the calling account.
5063
+ *
5064
+ * @tags Queries
5065
+ * @name V1QueriesAllDelete
5066
+ * @summary Clear the Suchverlauf
5067
+ * @request DELETE:/api/v1/queries/all
5068
+ * @secure
5069
+ */
5070
+ v1QueriesAllDelete: (params?: RequestParams) => Promise<HttpResponse<void, ApiError | ProblemDetails>>;
5071
+ /**
5072
+ * @description Every Liste of the calling account, oldest first.
5073
+ *
5074
+ * @tags Lists
5075
+ * @name V1ListsList
5076
+ * @summary Your Listen
5077
+ * @request GET:/api/v1/lists
5078
+ * @secure
5079
+ */
5080
+ v1ListsList: (params?: RequestParams) => Promise<HttpResponse<ListResponse[], ApiError | ProblemDetails>>;
5081
+ /**
5082
+ * @description Creates an empty Liste, or one already holding the companies you pass.
5083
+ *
5084
+ * @tags Lists
5085
+ * @name V1ListsCreate
5086
+ * @summary Create a Liste
5087
+ * @request POST:/api/v1/lists
5088
+ * @secure
5089
+ */
5090
+ v1ListsCreate: (data: CreateListRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5091
+ /**
5092
+ * @description The Liste with this id, when it belongs to the calling account.
5093
+ *
5094
+ * @tags Lists
5095
+ * @name V1ListsDetail
5096
+ * @summary One Liste
5097
+ * @request GET:/api/v1/lists/{id}
5098
+ * @secure
5099
+ */
5100
+ v1ListsDetail: (id: string, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5101
+ /**
5102
+ * @description A partial update: only the fields the body carries are written, and settings are merged into the stored ones rather than replacing them.
5103
+ *
5104
+ * @tags Lists
5105
+ * @name V1ListsPartialUpdate
5106
+ * @summary Update a Liste
5107
+ * @request PATCH:/api/v1/lists/{id}
5108
+ * @secure
5109
+ */
5110
+ v1ListsPartialUpdate: (id: string, data: UpdateListRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5111
+ /**
5112
+ * @description Deletes the Liste. The companies on it are not touched anywhere else.
5113
+ *
5114
+ * @tags Lists
5115
+ * @name V1ListsDelete
5116
+ * @summary Delete a Liste
5117
+ * @request DELETE:/api/v1/lists/{id}
5118
+ * @secure
5119
+ */
5120
+ v1ListsDelete: (id: string, params?: RequestParams) => Promise<HttpResponse<void, ApiError | ProblemDetails>>;
5121
+ /**
5122
+ * @description Appends the companies that are not on it yet, keeping the order of the ones that are. A company that had been taken off comes back off the removed set.
5123
+ *
5124
+ * @tags Lists
5125
+ * @name V1ListsAddCreate
5126
+ * @summary Add companies to a Liste
5127
+ * @request POST:/api/v1/lists/{id}/add
5128
+ * @secure
5129
+ */
5130
+ v1ListsAddCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5131
+ /**
5132
+ * @description Takes the companies off the Liste and records them as removed.
5133
+ *
5134
+ * @tags Lists
5135
+ * @name V1ListsRemoveCreate
5136
+ * @summary Remove companies from a Liste
5137
+ * @request POST:/api/v1/lists/{id}/remove
5138
+ * @secure
5139
+ */
5140
+ v1ListsRemoveCreate: (id: string, data: ListMembersRequest, params?: RequestParams) => Promise<HttpResponse<ListResponse, ApiError | ProblemDetails>>;
5141
+ /**
5142
+ * @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.
5143
+ *
5144
+ * @tags Exports
5145
+ * @name V1ExportsBusinessesCreate
5146
+ * @summary Export companies
5147
+ * @request POST:/api/v1/exports/businesses
5148
+ * @secure
5149
+ */
5150
+ v1ExportsBusinessesCreate: (data: ExportBusinessesRequest, params?: RequestParams) => Promise<HttpResponse<FileResult, ApiError | ProblemDetails>>;
4580
5151
  /**
4581
5152
  * @description Downloads the signed GISA PDF extract for a license (GISA-Zahl). Language defaults to German (De).
4582
5153
  *
@@ -4591,7 +5162,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4591
5162
  historical?: boolean;
4592
5163
  /** @default "De" */
4593
5164
  language?: "De" | "En";
4594
- }, params?: RequestParams) => Promise<HttpResponse<Blob, ProblemDetails | ApiError>>;
5165
+ }, params?: RequestParams) => Promise<HttpResponse<Blob, ApiError | ProblemDetails>>;
4595
5166
  /**
4596
5167
  * @description Returns the global catalog of GISA Trade Definitions with pagination.
4597
5168
  *
@@ -4619,7 +5190,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4619
5190
  * @max 100
4620
5191
  */
4621
5192
  pageSize?: number;
4622
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfTradeCatalogItemResponse, ProblemDetails | ApiError>>;
5193
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfTradeCatalogItemResponse, ApiError | ProblemDetails>>;
4623
5194
  /**
4624
5195
  * @description Returns all company licenses for a specific trade definition with pagination.
4625
5196
  *
@@ -4644,7 +5215,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4644
5215
  * @max 100
4645
5216
  */
4646
5217
  pageSize?: number;
4647
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaLicense, ProblemDetails | ApiError>>;
5218
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaLicense, ApiError | ProblemDetails>>;
4648
5219
  /**
4649
5220
  * @description Returns all licenses for a specific company (FNR).
4650
5221
  *
@@ -4654,7 +5225,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4654
5225
  * @request GET:/api/v1/trades/company/{fnr}
4655
5226
  * @secure
4656
5227
  */
4657
- v1TradesCompanyDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<GisaLicense[], ProblemDetails | ApiError>>;
5228
+ v1TradesCompanyDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<GisaLicense[], ApiError | ProblemDetails>>;
4658
5229
  /**
4659
5230
  * @description Returns a single GISA change by id.
4660
5231
  *
@@ -4664,9 +5235,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4664
5235
  * @request GET:/api/v1/trades/changes/{id}
4665
5236
  * @secure
4666
5237
  */
4667
- v1TradesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<GisaChange, ProblemDetails | ApiError>>;
5238
+ v1TradesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<GisaChange, ApiError | ProblemDetails>>;
4668
5239
  /**
4669
- * @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. 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.
5240
+ * @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.
4670
5241
  *
4671
5242
  * @tags Trades
4672
5243
  * @name V1TradesChangesList
@@ -4701,7 +5272,27 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4701
5272
  * @max 100
4702
5273
  */
4703
5274
  pageSize?: number;
4704
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaChange, ProblemDetails | ApiError>>;
5275
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGisaChange, ApiError | ProblemDetails>>;
5276
+ /**
5277
+ * @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.
5278
+ *
5279
+ * @tags Search
5280
+ * @name V1SearchList
5281
+ * @summary Companies and people in one ranked list
5282
+ * @request GET:/api/v1/search
5283
+ * @secure
5284
+ */
5285
+ v1SearchList: (query?: {
5286
+ /** The term. Empty answers an empty list — this endpoint suggests, it does not list. */
5287
+ search?: string;
5288
+ /**
5289
+ * 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.
5290
+ * @format int32
5291
+ * @min 1
5292
+ * @max 100
5293
+ */
5294
+ pageSize?: number;
5295
+ }, params?: RequestParams) => Promise<HttpResponse<SearchResponse, ApiError | ProblemDetails>>;
4705
5296
  /**
4706
5297
  * @description Returns (id, name) pairs for all people with at least one business assignment. For client-side name index.
4707
5298
  *
@@ -4711,7 +5302,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4711
5302
  * @request GET:/api/v1/people/names
4712
5303
  * @secure
4713
5304
  */
4714
- v1PeopleNamesList: (params?: RequestParams) => Promise<HttpResponse<PersonNameItem[], ProblemDetails | ApiError>>;
5305
+ v1PeopleNamesList: (params?: RequestParams) => Promise<HttpResponse<PersonNameItem[], ApiError | ProblemDetails>>;
4715
5306
  /**
4716
5307
  * @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
4717
5308
  *
@@ -4757,7 +5348,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4757
5348
  * @max 100
4758
5349
  */
4759
5350
  pageSize?: number;
4760
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfPerson, ProblemDetails | ApiError>>;
5351
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfPerson, ApiError | ProblemDetails>>;
4761
5352
  /**
4762
5353
  * @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.
4763
5354
  *
@@ -4767,7 +5358,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4767
5358
  * @request GET:/api/v1/people/{personId}
4768
5359
  * @secure
4769
5360
  */
4770
- v1PeopleDetail: (personId: string, params?: RequestParams) => Promise<HttpResponse<PersonDetailResponse, ProblemDetails | ApiError>>;
5361
+ v1PeopleDetail: (personId: string, params?: RequestParams) => Promise<HttpResponse<PersonDetailResponse, ApiError | ProblemDetails>>;
4771
5362
  /**
4772
5363
  * @description Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first.
4773
5364
  *
@@ -4800,7 +5391,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4800
5391
  * @max 100
4801
5392
  */
4802
5393
  pageSize?: number;
4803
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfOenaceCatalogItemResponse, ProblemDetails | ApiError>>;
5394
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfOenaceCatalogItemResponse, ApiError | ProblemDetails>>;
4804
5395
  /**
4805
5396
  * @description Returns all legal forms with pagination and optional search, sorted by business count descending.
4806
5397
  *
@@ -4827,9 +5418,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4827
5418
  * @max 100
4828
5419
  */
4829
5420
  pageSize?: number;
4830
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfLegalFormCatalogItemResponse, ProblemDetails | ApiError>>;
5421
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfLegalFormCatalogItemResponse, ApiError | ProblemDetails>>;
4831
5422
  /**
4832
- * @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. ("address", two companies registered at the same street address, is a second edge type the deployment can enable; it is off today, so expect only assignment edges.) 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.
5423
+ * @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.
4833
5424
  *
4834
5425
  * @tags Graph
4835
5426
  * @name V1GraphList
@@ -4842,9 +5433,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4842
5433
  personId?: string;
4843
5434
  /** 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. */
4844
5435
  fnr?: string;
4845
- }, params?: RequestParams) => Promise<HttpResponse<GraphResponse, ProblemDetails | ApiError>>;
5436
+ }, params?: RequestParams) => Promise<HttpResponse<GraphResponse, ApiError | ProblemDetails>>;
4846
5437
  /**
4847
- * @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. 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.
5438
+ * @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.
4848
5439
  *
4849
5440
  * @tags GlobalChanges
4850
5441
  * @name V1GlobalchangesList
@@ -4879,7 +5470,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4879
5470
  * @max 100
4880
5471
  */
4881
5472
  pageSize?: number;
4882
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGlobalChange, ProblemDetails | ApiError>>;
5473
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfGlobalChange, ApiError | ProblemDetails>>;
4883
5474
  /**
4884
5475
  * @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.
4885
5476
  *
@@ -4903,7 +5494,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4903
5494
  * @max 2000
4904
5495
  */
4905
5496
  maxResultsPerType?: number;
4906
- }, params?: RequestParams) => Promise<HttpResponse<AggregatedChangesResponse, ProblemDetails | ApiError>>;
5497
+ }, params?: RequestParams) => Promise<HttpResponse<AggregatedChangesResponse, ApiError | ProblemDetails>>;
4907
5498
  /**
4908
5499
  * @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 or ScheinunternehmenChange. Since data is a union, read changeType before it.
4909
5500
  *
@@ -4913,7 +5504,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4913
5504
  * @request GET:/api/v1/globalchanges/{id}
4914
5505
  * @secure
4915
5506
  */
4916
- v1GlobalchangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<ChangeDetailResponse, ProblemDetails | ApiError>>;
5507
+ v1GlobalchangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<ChangeDetailResponse, ApiError | ProblemDetails>>;
4917
5508
  /**
4918
5509
  * @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.
4919
5510
  *
@@ -4923,9 +5514,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4923
5514
  * @request GET:/api/v1/edikte/changes/{id}
4924
5515
  * @secure
4925
5516
  */
4926
- v1EdikteChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<EdiktChange, ProblemDetails | ApiError>>;
5517
+ v1EdikteChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<EdiktChange, ApiError | ProblemDetails>>;
4927
5518
  /**
4928
- * @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. 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.
5519
+ * @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.
4929
5520
  *
4930
5521
  * @tags Edikte
4931
5522
  * @name V1EdikteChangesList
@@ -4960,7 +5551,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4960
5551
  * @max 100
4961
5552
  */
4962
5553
  pageSize?: number;
4963
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfEdiktChange, ProblemDetails | ApiError>>;
5554
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfEdiktChange, ApiError | ProblemDetails>>;
4964
5555
  /**
4965
5556
  * @description Downloads a Firmenbuch document (PDF/XML) by its document key.
4966
5557
  *
@@ -4970,7 +5561,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4970
5561
  * @request GET:/api/v1/documents/download/{documentKey}
4971
5562
  * @secure
4972
5563
  */
4973
- v1DocumentsDownloadDetail: (documentKey: string, params?: RequestParams) => Promise<HttpResponse<void, string | ProblemDetails | ApiError>>;
5564
+ v1DocumentsDownloadDetail: (documentKey: string, params?: RequestParams) => Promise<HttpResponse<void, string | ApiError | ProblemDetails>>;
4974
5565
  /**
4975
5566
  * @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.
4976
5567
  *
@@ -4980,9 +5571,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
4980
5571
  * @request GET:/api/v1/documents/changes/{id}
4981
5572
  * @secure
4982
5573
  */
4983
- v1DocumentsChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<DocumentChange, ProblemDetails | ApiError>>;
5574
+ v1DocumentsChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<DocumentChange, ApiError | ProblemDetails>>;
4984
5575
  /**
4985
- * @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. 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.
5576
+ * @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.
4986
5577
  *
4987
5578
  * @tags Documents
4988
5579
  * @name V1DocumentsChangesList
@@ -5017,7 +5608,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5017
5608
  * @max 100
5018
5609
  */
5019
5610
  pageSize?: number;
5020
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfDocumentChange, ProblemDetails | ApiError>>;
5611
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfDocumentChange, ApiError | ProblemDetails>>;
5021
5612
  /**
5022
5613
  * @description Returns all courts with pagination and optional search, sorted by business count descending.
5023
5614
  *
@@ -5044,7 +5635,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5044
5635
  * @max 100
5045
5636
  */
5046
5637
  pageSize?: number;
5047
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCourtCatalogItemResponse, ProblemDetails | ApiError>>;
5638
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCourtCatalogItemResponse, ApiError | ProblemDetails>>;
5048
5639
  /**
5049
5640
  * @description Resolve company names to FNRs by exact name match (1:1). Used for CSV import.
5050
5641
  *
@@ -5054,7 +5645,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5054
5645
  * @request POST:/api/v1/businesses/resolve-names
5055
5646
  * @secure
5056
5647
  */
5057
- v1BusinessesResolveNamesCreate: (data: ResolveBusinessNamesRequest, params?: RequestParams) => Promise<HttpResponse<ResolveBusinessNamesResponse, ProblemDetails | ApiError>>;
5648
+ v1BusinessesResolveNamesCreate: (data: ResolveBusinessNamesRequest, params?: RequestParams) => Promise<HttpResponse<ResolveBusinessNamesResponse, ApiError | ProblemDetails>>;
5058
5649
  /**
5059
5650
  * @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. Pass countOnly=true for totalRecords without the rows, and use /businesses/aggregate to group the same filter set instead of paging through it.
5060
5651
  *
@@ -5615,7 +6206,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5615
6206
  * @format decimal
5616
6207
  */
5617
6208
  "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
5618
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessListResponse, ProblemDetails | ApiError>>;
6209
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessListResponse, ApiError | ProblemDetails>>;
5619
6210
  /**
5620
6211
  * @description Returns all business (fnr, name) pairs for client-side name index. No pagination.
5621
6212
  *
@@ -5625,7 +6216,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5625
6216
  * @request GET:/api/v1/businesses/names
5626
6217
  * @secure
5627
6218
  */
5628
- v1BusinessesNamesList: (params?: RequestParams) => Promise<HttpResponse<BusinessNameItem[], ProblemDetails | ApiError>>;
6219
+ v1BusinessesNamesList: (params?: RequestParams) => Promise<HttpResponse<BusinessNameItem[], ApiError | ProblemDetails>>;
5629
6220
  /**
5630
6221
  * @description Returns the number of companies in the dataset, as a bare integer. Unfiltered — it is the size of the whole dataset, not of a search. For a count over filters, call GET /businesses with countOnly=true and read totalRecords.
5631
6222
  *
@@ -5635,7 +6226,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
5635
6226
  * @request GET:/api/v1/businesses/count
5636
6227
  * @secure
5637
6228
  */
5638
- v1BusinessesCountList: (params?: RequestParams) => Promise<HttpResponse<number, ProblemDetails | ApiError>>;
6229
+ v1BusinessesCountList: (params?: RequestParams) => Promise<HttpResponse<number, ApiError | ProblemDetails>>;
5639
6230
  /**
5640
6231
  * @description Counts over the same filter set as GET /businesses, grouped by one dimension — the server-side GROUP BY that a caller would otherwise page the whole result set to compute. Every /businesses filter means exactly what it means there; page, pageSize, orderBy, orderByDescending and countOnly are ignored — top and minCount cap the bucket list instead. totalRecords equals /businesses?countOnly=true for the same filter; how the buckets relate to it is documented on BusinessAggregateResponse.
5641
6232
  *
@@ -6210,7 +6801,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6210
6801
  * @format decimal
6211
6802
  */
6212
6803
  "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
6213
- }, params?: RequestParams) => Promise<HttpResponse<BusinessAggregateResponse, ProblemDetails | ApiError>>;
6804
+ }, params?: RequestParams) => Promise<HttpResponse<BusinessAggregateResponse, ApiError | ProblemDetails>>;
6214
6805
  /**
6215
6806
  * @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.
6216
6807
  *
@@ -6780,9 +7371,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
6780
7371
  * @format decimal
6781
7372
  */
6782
7373
  "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
6783
- }, params?: RequestParams) => Promise<HttpResponse<BusinessFacetsResponse, ProblemDetails | ApiError>>;
7374
+ }, params?: RequestParams) => Promise<HttpResponse<BusinessFacetsResponse, ApiError | ProblemDetails>>;
6784
7375
  /**
6785
- * @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 towns holding the most companies 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. Cached for an hour rather than the day GET /businesses gets: view counts move.
7376
+ * @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.
6786
7377
  *
6787
7378
  * @tags Businesses
6788
7379
  * @name V1BusinessesMapTopList
@@ -7345,7 +7936,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7345
7936
  * @format decimal
7346
7937
  */
7347
7938
  "guv.ZinsenUndAehnlicheAufwendungen_lte"?: number | null;
7348
- }, params?: RequestParams) => Promise<HttpResponse<BusinessMapTopItem[], ProblemDetails | ApiError>>;
7939
+ }, params?: RequestParams) => Promise<HttpResponse<BusinessMapTopItem[], ApiError | ProblemDetails>>;
7349
7940
  /**
7350
7941
  * @description Active businesses similar to the given one (same OeNACE branch, same region preferred).
7351
7942
  *
@@ -7355,7 +7946,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7355
7946
  * @request GET:/api/v1/businesses/{fnr}/similar
7356
7947
  * @secure
7357
7948
  */
7358
- v1BusinessesSimilarList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessListResponse[], ProblemDetails | ApiError>>;
7949
+ v1BusinessesSimilarList: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessListResponse[], ApiError | ProblemDetails>>;
7359
7950
  /**
7360
7951
  * @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.
7361
7952
  *
@@ -7365,7 +7956,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7365
7956
  * @request GET:/api/v1/businesses/{fnr}
7366
7957
  * @secure
7367
7958
  */
7368
- v1BusinessesDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessDetailResponse, ProblemDetails | ApiError>>;
7959
+ v1BusinessesDetail: (fnr: string, params?: RequestParams) => Promise<HttpResponse<BusinessDetailResponse, ApiError | ProblemDetails>>;
7369
7960
  /**
7370
7961
  * @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.
7371
7962
  *
@@ -7375,9 +7966,9 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7375
7966
  * @request GET:/api/v1/businesses/changes/{id}
7376
7967
  * @secure
7377
7968
  */
7378
- v1BusinessesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<BusinessChange, ProblemDetails | ApiError>>;
7969
+ v1BusinessesChangesDetail: (id: number, params?: RequestParams) => Promise<HttpResponse<BusinessChange, ApiError | ProblemDetails>>;
7379
7970
  /**
7380
- * @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. 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.
7971
+ * @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.
7381
7972
  *
7382
7973
  * @tags Businesses
7383
7974
  * @name V1BusinessesChangesList
@@ -7412,7 +8003,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7412
8003
  * @max 100
7413
8004
  */
7414
8005
  pageSize?: number;
7415
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessChange, ProblemDetails | ApiError>>;
8006
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfBusinessChange, ApiError | ProblemDetails>>;
7416
8007
  /**
7417
8008
  * @description Returns all assignment functions (code/text lookup) for display. Cached 24h.
7418
8009
  *
@@ -7422,7 +8013,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7422
8013
  * @request GET:/api/v1/assignmentfunctions
7423
8014
  * @secure
7424
8015
  */
7425
- v1AssignmentfunctionsList: (params?: RequestParams) => Promise<HttpResponse<AssignmentFunctionItemResponse[], ProblemDetails | ApiError>>;
8016
+ v1AssignmentfunctionsList: (params?: RequestParams) => Promise<HttpResponse<AssignmentFunctionItemResponse[], ApiError | ProblemDetails>>;
7426
8017
  /**
7427
8018
  * @description Returns unique City+ZipCode combinations from addresses with pagination and optional search.
7428
8019
  *
@@ -7448,7 +8039,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7448
8039
  * @max 100
7449
8040
  */
7450
8041
  pageSize?: number;
7451
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfAddressLocationResponse, ProblemDetails | ApiError>>;
8042
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfAddressLocationResponse, ApiError | ProblemDetails>>;
7452
8043
  /**
7453
8044
  * @description Returns unique cities from addresses with pagination and optional search.
7454
8045
  *
@@ -7474,7 +8065,25 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7474
8065
  * @max 100
7475
8066
  */
7476
8067
  pageSize?: number;
7477
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCityResponse, ProblemDetails | ApiError>>;
8068
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfCityResponse, ApiError | ProblemDetails>>;
8069
+ /**
8070
+ * @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.
8071
+ *
8072
+ * @tags Addresses
8073
+ * @name V1AddressesSuggestList
8074
+ * @summary Location autocomplete
8075
+ * @request GET:/api/v1/addresses/suggest
8076
+ * @secure
8077
+ */
8078
+ v1AddressesSuggestList: (query?: {
8079
+ /** The term to rank against. Shorter than two characters it is ignored entirely and the biggest groups come back instead. */
8080
+ search?: string;
8081
+ /**
8082
+ * How many suggestions to answer, across both lists; defaults to 10 when omitted.
8083
+ * @format int32
8084
+ */
8085
+ top?: number;
8086
+ }, params?: RequestParams) => Promise<HttpResponse<LocationSuggestionsResponse, ApiError | ProblemDetails>>;
7478
8087
  /**
7479
8088
  * @description Returns unique zip codes from addresses with pagination and optional search.
7480
8089
  *
@@ -7500,7 +8109,7 @@ export declare class Api<SecurityDataType extends unknown> extends HttpClient<Se
7500
8109
  * @max 100
7501
8110
  */
7502
8111
  pageSize?: number;
7503
- }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfZipCodeResponse, ProblemDetails | ApiError>>;
8112
+ }, params?: RequestParams) => Promise<HttpResponse<PagedResponseOfZipCodeResponse, ApiError | ProblemDetails>>;
7504
8113
  };
7505
8114
  }
7506
8115
  export {};