@firmenakte/api-client 1.0.5 → 2.1.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.js CHANGED
@@ -12,6 +12,7 @@
12
12
  */
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.Api = exports.HttpClient = exports.ContentType = exports.ChangeType = void 0;
15
+ /** 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. */
15
16
  var ChangeType;
16
17
  (function (ChangeType) {
17
18
  ChangeType["Business"] = "business";
@@ -195,6 +196,7 @@ class Api extends HttpClient {
195
196
  *
196
197
  * @tags Trades
197
198
  * @name V1TradesDocumentsDetail
199
+ * @summary Downloads the signed GISA PDF extract for a license (GISA-Zahl). Language defaults to German (De).
198
200
  * @request GET:/api/v1/trades/documents/{gisaZahl}
199
201
  * @secure
200
202
  */
@@ -210,6 +212,7 @@ class Api extends HttpClient {
210
212
  *
211
213
  * @tags Trades
212
214
  * @name V1TradesList
215
+ * @summary Returns the global catalog of GISA Trade Definitions with pagination.
213
216
  * @request GET:/api/v1/trades
214
217
  * @secure
215
218
  */
@@ -226,6 +229,7 @@ class Api extends HttpClient {
226
229
  *
227
230
  * @tags Trades
228
231
  * @name V1TradesLicensesList
232
+ * @summary Returns all company licenses for a specific trade definition with pagination.
229
233
  * @request GET:/api/v1/trades/{tradeKey}/licenses
230
234
  * @secure
231
235
  */
@@ -242,6 +246,7 @@ class Api extends HttpClient {
242
246
  *
243
247
  * @tags Trades
244
248
  * @name V1TradesCompanyDetail
249
+ * @summary Returns all licenses for a specific company (FNR).
245
250
  * @request GET:/api/v1/trades/company/{fnr}
246
251
  * @secure
247
252
  */
@@ -257,6 +262,7 @@ class Api extends HttpClient {
257
262
  *
258
263
  * @tags Trades
259
264
  * @name V1TradesChangesDetail
265
+ * @summary Returns a single GISA change by id.
260
266
  * @request GET:/api/v1/trades/changes/{id}
261
267
  * @secure
262
268
  */
@@ -268,10 +274,11 @@ class Api extends HttpClient {
268
274
  ...params,
269
275
  }),
270
276
  /**
271
- * No description
277
+ * @description 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.
272
278
  *
273
279
  * @tags Trades
274
280
  * @name V1TradesChangesList
281
+ * @summary Feed of GISA changes — one entry per change to a company's trade licences.
275
282
  * @request GET:/api/v1/trades/changes
276
283
  * @secure
277
284
  */
@@ -287,7 +294,24 @@ class Api extends HttpClient {
287
294
  * No description
288
295
  *
289
296
  * @tags People
297
+ * @name V1PeopleNamesList
298
+ * @summary Returns (id, name) pairs for all people with at least one business assignment. For client-side name index.
299
+ * @request GET:/api/v1/people/names
300
+ * @secure
301
+ */
302
+ v1PeopleNamesList: (params = {}) => this.request({
303
+ path: `/api/v1/people/names`,
304
+ method: "GET",
305
+ secure: true,
306
+ format: "json",
307
+ ...params,
308
+ }),
309
+ /**
310
+ * @description 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
311
+ *
312
+ * @tags People
290
313
  * @name V1PeopleList
314
+ * @summary Lists people who hold a function in, or a GISA licence for, an Austrian company.
291
315
  * @request GET:/api/v1/people
292
316
  * @secure
293
317
  */
@@ -300,10 +324,11 @@ class Api extends HttpClient {
300
324
  ...params,
301
325
  }),
302
326
  /**
303
- * No description
327
+ * @description 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.
304
328
  *
305
329
  * @tags People
306
330
  * @name V1PeopleDetail
331
+ * @summary Returns one person with every company function, GISA licence and Edikt attached to them.
307
332
  * @request GET:/api/v1/people/{personId}
308
333
  * @secure
309
334
  */
@@ -314,11 +339,29 @@ class Api extends HttpClient {
314
339
  format: "json",
315
340
  ...params,
316
341
  }),
342
+ /**
343
+ * No description
344
+ *
345
+ * @tags Oenace
346
+ * @name V1OenaceList
347
+ * @summary Returns the OeNACE classification catalog with company counts. Results are ordered by company count descending — most used first.
348
+ * @request GET:/api/v1/oenace
349
+ * @secure
350
+ */
351
+ v1OenaceList: (query, params = {}) => this.request({
352
+ path: `/api/v1/oenace`,
353
+ method: "GET",
354
+ query: query,
355
+ secure: true,
356
+ format: "json",
357
+ ...params,
358
+ }),
317
359
  /**
318
360
  * No description
319
361
  *
320
362
  * @tags LegalForms
321
363
  * @name V1LegalformsList
364
+ * @summary Returns all legal forms with pagination and optional search, sorted by business count descending.
322
365
  * @request GET:/api/v1/legalforms
323
366
  * @secure
324
367
  */
@@ -331,10 +374,11 @@ class Api extends HttpClient {
331
374
  ...params,
332
375
  }),
333
376
  /**
334
- * No description
377
+ * @description 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.
335
378
  *
336
379
  * @tags Graph
337
380
  * @name V1GraphList
381
+ * @summary Returns the graph (nodes and edges) within 2 hops of the start entity. Exactly one of personId or fnr must be provided.
338
382
  * @request GET:/api/v1/graph
339
383
  * @secure
340
384
  */
@@ -347,10 +391,11 @@ class Api extends HttpClient {
347
391
  ...params,
348
392
  }),
349
393
  /**
350
- * No description
394
+ * @description 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.
351
395
  *
352
396
  * @tags GlobalChanges
353
397
  * @name V1GlobalchangesList
398
+ * @summary The single feed of every change across all registers — Firmenbuch, GISA, Ediktsdatei and the BMF Scheinunternehmen list — as lightweight reference rows.
354
399
  * @request GET:/api/v1/globalchanges
355
400
  * @secure
356
401
  */
@@ -363,10 +408,11 @@ class Api extends HttpClient {
363
408
  ...params,
364
409
  }),
365
410
  /**
366
- * No description
411
+ * @description 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.
367
412
  *
368
413
  * @tags GlobalChanges
369
414
  * @name V1GlobalchangesAggregatedList
415
+ * @summary Changes for a watchlist of companies, all four change types in one unpaged response.
370
416
  * @request GET:/api/v1/globalchanges/aggregated
371
417
  * @secure
372
418
  */
@@ -379,10 +425,11 @@ class Api extends HttpClient {
379
425
  ...params,
380
426
  }),
381
427
  /**
382
- * No description
428
+ * @description 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.
383
429
  *
384
430
  * @tags GlobalChanges
385
431
  * @name V1GlobalchangesDetail
432
+ * @summary Returns one change with its typed payload, whichever register it came from.
386
433
  * @request GET:/api/v1/globalchanges/{id}
387
434
  * @secure
388
435
  */
@@ -394,10 +441,11 @@ class Api extends HttpClient {
394
441
  ...params,
395
442
  }),
396
443
  /**
397
- * No description
444
+ * @description The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "edikt" answers 404 here.
398
445
  *
399
446
  * @tags Edikte
400
447
  * @name V1EdikteChangesDetail
448
+ * @summary Returns one Ediktsdatei change by id.
401
449
  * @request GET:/api/v1/edikte/changes/{id}
402
450
  * @secure
403
451
  */
@@ -409,10 +457,11 @@ class Api extends HttpClient {
409
457
  ...params,
410
458
  }),
411
459
  /**
412
- * No description
460
+ * @description 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.
413
461
  *
414
462
  * @tags Edikte
415
463
  * @name V1EdikteChangesList
464
+ * @summary Feed of Ediktsdatei changes — insolvency and other court notices published about a company or a person.
416
465
  * @request GET:/api/v1/edikte/changes
417
466
  * @secure
418
467
  */
@@ -429,6 +478,7 @@ class Api extends HttpClient {
429
478
  *
430
479
  * @tags Documents
431
480
  * @name V1DocumentsDownloadDetail
481
+ * @summary Downloads a Firmenbuch document (PDF/XML) by its document key.
432
482
  * @request GET:/api/v1/documents/download/{documentKey}
433
483
  * @secure
434
484
  */
@@ -439,10 +489,11 @@ class Api extends HttpClient {
439
489
  ...params,
440
490
  }),
441
491
  /**
442
- * No description
492
+ * @description The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "document" answers 404 here.
443
493
  *
444
494
  * @tags Documents
445
495
  * @name V1DocumentsChangesDetail
496
+ * @summary Returns one document change by id, with the document's metadata.
446
497
  * @request GET:/api/v1/documents/changes/{id}
447
498
  * @secure
448
499
  */
@@ -454,10 +505,11 @@ class Api extends HttpClient {
454
505
  ...params,
455
506
  }),
456
507
  /**
457
- * No description
508
+ * @description 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.
458
509
  *
459
510
  * @tags Documents
460
511
  * @name V1DocumentsChangesList
512
+ * @summary Feed of newly filed Firmenbuch documents — this is how you learn that a company has published a new Jahresabschluss.
461
513
  * @request GET:/api/v1/documents/changes
462
514
  * @secure
463
515
  */
@@ -474,6 +526,7 @@ class Api extends HttpClient {
474
526
  *
475
527
  * @tags Courts
476
528
  * @name V1CourtsList
529
+ * @summary Returns all courts with pagination and optional search, sorted by business count descending.
477
530
  * @request GET:/api/v1/courts
478
531
  * @secure
479
532
  */
@@ -489,7 +542,26 @@ class Api extends HttpClient {
489
542
  * No description
490
543
  *
491
544
  * @tags Businesses
545
+ * @name V1BusinessesResolveNamesCreate
546
+ * @summary Resolve company names to FNRs by exact name match (1:1). Used for CSV import.
547
+ * @request POST:/api/v1/businesses/resolve-names
548
+ * @secure
549
+ */
550
+ v1BusinessesResolveNamesCreate: (data, params = {}) => this.request({
551
+ path: `/api/v1/businesses/resolve-names`,
552
+ method: "POST",
553
+ body: data,
554
+ secure: true,
555
+ type: ContentType.Json,
556
+ format: "json",
557
+ ...params,
558
+ }),
559
+ /**
560
+ * @description 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.
561
+ *
562
+ * @tags Businesses
492
563
  * @name V1BusinessesList
564
+ * @summary Lists companies matching the filters, one page of list rows per call.
493
565
  * @request GET:/api/v1/businesses
494
566
  * @secure
495
567
  */
@@ -505,7 +577,24 @@ class Api extends HttpClient {
505
577
  * No description
506
578
  *
507
579
  * @tags Businesses
580
+ * @name V1BusinessesNamesList
581
+ * @summary Returns all business (fnr, name) pairs for client-side name index. No pagination.
582
+ * @request GET:/api/v1/businesses/names
583
+ * @secure
584
+ */
585
+ v1BusinessesNamesList: (params = {}) => this.request({
586
+ path: `/api/v1/businesses/names`,
587
+ method: "GET",
588
+ secure: true,
589
+ format: "json",
590
+ ...params,
591
+ }),
592
+ /**
593
+ * @description 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.
594
+ *
595
+ * @tags Businesses
508
596
  * @name V1BusinessesCountList
597
+ * @summary Returns the number of companies in the dataset, as a bare integer.
509
598
  * @request GET:/api/v1/businesses/count
510
599
  * @secure
511
600
  */
@@ -520,13 +609,15 @@ class Api extends HttpClient {
520
609
  * No description
521
610
  *
522
611
  * @tags Businesses
523
- * @name V1BusinessesDetail
524
- * @request GET:/api/v1/businesses/{fnr}
612
+ * @name V1BusinessesAggregateList
613
+ * @summary 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.
614
+ * @request GET:/api/v1/businesses/aggregate
525
615
  * @secure
526
616
  */
527
- v1BusinessesDetail: (fnr, params = {}) => this.request({
528
- path: `/api/v1/businesses/${fnr}`,
617
+ v1BusinessesAggregateList: (query, params = {}) => this.request({
618
+ path: `/api/v1/businesses/aggregate`,
529
619
  method: "GET",
620
+ query: query,
530
621
  secure: true,
531
622
  format: "json",
532
623
  ...params,
@@ -535,21 +626,40 @@ class Api extends HttpClient {
535
626
  * No description
536
627
  *
537
628
  * @tags Businesses
538
- * @name V1BusinessesSyncCreate
539
- * @request POST:/api/v1/businesses/{fnr}/sync
629
+ * @name V1BusinessesSimilarList
630
+ * @summary Active businesses similar to the given one (same OeNACE branch, same region preferred).
631
+ * @request GET:/api/v1/businesses/{fnr}/similar
540
632
  * @secure
541
633
  */
542
- v1BusinessesSyncCreate: (fnr, params = {}) => this.request({
543
- path: `/api/v1/businesses/${fnr}/sync`,
544
- method: "POST",
634
+ v1BusinessesSimilarList: (fnr, params = {}) => this.request({
635
+ path: `/api/v1/businesses/${fnr}/similar`,
636
+ method: "GET",
545
637
  secure: true,
638
+ format: "json",
546
639
  ...params,
547
640
  }),
548
641
  /**
549
- * No description
642
+ * @description 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.
643
+ *
644
+ * @tags Businesses
645
+ * @name V1BusinessesDetail
646
+ * @summary Returns the whole Firmenakte of one company: master data, addresses, people, GISA licences, Edikte, documents and the parsed annual accounts.
647
+ * @request GET:/api/v1/businesses/{fnr}
648
+ * @secure
649
+ */
650
+ v1BusinessesDetail: (fnr, params = {}) => this.request({
651
+ path: `/api/v1/businesses/${fnr}`,
652
+ method: "GET",
653
+ secure: true,
654
+ format: "json",
655
+ ...params,
656
+ }),
657
+ /**
658
+ * @description The id is the shared change id from GET /globalchanges, so an id that exists but whose changeType is not "business" answers 404 here.
550
659
  *
551
660
  * @tags Businesses
552
661
  * @name V1BusinessesChangesDetail
662
+ * @summary Returns one Firmenbuch change by id.
553
663
  * @request GET:/api/v1/businesses/changes/{id}
554
664
  * @secure
555
665
  */
@@ -561,10 +671,11 @@ class Api extends HttpClient {
561
671
  ...params,
562
672
  }),
563
673
  /**
564
- * No description
674
+ * @description 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.
565
675
  *
566
676
  * @tags Businesses
567
677
  * @name V1BusinessesChangesList
678
+ * @summary Feed of Firmenbuch changes — one entry per new legal record (Eintragung).
568
679
  * @request GET:/api/v1/businesses/changes
569
680
  * @secure
570
681
  */
@@ -581,6 +692,7 @@ class Api extends HttpClient {
581
692
  *
582
693
  * @tags AssignmentFunctions
583
694
  * @name V1AssignmentfunctionsList
695
+ * @summary Returns all assignment functions (code/text lookup) for display. Cached 24h.
584
696
  * @request GET:/api/v1/assignmentfunctions
585
697
  * @secure
586
698
  */
@@ -596,6 +708,7 @@ class Api extends HttpClient {
596
708
  *
597
709
  * @tags Addresses
598
710
  * @name V1AddressesLocationsList
711
+ * @summary Returns unique City+ZipCode combinations from addresses with pagination and optional search.
599
712
  * @request GET:/api/v1/addresses/locations
600
713
  * @secure
601
714
  */
@@ -612,6 +725,7 @@ class Api extends HttpClient {
612
725
  *
613
726
  * @tags Addresses
614
727
  * @name V1AddressesCitiesList
728
+ * @summary Returns unique cities from addresses with pagination and optional search.
615
729
  * @request GET:/api/v1/addresses/cities
616
730
  * @secure
617
731
  */
@@ -628,6 +742,7 @@ class Api extends HttpClient {
628
742
  *
629
743
  * @tags Addresses
630
744
  * @name V1AddressesZipcodesList
745
+ * @summary Returns unique zip codes from addresses with pagination and optional search.
631
746
  * @request GET:/api/v1/addresses/zipcodes
632
747
  * @secure
633
748
  */