From bcc0a1712eb9a921140c68f72e9598a852520271 Mon Sep 17 00:00:00 2001
From: eden wang <64514273+eyw520@users.noreply.github.com>
Date: Fri, 22 Nov 2024 18:36:07 -0500
Subject: [PATCH] fix(cli): docs generation now preserves original model schema
 names. (#5255)

* fix(cli): docs generation now preserves original model schema names.

* chore: update changelog

* Add test cases & refine `getSchemaName`.

* Update versions.yml.

---------

Co-authored-by: eyw520 <eyw520@users.noreply.github.com>
---
 .../converters/endpoint/convertParameters.ts  |     2 +-
 .../operation/convertAsyncSyncOperation.ts    |     2 +-
 .../operation/convertHttpOperation.ts         |     2 +-
 .../operation/convertWebhookOperation.ts      |     2 +-
 .../v3/extensions/getVariableDefinitions.ts   |     7 +-
 .../src/openapi/v3/generateIr.ts              |     7 +-
 .../openapi/openapi-ir-parser/src/options.ts  |     5 +-
 .../openapi/openapi-ir-parser/src/parse.ts    |     3 +-
 .../src/schema/convertObject.ts               |     7 +-
 .../src/schema/convertSchemas.ts              |    13 +-
 .../src/schema/convertUndiscriminatedOneOf.ts |     7 +-
 .../src/schema/utils/getSchemaName.ts         |    18 +-
 .../__snapshots__/openapi-docs/ntropy.json    | 10921 ++++++++++
 .../__snapshots__/openapi-ir/ntropy.json      | 17567 ++++++++++++++++
 .../__snapshots__/openapi/ntropy.json         | 10019 +++++++++
 .../fixtures/ntropy/fern/fern.config.json     |     4 +
 .../fixtures/ntropy/fern/generators.yml       |     3 +
 .../src/__test__/fixtures/ntropy/openapi.yml  |  4145 ++++
 .../fixtures/ntropy/personalization.json      |   568 +
 .../src/__test__/openapiDocs.test.ts          |     2 +-
 packages/cli/cli/src/cli.ts                   |    11 +-
 .../src/commands/docs-dev/devDocsWorkspace.ts |     2 +-
 .../generate/generateDocsWorkspace.ts         |     2 +-
 .../writeDefinitionForWorkspaces.ts           |     6 +-
 packages/cli/cli/versions.yml                 |     7 +
 packages/cli/docs-preview/src/previewDocs.ts  |     2 +-
 .../lazy-fern-workspace/src/OSSWorkspace.ts   |     9 +-
 .../cli/project-loader/src/loadProject.ts     |     1 +
 28 files changed, 43312 insertions(+), 32 deletions(-)
 create mode 100644 packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-docs/ntropy.json
 create mode 100644 packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-ir/ntropy.json
 create mode 100644 packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi/ntropy.json
 create mode 100644 packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/fern.config.json
 create mode 100644 packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/generators.yml
 create mode 100644 packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/openapi.yml
 create mode 100644 packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/personalization.json

diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/endpoint/convertParameters.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/endpoint/convertParameters.ts
index b2a18deb15a..b0803ca4e08 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/endpoint/convertParameters.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/endpoint/convertParameters.ts
@@ -63,7 +63,7 @@ export function convertParameters({
         const availability = convertAvailability(resolvedParameter);
 
         const parameterBreadcrumbs = [...requestBreadcrumbs, resolvedParameter.name];
-        const generatedName = getGeneratedTypeName(parameterBreadcrumbs);
+        const generatedName = getGeneratedTypeName(parameterBreadcrumbs, context.options.preserveSchemaIds);
 
         let schema =
             resolvedParameter.schema != null
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertAsyncSyncOperation.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertAsyncSyncOperation.ts
index 460573cd163..0701018e7fe 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertAsyncSyncOperation.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertAsyncSyncOperation.ts
@@ -69,7 +69,7 @@ export function convertAsyncSyncOperation({
         name: headerToIgnore,
         schema: SchemaWithExample.literal({
             nameOverride: undefined,
-            generatedName: getGeneratedTypeName([headerToIgnore]),
+            generatedName: getGeneratedTypeName([headerToIgnore], context.options.preserveSchemaIds),
             title: undefined,
             description: undefined,
             availability: undefined,
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertHttpOperation.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertHttpOperation.ts
index c69febdce1d..c01c372bf7a 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertHttpOperation.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertHttpOperation.ts
@@ -121,7 +121,7 @@ export function convertHttpOperation({
         queryParameters: convertedParameters.queryParameters,
         headers: convertedParameters.headers,
         requestNameOverride: requestNameOverride ?? undefined,
-        generatedRequestName: getGeneratedTypeName(requestBreadcrumbs),
+        generatedRequestName: getGeneratedTypeName(requestBreadcrumbs, context.options.preserveSchemaIds),
         request: convertedRequest,
         response: convertedResponse.value,
         errors: convertedResponse.errors,
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertWebhookOperation.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertWebhookOperation.ts
index ee5f1a984b8..13968c1df3d 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertWebhookOperation.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/converters/operation/convertWebhookOperation.ts
@@ -64,7 +64,7 @@ export function convertWebhookOperation({
         operationId: operation.operationId,
         tags: context.resolveTagsToTagIds(operation.tags),
         headers: convertedParameters.headers,
-        generatedPayloadName: getGeneratedTypeName(payloadBreadcrumbs),
+        generatedPayloadName: getGeneratedTypeName(payloadBreadcrumbs, context.options.preserveSchemaIds),
         payload: convertedPayload.schema,
         description: operation.description,
         examples: convertWebhookExamples(convertedPayload.fullExamples),
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/extensions/getVariableDefinitions.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/extensions/getVariableDefinitions.ts
index 8a3d27de161..e6de1fe8d5a 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/extensions/getVariableDefinitions.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/extensions/getVariableDefinitions.ts
@@ -5,7 +5,10 @@ import { getDefaultAsString } from "../../../schema/defaults/getDefault";
 import { getGeneratedTypeName } from "../../../schema/utils/getSchemaName";
 import { FernOpenAPIExtension } from "./fernExtensions";
 
-export function getVariableDefinitions(document: OpenAPIV3.Document): Record<string, PrimitiveSchema> {
+export function getVariableDefinitions(
+    document: OpenAPIV3.Document,
+    preserveSchemaIds: boolean
+): Record<string, PrimitiveSchema> {
     const variables = getExtension<Record<string, OpenAPIV3.SchemaObject>>(
         document,
         FernOpenAPIExtension.SDK_VARIABLES
@@ -22,7 +25,7 @@ export function getVariableDefinitions(document: OpenAPIV3.Document): Record<str
                     variableName,
                     {
                         nameOverride: undefined,
-                        generatedName: getGeneratedTypeName([variableName]),
+                        generatedName: getGeneratedTypeName([variableName], preserveSchemaIds),
                         title: schema.title,
                         schema: PrimitiveSchemaValue.string({
                             default: getDefaultAsString(schema),
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/generateIr.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/generateIr.ts
index 888ae2fa49f..86850e7d149 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/generateIr.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/openapi/v3/generateIr.ts
@@ -91,7 +91,7 @@ export function generateIr({
         source,
         namespace
     });
-    const variables = getVariableDefinitions(openApi);
+    const variables = getVariableDefinitions(openApi, options.preserveSchemaIds);
     const globalHeaders = getGlobalHeaders(openApi);
     const idempotencyHeaders = getIdempotencyHeaders(openApi);
 
@@ -465,7 +465,10 @@ function maybeAddBackDiscriminantsFromSchemas(
                         ...property,
                         schema: SchemaWithExample.literal({
                             nameOverride: undefined,
-                            generatedName: getGeneratedTypeName([schema.generatedName, discriminantValue]),
+                            generatedName: getGeneratedTypeName(
+                                [schema.generatedName, discriminantValue],
+                                context.options.preserveSchemaIds
+                            ),
                             title: undefined,
                             value: LiteralSchemaValue.string(discriminantValue),
                             groupName: undefined,
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/options.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/options.ts
index 0a6316c0897..4d35dc3127c 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/options.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/options.ts
@@ -19,6 +19,8 @@ export interface ParseOpenAPIOptions {
     onlyIncludeReferencedSchemas: boolean;
     /* Whether or not to include path parameters in the in-lined request */
     inlinePathParameters: boolean;
+    /* Whether or not to preserve original schema Ids in the IR */
+    preserveSchemaIds: boolean;
 }
 
 export const DEFAULT_PARSE_OPENAPI_SETTINGS: ParseOpenAPIOptions = {
@@ -30,5 +32,6 @@ export const DEFAULT_PARSE_OPENAPI_SETTINGS: ParseOpenAPIOptions = {
     cooerceEnumsToLiterals: true,
     respectReadonlySchemas: false,
     onlyIncludeReferencedSchemas: false,
-    inlinePathParameters: false
+    inlinePathParameters: false,
+    preserveSchemaIds: false
 };
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/parse.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/parse.ts
index 2f90e6ee199..149863578d5 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/parse.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/parse.ts
@@ -206,7 +206,8 @@ function getParseOptions({
         inlinePathParameters:
             overrides?.inlinePathParameters ??
             specSettings?.inlinePathParameters ??
-            DEFAULT_PARSE_OPENAPI_SETTINGS.inlinePathParameters
+            DEFAULT_PARSE_OPENAPI_SETTINGS.inlinePathParameters,
+        preserveSchemaIds: overrides?.preserveSchemaIds ?? DEFAULT_PARSE_OPENAPI_SETTINGS.preserveSchemaIds
     };
 }
 
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertObject.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertObject.ts
index be636225c99..0dcd74d5f44 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertObject.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertObject.ts
@@ -127,7 +127,12 @@ export function convertObject({
             }
             parents.push({
                 schemaId,
-                convertedSchema: convertToReferencedSchema(allOfElement, [schemaId], source),
+                convertedSchema: convertToReferencedSchema(
+                    allOfElement,
+                    [schemaId],
+                    source,
+                    context.options.preserveSchemaIds
+                ),
                 properties: getAllProperties({ schema: allOfElement, context, breadcrumbs, source, namespace })
             });
             context.markSchemaAsReferencedByNonRequest(schemaId);
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertSchemas.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertSchemas.ts
index 3c969959bec..07de8a6f125 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertSchemas.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertSchemas.ts
@@ -115,12 +115,14 @@ export function convertReferenceObject(
               namespace,
               new Set()
           )
-        : SchemaWithExample.reference(convertToReferencedSchema(schema, breadcrumbs, source));
+        : SchemaWithExample.reference(
+              convertToReferencedSchema(schema, breadcrumbs, source, context.options.preserveSchemaIds)
+          );
     if (wrapAsNullable) {
         return SchemaWithExample.nullable({
             title: undefined,
             nameOverride: undefined,
-            generatedName: getGeneratedTypeName(breadcrumbs),
+            generatedName: getGeneratedTypeName(breadcrumbs, context.options.preserveSchemaIds),
             value: referenceSchema,
             description: undefined,
             availability: undefined,
@@ -166,7 +168,7 @@ export function convertSchemaObject(
     let groupName: SdkGroupName = (typeof mixedGroupName === "string" ? [mixedGroupName] : mixedGroupName) ?? [];
     groupName = context.resolveGroupName(groupName);
 
-    const generatedName = getGeneratedTypeName(breadcrumbs);
+    const generatedName = getGeneratedTypeName(breadcrumbs, context.options.preserveSchemaIds);
     const title = schema.title;
     const description = schema.description;
     const availability = convertAvailability(schema);
@@ -935,10 +937,11 @@ export function getSchemaIdFromReference(ref: OpenAPIV3.ReferenceObject): string
 export function convertToReferencedSchema(
     schema: OpenAPIV3.ReferenceObject,
     breadcrumbs: string[],
-    source: Source
+    source: Source,
+    preserveSchemaIds: boolean
 ): ReferencedSchema {
     const nameOverride = getExtension<string>(schema, FernOpenAPIExtension.TYPE_NAME);
-    const generatedName = getGeneratedTypeName(breadcrumbs);
+    const generatedName = getGeneratedTypeName(breadcrumbs, preserveSchemaIds);
     // eslint-disable-next-line @typescript-eslint/no-explicit-any
     const description = (schema as any).description;
     const availability = convertAvailability(schema);
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertUndiscriminatedOneOf.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertUndiscriminatedOneOf.ts
index eb99f23f498..34aabed2039 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertUndiscriminatedOneOf.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/convertUndiscriminatedOneOf.ts
@@ -66,7 +66,7 @@ export function convertUndiscriminatedOneOf({
             return schema.enum.map((enumValue) => {
                 return SchemaWithExample.literal({
                     nameOverride: undefined,
-                    generatedName: getGeneratedTypeName([generatedName, enumValue]),
+                    generatedName: getGeneratedTypeName([generatedName, enumValue], context.options.preserveSchemaIds),
                     title: undefined,
                     value: LiteralSchemaValue.string(enumValue),
                     groupName: undefined,
@@ -201,7 +201,10 @@ export function convertUndiscriminatedOneOfWithDiscriminant({
             subtypeReference.properties = {
                 [discriminator.propertyName]: SchemaWithExample.literal({
                     nameOverride: undefined,
-                    generatedName: getGeneratedTypeName([generatedName, discriminantValue]),
+                    generatedName: getGeneratedTypeName(
+                        [generatedName, discriminantValue],
+                        context.options.preserveSchemaIds
+                    ),
                     title: undefined,
                     value: LiteralSchemaValue.string(discriminantValue),
                     groupName: undefined,
diff --git a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/utils/getSchemaName.ts b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/utils/getSchemaName.ts
index b854ffaa1db..d8cd9a88d84 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/utils/getSchemaName.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-parser/src/schema/utils/getSchemaName.ts
@@ -1,9 +1,17 @@
 import { camelCase, upperFirst } from "lodash-es";
 import { replaceStartingNumber } from "./replaceStartingNumber";
 
-export function getGeneratedTypeName(breadcrumbs: string[]): string {
-    const underscoreDelimeted = breadcrumbs.join("_");
-    const name = upperFirst(camelCase(underscoreDelimeted));
+export function getGeneratedTypeName(breadcrumbs: string[], useOriginalSchemaIds: boolean): string {
+    const processedTokens = breadcrumbs.map((token) => {
+        if (/^[^a-zA-Z0-9]+$/.test(token)) {
+            return token;
+        } else {
+            return upperFirst(camelCase(token));
+        }
+    });
+
+    const name = processedTokens.join("");
+
     if (/^\d/.test(name)) {
         return replaceStartingNumber(name) ?? name;
     }
@@ -11,6 +19,6 @@ export function getGeneratedTypeName(breadcrumbs: string[]): string {
 }
 
 export function getGeneratedPropertyName(breadcrumbs: string[]): string {
-    const underscoreDelimeted = breadcrumbs.join("_");
-    return camelCase(underscoreDelimeted);
+    const underscoreDelimited = breadcrumbs.join("_");
+    return camelCase(underscoreDelimited);
 }
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-docs/ntropy.json b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-docs/ntropy.json
new file mode 100644
index 00000000000..da9a04af27f
--- /dev/null
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-docs/ntropy.json
@@ -0,0 +1,10921 @@
+{
+  "absoluteFilePath": "/DUMMY_PATH",
+  "importedDefinitions": {},
+  "namedDefinitionFiles": {
+    "__package__.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "errors": {
+          "CreateAccountHolderV3AccountHoldersPostRequestBadRequestError": {
+            "docs": "Account holder with the provided id already exists.",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "CreateAccountHolderV3AccountHoldersPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "CustomCategoriesPostV3CategoriesAccountHolderTypePostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "DeleteAccountHolderV3AccountHoldersIdDeleteRequestNotFoundError": {
+            "docs": "Account holder with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "DeleteAccountHolderV3AccountHoldersIdDeleteRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "DeleteBankStatementV3BankStatementsIdDeleteRequestNotFoundError": {
+            "docs": "Bank statement with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "DeleteBankStatementV3BankStatementsIdDeleteRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "DeleteCustomCategorySetV3CategoriesAccountHolderTypeResetPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "DeleteReportV3ReportsIdDeleteRequestNotFoundError": {
+            "docs": "Report with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "DeleteReportV3ReportsIdDeleteRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "DeleteTransactionV3TransactionsIdDeleteRequestNotFoundError": {
+            "docs": "Transaction with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "DeleteTransactionV3TransactionsIdDeleteRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "DeleteWebhookV3WebhooksIdDeleteRequestNotFoundError": {
+            "docs": "Webhook with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "DeleteWebhookV3WebhooksIdDeleteRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "FilterAppendV3RulesAppendPostRequestBadRequestError": {
+            "docs": "Provided rule has invalid structure",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "FilterAppendV3RulesAppendPostRequestContentTooLargeError": {
+            "docs": "Ruleset after append was larger than 50KiB",
+            "status-code": 413,
+            "type": "unknown",
+          },
+          "FilterAppendV3RulesAppendPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "FilterDeleteV3RulesIndexDeleteRequestBadRequestError": {
+            "docs": "Provided index does not exist in ruleset",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "FilterDeleteV3RulesIndexDeleteRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "FilterGetV3RulesGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "FilterPatchV3RulesIndexPatchRequestBadRequestError": {
+            "docs": "Provided index does not exist in ruleset",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "FilterPatchV3RulesIndexPatchRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "FilterPostV3RulesPostRequestBadRequestError": {
+            "docs": "Provided ruleset has invalid structure",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "FilterPostV3RulesPostRequestContentTooLargeError": {
+            "docs": "Ruleset was larger than 50KiB",
+            "status-code": 413,
+            "type": "unknown",
+          },
+          "FilterPostV3RulesPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestNotFoundError": {
+            "docs": "Account holder with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetAccountHolderV3AccountHoldersIdGetRequestNotFoundError": {
+            "docs": "Account holder with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetAccountHolderV3AccountHoldersIdGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetAccountHoldersV3AccountHoldersGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetBankStatementResultV3BankStatementsIdResultsGetRequestNotFoundError": {
+            "docs": "Bank statement with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetBankStatementResultV3BankStatementsIdResultsGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestNotFoundError": {
+            "docs": "Bank statement with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetBankStatementV3BankStatementsIdGetRequestNotFoundError": {
+            "docs": "Bank statement with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetBankStatementV3BankStatementsIdGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetBankStatementsV3BankStatementsGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetBatchResultsV3BatchesIdResultsGetRequestNotFoundError": {
+            "docs": "Batch with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetBatchResultsV3BatchesIdResultsGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetBatchesV3BatchesGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetCategorySetV3CategoriesAccountHolderTypeGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetEntityByIdV3EntitiesIdGetRequestBadRequestError": {
+            "docs": "Bad request.",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "GetEntityByIdV3EntitiesIdGetRequestNotFoundError": {
+            "docs": "Entity does not exist for ID",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetEntityByIdV3EntitiesIdGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetReportV3ReportsIdGetRequestNotFoundError": {
+            "docs": "Report with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetReportV3ReportsIdGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetReportsV3ReportsGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetSingleBatchV3BatchesIdGetRequestNotFoundError": {
+            "docs": "Batch with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetSingleBatchV3BatchesIdGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetTransactionV3TransactionsIdGetRequestNotFoundError": {
+            "docs": "Transaction with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "GetTransactionV3TransactionsIdGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetWebhookV3WebhooksIdGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "GetWebhooksV3WebhooksGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "ListTransactionsV3TransactionsGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "PatchWebhookV3WebhooksIdPatchRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "PostBankStatementV3BankStatementsPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "PostBatchV3BatchesPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "PostReportV3ReportsPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "PostTransactionsV3TransactionsPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "PostWebhookV3WebhooksPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "SearchEntityV3EntitiesLookupGetRequestBadRequestError": {
+            "docs": "Bad request.",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "SearchEntityV3EntitiesLookupGetRequestLockedError": {
+            "docs": "Not enough credits.",
+            "status-code": 423,
+            "type": "unknown",
+          },
+          "SearchEntityV3EntitiesLookupGetRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+          "SetTransactionAhV3TransactionsIdAssignPostRequestNotFoundError": {
+            "docs": "Transaction or account holder with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "SetTransactionAhV3TransactionsIdAssignPostRequestUnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+        },
+        "types": {
+          "Account": {
+            "docs": undefined,
+            "properties": {
+              "closing_balance": {
+                "type": "optional<double>",
+              },
+              "iso_currency_code": {
+                "type": "optional<string>",
+              },
+              "number": {
+                "type": "optional<string>",
+              },
+              "opening_balance": {
+                "type": "optional<double>",
+              },
+              "type": {
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountHolder": {
+            "docs": undefined,
+            "properties": {
+              "address": {
+                "type": "optional<Address>",
+              },
+              "name": {
+                "type": "optional<string>",
+              },
+              "type": {
+                "type": "optional<AccountType>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountHolderExternal": {
+            "docs": undefined,
+            "properties": {
+              "created_at": {
+                "docs": "The timestamp of when the account holder was created.",
+                "type": "datetime",
+              },
+              "id": {
+                "docs": "The unique ID of the account holder of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "name": {
+                "docs": "The name of the account holder",
+                "type": "optional<string>",
+              },
+              "type": {
+                "docs": "The type of the account holder. ",
+                "type": "AccountHolderType",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountHolderType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "consumer",
+              "business",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "consumer",
+              "business",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountingCategory": {
+            "docs": "An enumeration.",
+            "enum": [
+              {
+                "name": "OperationalExpenses",
+                "value": "operational expenses",
+              },
+              {
+                "name": "CostOfGoodsSold",
+                "value": "cost of goods sold",
+              },
+              "revenue",
+              "financing",
+              "taxes",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ActionModel": {
+            "type": "action",
+          },
+          "Address": {
+            "docs": undefined,
+            "properties": {
+              "city": {
+                "type": "optional<string>",
+              },
+              "country": {
+                "type": "optional<string>",
+              },
+              "postcode": {
+                "type": "optional<string>",
+              },
+              "state": {
+                "type": "optional<string>",
+              },
+              "street": {
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatement": {
+            "docs": "Represents a bank statement with details about the file and its status.",
+            "properties": {
+              "created_at": {
+                "docs": "The date and time when the job was created.",
+                "type": "datetime",
+              },
+              "error": {
+                "type": "optional<BankStatementError>",
+              },
+              "file": {
+                "docs": "Information about the bank statement file being processed.",
+                "type": "BankStatementFile",
+              },
+              "id": {
+                "docs": "A unique identifier for the bank statement job.",
+                "type": "string",
+              },
+              "name": {
+                "docs": "The name of the bank statement file, if available.",
+                "type": "optional<string>",
+              },
+              "status": {
+                "docs": "The current status of the document.",
+                "type": "BankStatementStatus",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementAccount": {
+            "docs": undefined,
+            "properties": {
+              "closing_balance": {
+                "docs": "The closing balance of the account for the statement period.",
+                "type": "optional<double>",
+              },
+              "end_date": {
+                "docs": "The end date of the statement period.",
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "is_balance_reconciled": {
+                "docs": "Indicates whether the balance has been reconciled.",
+                "type": "optional<boolean>",
+              },
+              "number": {
+                "docs": "The account number, if available.",
+                "type": "optional<string>",
+              },
+              "opening_balance": {
+                "docs": "The opening balance of the account for the statement period.",
+                "type": "optional<double>",
+              },
+              "start_date": {
+                "docs": "The start date of the statement period.",
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "total_incoming": {
+                "docs": "The sum of amounts of all incoming transactions.",
+                "type": "optional<double>",
+              },
+              "total_outgoing": {
+                "docs": "The sum of amounts of all outgoing transactions.",
+                "type": "optional<double>",
+              },
+              "transactions": {
+                "docs": "List of transactions for this account.",
+                "type": "list<BankStatementTransaction>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementError": {
+            "docs": undefined,
+            "properties": {
+              "code": {
+                "type": "BankStatementErrorCode",
+              },
+              "message": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementErrorCode": {
+            "docs": "An enumeration.",
+            "enum": [
+              "invalid_bank_statement",
+              "internal_error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementFile": {
+            "docs": undefined,
+            "properties": {
+              "no_pages": {
+                "docs": "The number of pages in the bank statement file.",
+                "type": "integer",
+              },
+              "size": {
+                "docs": "The size of the bank statement file in bytes, if available.",
+                "type": "optional<integer>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementResults": {
+            "docs": undefined,
+            "properties": {
+              "accounts": {
+                "docs": "List of accounts in the bank statement.",
+                "type": "list<BankStatementAccount>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "processing",
+              "completed",
+              "error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementTransaction": {
+            "docs": undefined,
+            "properties": {
+              "amount": {
+                "docs": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+                "type": "double",
+                "validation": {
+                  "exclusiveMax": undefined,
+                  "exclusiveMin": undefined,
+                  "max": undefined,
+                  "min": 0,
+                  "multipleOf": undefined,
+                },
+              },
+              "currency": {
+                "docs": "The currency of the transaction in ISO 4217 format",
+                "type": "Currency",
+              },
+              "date": {
+                "docs": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "description": {
+                "docs": "The description string of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 1024,
+                  "minLength": 0,
+                  "pattern": undefined,
+                },
+              },
+              "entry_type": {
+                "docs": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+                "type": "EntryType",
+              },
+              "id": {
+                "docs": "A unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "running_balance": {
+                "docs": "The account's balance when this transaction was performed",
+                "type": "optional<double>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Batch": {
+            "docs": "The `Batch` object represents the status and progress of an asynchronous batch enrichment job.",
+            "properties": {
+              "created_at": {
+                "docs": "The timestamp of when the batch was created.",
+                "type": "datetime",
+              },
+              "id": {
+                "docs": "A unique identifier for the batch.",
+                "type": "string",
+              },
+              "progress": {
+                "docs": "The number of transactions processed so far.",
+                "type": "integer",
+              },
+              "status": {
+                "docs": "The current status of the batch. A batch will error if at least one of the transactions contains an error.",
+                "type": "BatchStatus",
+              },
+              "total": {
+                "docs": "The total number of transactions in the batch.",
+                "type": "integer",
+              },
+              "updated_at": {
+                "docs": "The timestamp of when the batch was last updated.",
+                "type": "datetime",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BatchResult": {
+            "docs": "The `BatchResult` object represents the result of a batch enrichment job, including its status and
+enriched transactions.",
+            "properties": {
+              "id": {
+                "docs": "A unique identifier for the batch.",
+                "type": "string",
+              },
+              "results": {
+                "type": "EnrichmentResult",
+              },
+              "status": {
+                "docs": "The current status of the batch job.",
+                "type": "BatchStatus",
+              },
+              "total": {
+                "docs": "The total number of transactions in the batch result.",
+                "type": "integer",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BatchStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "processing",
+              "completed",
+              "error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Categories": {
+            "docs": undefined,
+            "properties": {
+              "accounting": {
+                "docs": "The corresponding accounting category. Only available for `business` transactions.",
+                "type": "optional<AccountingCategory>",
+              },
+              "general": {
+                "docs": "The category of the transaction. View the valid set of categories for your key [here](./docs/v3/enrichment/entities).",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CategoryConfidence": {
+            "docs": "An enumeration.",
+            "enum": [
+              "high",
+              "medium",
+              "low",
+              "unknown",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CategorySet": {
+            "docs": undefined,
+            "properties": {
+              "incoming": {
+                "type": "list<string>",
+              },
+              "outgoing": {
+                "type": "list<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Counterparty": {
+            "docs": undefined,
+            "properties": {
+              "id": {
+                "docs": "The unique UUID identifier of the entity",
+                "type": "optional<string>",
+              },
+              "logo": {
+                "docs": "Logo's URL",
+                "type": "optional<string>",
+              },
+              "mccs": {
+                "docs": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "type": "optional<list<integer>>",
+              },
+              "name": {
+                "docs": "The name of the entity",
+                "type": "optional<string>",
+              },
+              "type": {
+                "type": "CounterpartyType",
+              },
+              "website": {
+                "docs": "The website URL of the entity",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CounterpartyType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "person",
+              "organization",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Country": {
+            "docs": "An enumeration.",
+            "enum": [
+              "AD",
+              "AE",
+              "AF",
+              "AG",
+              "AI",
+              "AL",
+              "AM",
+              "AO",
+              "AR",
+              "AS",
+              "AT",
+              "AU",
+              "AW",
+              "AZ",
+              "BA",
+              "BB",
+              "BD",
+              "BE",
+              "BF",
+              "BG",
+              "BH",
+              "BI",
+              "BJ",
+              "BL",
+              "BM",
+              "BN",
+              "BO",
+              "BQ",
+              "BR",
+              "BS",
+              "BT",
+              "BV",
+              "BW",
+              "BY",
+              "BZ",
+              "CA",
+              "CC",
+              "CD",
+              "CF",
+              "CG",
+              "CH",
+              "CI",
+              "CK",
+              "CL",
+              "CM",
+              "CN",
+              "CO",
+              "CR",
+              "CU",
+              "CV",
+              "CW",
+              "CX",
+              "CY",
+              "CZ",
+              "DE",
+              "DJ",
+              "DK",
+              "DM",
+              "DO",
+              "DZ",
+              "EC",
+              "EE",
+              "EG",
+              "EH",
+              "ER",
+              "ES",
+              "ET",
+              "FI",
+              "FJ",
+              "FK",
+              "FM",
+              "FR",
+              "GA",
+              "GB",
+              "GD",
+              "GE",
+              "GF",
+              "GG",
+              "GH",
+              "GI",
+              "GL",
+              "GM",
+              "GN",
+              "GP",
+              "GQ",
+              "GR",
+              "GS",
+              "GT",
+              "GU",
+              "GW",
+              "GY",
+              "HK",
+              "HM",
+              "HN",
+              "HR",
+              "HT",
+              "HU",
+              "ID",
+              "IE",
+              "IL",
+              "IM",
+              "IN",
+              "IO",
+              "IQ",
+              "IR",
+              "IS",
+              "IT",
+              "JE",
+              "JM",
+              "JO",
+              "JP",
+              "KE",
+              "KG",
+              "KH",
+              "KI",
+              "KM",
+              "KN",
+              "KP",
+              "KR",
+              "KW",
+              "KY",
+              "KZ",
+              "LA",
+              "LB",
+              "LC",
+              "LI",
+              "LK",
+              "LR",
+              "LS",
+              "LT",
+              "LU",
+              "LV",
+              "LY",
+              "MA",
+              "MC",
+              "MD",
+              "ME",
+              "MF",
+              "MG",
+              "MH",
+              "MK",
+              "ML",
+              "MM",
+              "MN",
+              "MO",
+              "MP",
+              "MQ",
+              "MR",
+              "MS",
+              "MT",
+              "MU",
+              "MV",
+              "MW",
+              "MX",
+              "MY",
+              "MZ",
+              "NA",
+              "NC",
+              "NE",
+              "NF",
+              "NG",
+              "NI",
+              "NL",
+              "NO",
+              "NP",
+              "NR",
+              "NU",
+              "NZ",
+              "OM",
+              "PA",
+              "PE",
+              "PF",
+              "PG",
+              "PH",
+              "PK",
+              "PL",
+              "PM",
+              "PN",
+              "PR",
+              "PS",
+              "PT",
+              "PW",
+              "PY",
+              "QA",
+              "RE",
+              "RO",
+              "RS",
+              "RU",
+              "RW",
+              "SA",
+              "SB",
+              "SC",
+              "SD",
+              "SE",
+              "SG",
+              "SH",
+              "SI",
+              "SJ",
+              "SK",
+              "SL",
+              "SM",
+              "SN",
+              "SO",
+              "SR",
+              "SS",
+              "ST",
+              "SV",
+              "SX",
+              "SY",
+              "SZ",
+              "TC",
+              "TD",
+              "TG",
+              "TH",
+              "TJ",
+              "TK",
+              "TL",
+              "TM",
+              "TN",
+              "TO",
+              "TR",
+              "TT",
+              "TV",
+              "TW",
+              "TZ",
+              "UA",
+              "UG",
+              "UM",
+              "US",
+              "UY",
+              "UZ",
+              "VC",
+              "VE",
+              "VG",
+              "VI",
+              "VN",
+              "VU",
+              "WF",
+              "WS",
+              "YE",
+              "YT",
+              "ZA",
+              "ZM",
+              "ZW",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Currency": {
+            "docs": "An enumeration.",
+            "enum": [
+              "EUR",
+              "AED",
+              "AFN",
+              "XCD",
+              "ALL",
+              "AMD",
+              "AOA",
+              "ARS",
+              "USD",
+              "AUD",
+              "AWG",
+              "AZN",
+              "BAM",
+              "BBD",
+              "BDT",
+              "XOF",
+              "BGN",
+              "BHD",
+              "BIF",
+              "BMD",
+              "BND",
+              "BOB",
+              "BRL",
+              "BSD",
+              "INR",
+              "NOK",
+              "BWP",
+              "BYR",
+              "BZD",
+              "CAD",
+              "CDF",
+              "XAF",
+              "CHF",
+              "NZD",
+              "CLP",
+              "CNY",
+              "COP",
+              "CRC",
+              "CUP",
+              "CVE",
+              "ANG",
+              "CZK",
+              "DJF",
+              "DKK",
+              "DOP",
+              "DZD",
+              "EGP",
+              "MAD",
+              "ERN",
+              "ETB",
+              "FJD",
+              "FKP",
+              "GBP",
+              "GEL",
+              "GHS",
+              "GIP",
+              "GMD",
+              "GNF",
+              "GTQ",
+              "GYD",
+              "HKD",
+              "HNL",
+              "HUF",
+              "IDR",
+              "ILS",
+              "IQD",
+              "IRR",
+              "ISK",
+              "JMD",
+              "JOD",
+              "JPY",
+              "KES",
+              "KGS",
+              "KHR",
+              "KMF",
+              "KPW",
+              "KRW",
+              "KWD",
+              "KYD",
+              "KZT",
+              "LAK",
+              "LBP",
+              "LKR",
+              "LRD",
+              "ZAR",
+              "LYD",
+              "MDL",
+              "MGA",
+              "MKD",
+              "MMK",
+              "MNT",
+              "MOP",
+              "MRO",
+              "MUR",
+              "MVR",
+              "MWK",
+              "MXN",
+              "MYR",
+              "MZN",
+              "XPF",
+              "NGN",
+              "NIO",
+              "NPR",
+              "OMR",
+              "PEN",
+              "PGK",
+              "PHP",
+              "PKR",
+              "PLN",
+              "PYG",
+              "QAR",
+              "RON",
+              "RSD",
+              "RUB",
+              "RWF",
+              "SAR",
+              "SBD",
+              "SCR",
+              "SDG",
+              "SEK",
+              "SGD",
+              "SHP",
+              "SLL",
+              "SOS",
+              "SRD",
+              "SSP",
+              "STD",
+              "SYP",
+              "SZL",
+              "THB",
+              "TJS",
+              "TMT",
+              "TND",
+              "TOP",
+              "TRY",
+              "TTD",
+              "TWD",
+              "TZS",
+              "UAH",
+              "UGX",
+              "UYU",
+              "UZS",
+              "VEF",
+              "VND",
+              "VUV",
+              "WST",
+              "YER",
+              "ZMW",
+              "ZWL",
+              "HRK",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CustomCategorySet": {
+            "docs": undefined,
+            "properties": {
+              "incoming": {
+                "type": "list<string>",
+              },
+              "outgoing": {
+                "type": "list<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "DocumentStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "queued",
+              "processing",
+              "processed",
+              "failed",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EditableTxProp": {
+            "enum": [
+              "logo",
+              "website",
+              "merchant",
+              "merchant_id",
+              "location",
+              "person",
+              "transaction_type",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EnrichedTransaction": {
+            "docs": undefined,
+            "properties": {
+              "categories": {
+                "type": "optional<Categories>",
+              },
+              "created_at": {
+                "docs": "The timestamp of when the account holder was created.",
+                "type": "datetime",
+              },
+              "entities": {
+                "type": "optional<Entities>",
+              },
+              "error": {
+                "type": "optional<TransactionError>",
+              },
+              "id": {
+                "docs": "A unique identifier for the transaction. If two transactions are submitted with the same `id` the most recent one will replace the previous one.",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "location": {
+                "type": "optional<Location>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EnrichmentResult": {
+            "docs": undefined,
+            "properties": {
+              "transactions": {
+                "docs": "A list of enriched transactions resulting from the enrichment of this batch.",
+                "type": "list<EnrichedTransaction>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Entities": {
+            "docs": "Entities found by identity identification",
+            "properties": {
+              "counterparty": {
+                "type": "optional<Counterparty>",
+              },
+              "intermediaries": {
+                "type": "optional<list<Intermediary>>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Entity": {
+            "docs": undefined,
+            "properties": {
+              "id": {
+                "docs": "The unique UUID identifier of the entity",
+                "type": "optional<string>",
+              },
+              "logo": {
+                "docs": "Logo's URL",
+                "type": "optional<string>",
+              },
+              "mccs": {
+                "docs": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "type": "optional<list<integer>>",
+              },
+              "name": {
+                "docs": "The name of the entity",
+                "type": "optional<string>",
+              },
+              "website": {
+                "docs": "The website URL of the entity",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EntryType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "incoming",
+              "outgoing",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Filter": {
+            "type": "list<action>",
+          },
+          "FilterModel": {
+            "type": "Filter",
+          },
+          "FnCall": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              {
+                "type": "FnCall&&",
+              },
+              {
+                "type": "FnCall||",
+              },
+              {
+                "type": "FnCall==",
+              },
+              {
+                "type": "FnCall+",
+              },
+              {
+                "type": "FnCall-",
+              },
+              {
+                "type": "FnCall*",
+              },
+              {
+                "type": "FnCall/",
+              },
+              {
+                "type": "FnCall//",
+              },
+              {
+                "type": "FnCall<",
+              },
+              {
+                "type": "FnCall<=",
+              },
+              {
+                "type": "FnCall>",
+              },
+              {
+                "type": "FnCall>=",
+              },
+              {
+                "type": "FnCall!",
+              },
+              {
+                "type": "FnCallIsSubstring",
+              },
+              {
+                "type": "FnCallStartsWith",
+              },
+              {
+                "type": "FnCallEndsWith",
+              },
+              {
+                "type": "FnCallToLower",
+              },
+              {
+                "type": "FnCallToUpper",
+              },
+              {
+                "type": "FnCallHasLabel",
+              },
+              {
+                "type": "FnCallHasMcc",
+              },
+              {
+                "type": "FnCallGet",
+              },
+            ],
+          },
+          "FnCall!": {
+            "docs": undefined,
+            "properties": {
+              "!": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall&&": {
+            "docs": undefined,
+            "properties": {
+              "&&": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall*": {
+            "docs": undefined,
+            "properties": {
+              "*": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall+": {
+            "docs": undefined,
+            "properties": {
+              "+": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall-": {
+            "docs": undefined,
+            "properties": {
+              "-": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall/": {
+            "docs": undefined,
+            "properties": {
+              "/": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall//": {
+            "docs": undefined,
+            "properties": {
+              "//": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall<": {
+            "docs": undefined,
+            "properties": {
+              "<": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall<=": {
+            "docs": undefined,
+            "properties": {
+              "<=": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall==": {
+            "docs": undefined,
+            "properties": {
+              "==": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall>": {
+            "docs": undefined,
+            "properties": {
+              ">": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall>=": {
+            "docs": undefined,
+            "properties": {
+              ">=": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallEndsWith": {
+            "docs": undefined,
+            "properties": {
+              "ends_with": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallGet": {
+            "docs": undefined,
+            "properties": {
+              "get": {
+                "type": "properties",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallHasLabel": {
+            "docs": undefined,
+            "properties": {
+              "has_label": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallHasMcc": {
+            "docs": undefined,
+            "properties": {
+              "has_mcc": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallIsSubstring": {
+            "docs": undefined,
+            "properties": {
+              "is_substring": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallStartsWith": {
+            "docs": undefined,
+            "properties": {
+              "starts_with": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallToLower": {
+            "docs": undefined,
+            "properties": {
+              "to_lower": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallToUpper": {
+            "docs": undefined,
+            "properties": {
+              "to_upper": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall||": {
+            "docs": undefined,
+            "properties": {
+              "||": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "HTTPValidationError": {
+            "docs": undefined,
+            "properties": {
+              "detail": {
+                "type": "optional<list<ValidationError>>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Intermediary": {
+            "docs": undefined,
+            "properties": {
+              "id": {
+                "docs": "The unique UUID identifier of the entity",
+                "type": "optional<string>",
+              },
+              "logo": {
+                "docs": "Logo's URL",
+                "type": "optional<string>",
+              },
+              "mccs": {
+                "docs": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "type": "optional<list<integer>>",
+              },
+              "name": {
+                "docs": "The name of the entity",
+                "type": "optional<string>",
+              },
+              "type": {
+                "type": "IntermediaryType",
+              },
+              "website": {
+                "docs": "The website URL of the entity",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "IntermediaryType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "delivery_service",
+              "payment_processor",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Location": {
+            "docs": undefined,
+            "properties": {
+              "raw_address": {
+                "docs": "An unstructured string containing the address",
+                "type": "optional<string>",
+              },
+              "structured": {
+                "docs": "When raw is set, a structured representation of it.",
+                "type": "optional<LocationStructured>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "LocationInput": {
+            "docs": "Location of where the transaction has taken place. This can greatly improve entity identification, especially
+under ambiguity.",
+            "properties": {
+              "country": {
+                "docs": "The country where the transaction was made in ISO 3166-2 format",
+                "type": "Country",
+              },
+              "raw_address": {
+                "docs": "An unstructured string containing the address",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "LocationStructured": {
+            "docs": undefined,
+            "properties": {
+              "apple_maps_url": {
+                "docs": "A URL link to view the location on Apple Maps",
+                "type": "optional<string>",
+              },
+              "city": {
+                "docs": "The city where the location is situated",
+                "type": "optional<string>",
+              },
+              "country": {
+                "docs": "The full name of the country",
+                "type": "optional<string>",
+              },
+              "country_code": {
+                "docs": "The country code of the location in ISO 3166-2 format",
+                "type": "optional<string>",
+              },
+              "google_maps_url": {
+                "docs": "A URL link to view the location on Google Maps",
+                "type": "optional<string>",
+              },
+              "latitude": {
+                "docs": "The latitude coordinate of the location",
+                "type": "optional<double>",
+              },
+              "longitude": {
+                "docs": "The longitude coordinate of the location",
+                "type": "optional<double>",
+              },
+              "postcode": {
+                "docs": "The postal code or ZIP code of the location",
+                "type": "optional<string>",
+              },
+              "state": {
+                "docs": "The state or region of the location",
+                "type": "optional<string>",
+              },
+              "store_number": {
+                "docs": "A unique identifier for a specific store or branch, if applicable",
+                "type": "optional<string>",
+              },
+              "street": {
+                "docs": "The street name and number of the location",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabels": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              {
+                "type": "ModifyLabelsAddLabel",
+              },
+              {
+                "type": "ModifyLabelsRemoveLabel",
+              },
+              {
+                "type": "ModifyLabelsSetLabels",
+              },
+              {
+                "type": "ModifyLabelsAddMcc",
+              },
+              {
+                "type": "ModifyLabelsRemoveMcc",
+              },
+              {
+                "type": "ModifyLabelsSetMcc",
+              },
+            ],
+          },
+          "ModifyLabelsAddLabel": {
+            "docs": undefined,
+            "properties": {
+              "add_label": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsAddMcc": {
+            "docs": undefined,
+            "properties": {
+              "add_mcc": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsRemoveLabel": {
+            "docs": undefined,
+            "properties": {
+              "remove_label": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsRemoveMcc": {
+            "docs": undefined,
+            "properties": {
+              "remove_mcc": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsSetLabels": {
+            "docs": undefined,
+            "properties": {
+              "set_labels": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsSetMcc": {
+            "docs": undefined,
+            "properties": {
+              "set_mcc": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseAccountHolderExternal": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<AccountHolderExternal>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseBankStatement": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<BankStatement>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseBatch": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Batch>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseReport": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Report>",
+              },
+              "next_cursor": {
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseTransaction": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Transaction>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseWebhook": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Webhook>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Recurrence": {
+            "docs": "The `Recurrence` object represents the recurrence pattern of a transaction. It provides information about
+whether a transaction is a one-time event or a part of a recurring series.",
+            "properties": {
+              "type": {
+                "docs": "Whether the transaction is a one-time transfer `one-off`, regularly with varying pricing `recurring` or with fixed pricing `subscription`",
+                "type": "RecurrenceType",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "RecurrenceGroup": {
+            "docs": undefined,
+            "properties": {
+              "average_amount": {
+                "docs": "The average amount per transaction in this group",
+                "type": "double",
+              },
+              "categories": {
+                "docs": "Categories of the transactions in the recurrence group",
+                "type": "Categories",
+              },
+              "counterparty": {
+                "docs": "Counterparty of the transactions",
+                "type": "Counterparty",
+              },
+              "end_date": {
+                "docs": "The date of the most recent transaction in the group",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "id": {
+                "docs": "A unique UUID identifier for the group",
+                "type": "string",
+              },
+              "periodicity": {
+                "docs": "A human-readable description of the transaction frequency",
+                "type": "RecurrencePeriodicity",
+              },
+              "periodicity_in_days": {
+                "docs": "The estimated number of days between transactions in this group",
+                "type": "double",
+              },
+              "start_date": {
+                "docs": "The date of the oldest transaction in the group",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "total_amount": {
+                "docs": "The sum of all transaction amounts in this group",
+                "type": "double",
+              },
+              "transaction_ids": {
+                "docs": "Transactions in this recurrence group",
+                "type": "list<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "RecurrencePeriodicity": {
+            "docs": "An enumeration.",
+            "enum": [
+              "daily",
+              "weekly",
+              "bi_weekly",
+              "monthly",
+              "bi_monthly",
+              "quarterly",
+              "semi_yearly",
+              "yearly",
+              "other",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "RecurrenceType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "recurring",
+              "subscription",
+              {
+                "name": "OneOff",
+                "value": "one off",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Report": {
+            "docs": undefined,
+            "properties": {
+              "created_at": {
+                "docs": "The date and time when the report was created.",
+                "type": "datetime",
+              },
+              "description": {
+                "docs": "A description of what is wrong in the transaction",
+                "type": "string",
+              },
+              "fields": {
+                "docs": "A list of the fields that are incorrect",
+                "type": "list<string>",
+              },
+              "id": {
+                "docs": "A generated unique identifier for the report.",
+                "type": "string",
+              },
+              "rejection_reason": {
+                "docs": "An explanation of why the report was rejected",
+                "type": "optional<string>",
+              },
+              "status": {
+                "docs": "The status of the report.
+
+* `open`: a newly created report
+* `pending`: the report is being investigated
+* `rejected`: the original enrichment output was deemed correct or we couldn't resolve it, check `rejection_reason`
+* `resolved`: the issue has been resolved",
+                "type": "ReportStatus",
+              },
+              "transaction_id": {
+                "docs": "The unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ReportStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "open",
+              "pending",
+              "resolved",
+              "rejected",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "StatementInfo": {
+            "docs": undefined,
+            "properties": {
+              "account_holder": {
+                "type": "optional<AccountHolder>",
+              },
+              "accounts": {
+                "type": "optional<list<Account>>",
+              },
+              "end_date": {
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "institution": {
+                "type": "optional<string>",
+              },
+              "start_date": {
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "SyncEnrichmentOutput": {
+            "docs": undefined,
+            "properties": {
+              "transactions": {
+                "docs": "A list of enriched transactions resulting from the enrichment of this batch.",
+                "type": "list<EnrichedTransaction>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Transaction": {
+            "docs": undefined,
+            "properties": {
+              "account_holder_id": {
+                "docs": "The unique ID of the account holder of the transaction",
+                "type": "optional<string>",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "amount": {
+                "docs": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+                "type": "double",
+                "validation": {
+                  "exclusiveMax": undefined,
+                  "exclusiveMin": undefined,
+                  "max": undefined,
+                  "min": 0,
+                  "multipleOf": undefined,
+                },
+              },
+              "categories": {
+                "type": "optional<Categories>",
+              },
+              "created_at": {
+                "docs": "The timestamp of when the account holder was created.",
+                "type": "datetime",
+              },
+              "currency": {
+                "docs": "The currency of the transaction in ISO 4217 format",
+                "type": "Currency",
+              },
+              "date": {
+                "docs": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "description": {
+                "docs": "The description string of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 1024,
+                  "minLength": 0,
+                  "pattern": undefined,
+                },
+              },
+              "entities": {
+                "type": "optional<Entities>",
+              },
+              "entry_type": {
+                "docs": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+                "type": "EntryType",
+              },
+              "error": {
+                "type": "optional<TransactionError>",
+              },
+              "id": {
+                "docs": "A unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "location": {
+                "type": "optional<Location>",
+              },
+              "recurrence": {
+                "type": "optional<Recurrence>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "TransactionError": {
+            "docs": undefined,
+            "properties": {
+              "code": {
+                "type": "TransactionErrorCode",
+              },
+              "message": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "TransactionErrorCode": {
+            "docs": "An enumeration.",
+            "enum": [
+              "account_holder_not_found",
+              "internal_error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "TransactionInput": {
+            "docs": undefined,
+            "properties": {
+              "account_holder_id": {
+                "docs": "The unique ID of the account holder. Unsetting it will disable [categorization](./docs/v3/enrichment/entities).",
+                "type": "string",
+              },
+              "amount": {
+                "docs": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+                "type": "double",
+                "validation": {
+                  "exclusiveMax": undefined,
+                  "exclusiveMin": undefined,
+                  "max": undefined,
+                  "min": 0,
+                  "multipleOf": undefined,
+                },
+              },
+              "currency": {
+                "docs": "The currency of the transaction in ISO 4217 format",
+                "type": "Currency",
+              },
+              "date": {
+                "docs": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "description": {
+                "docs": "The description string of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 1024,
+                  "minLength": 0,
+                  "pattern": undefined,
+                },
+              },
+              "entry_type": {
+                "docs": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+                "type": "EntryType",
+              },
+              "id": {
+                "docs": "A unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "location": {
+                "type": "optional<LocationInput>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ValidationError": {
+            "docs": undefined,
+            "properties": {
+              "loc": {
+                "type": "list<ValidationErrorLocItem>",
+              },
+              "msg": "string",
+              "type": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ValidationErrorLocItem": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              "string",
+              "integer",
+            ],
+          },
+          "Webhook": {
+            "docs": undefined,
+            "properties": {
+              "created_at": {
+                "docs": "The date and time when the webhook was created.",
+                "type": "datetime",
+              },
+              "enabled": {
+                "docs": "Whether the webhook is enabled or not.",
+                "type": "boolean",
+              },
+              "events": {
+                "docs": "A list of events that this webhook subscribes to",
+                "type": "list<WebhookEventsItem>",
+              },
+              "id": {
+                "docs": "A generated unique identifier for the webhook",
+                "type": "string",
+              },
+              "token": {
+                "docs": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                "type": "optional<string>",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 128,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "url": {
+                "docs": "The URL of the webhook",
+                "type": "string",
+                "validation": {
+                  "format": "uri",
+                  "maxLength": 1024,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "WebhookEventsItem": {
+            "enum": [
+              {
+                "name": "ReportsResolved",
+                "value": "reports.resolved",
+              },
+              {
+                "name": "ReportsRejected",
+                "value": "reports.rejected",
+              },
+              {
+                "name": "ReportsPending",
+                "value": "reports.pending",
+              },
+              {
+                "name": "BankStatementsCompleted",
+                "value": "bank_statements.completed",
+              },
+              {
+                "name": "BankStatementsError",
+                "value": "bank_statements.error",
+              },
+              {
+                "name": "BatchesCompleted",
+                "value": "batches.completed",
+              },
+              {
+                "name": "BatchesError",
+                "value": "batches.error",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "action": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              {
+                "type": "if",
+              },
+              {
+                "type": "ModifyLabels",
+              },
+              {
+                "type": "set",
+              },
+            ],
+          },
+          "expression": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              "boolean",
+              "string",
+              "double",
+              "FnCall",
+            ],
+          },
+          "if": {
+            "docs": undefined,
+            "properties": {
+              "else": {
+                "type": "optional<list<action>>",
+              },
+              "if": {
+                "type": "expression",
+              },
+              "then": {
+                "type": "optional<list<action>>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "properties": {
+            "enum": [
+              "logo",
+              "website",
+              "merchant",
+              "description",
+              "merchant_id",
+              "location",
+              "person",
+              "transaction_type",
+              "amount",
+              "entry_type",
+              "account_holder_type",
+              "account_holder_id",
+              "account_holder_name",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "set": {
+            "docs": undefined,
+            "properties": {
+              "set": {
+                "type": "EditableTxProp",
+              },
+              "to": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+        },
+      },
+      "rawContents": "errors:
+  GetTransactionV3TransactionsIdGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Transaction with the provided id not found.
+  GetTransactionV3TransactionsIdGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  DeleteTransactionV3TransactionsIdDeleteRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Transaction with the provided id not found.
+  DeleteTransactionV3TransactionsIdDeleteRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  ListTransactionsV3TransactionsGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  PostTransactionsV3TransactionsPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  SetTransactionAhV3TransactionsIdAssignPostRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Transaction or account holder with the provided id not found.
+  SetTransactionAhV3TransactionsIdAssignPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetBatchesV3BatchesGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  PostBatchV3BatchesPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetSingleBatchV3BatchesIdGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Batch with the provided id not found.
+  GetSingleBatchV3BatchesIdGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetBatchResultsV3BatchesIdResultsGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Batch with the provided id not found.
+  GetBatchResultsV3BatchesIdResultsGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetBankStatementsV3BankStatementsGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  PostBankStatementV3BankStatementsPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetBankStatementV3BankStatementsIdGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Bank statement with the provided id not found.
+  GetBankStatementV3BankStatementsIdGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  DeleteBankStatementV3BankStatementsIdDeleteRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Bank statement with the provided id not found.
+  DeleteBankStatementV3BankStatementsIdDeleteRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Bank statement with the provided id not found.
+  GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetBankStatementResultV3BankStatementsIdResultsGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Bank statement with the provided id not found.
+  GetBankStatementResultV3BankStatementsIdResultsGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetAccountHolderV3AccountHoldersIdGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Account holder with the provided id not found.
+  GetAccountHolderV3AccountHoldersIdGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  DeleteAccountHolderV3AccountHoldersIdDeleteRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Account holder with the provided id not found.
+  DeleteAccountHolderV3AccountHoldersIdDeleteRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetAccountHoldersV3AccountHoldersGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  CreateAccountHolderV3AccountHoldersPostRequestBadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Account holder with the provided id already exists.
+  CreateAccountHolderV3AccountHoldersPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Account holder with the provided id not found.
+  GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetWebhooksV3WebhooksGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  PostWebhookV3WebhooksPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetWebhookV3WebhooksIdGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  DeleteWebhookV3WebhooksIdDeleteRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Webhook with the provided id not found.
+  DeleteWebhookV3WebhooksIdDeleteRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  PatchWebhookV3WebhooksIdPatchRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  FilterGetV3RulesGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  FilterPostV3RulesPostRequestBadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Provided ruleset has invalid structure
+  FilterPostV3RulesPostRequestContentTooLargeError:
+    status-code: 413
+    type: unknown
+    docs: Ruleset was larger than 50KiB
+  FilterPostV3RulesPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  FilterAppendV3RulesAppendPostRequestBadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Provided rule has invalid structure
+  FilterAppendV3RulesAppendPostRequestContentTooLargeError:
+    status-code: 413
+    type: unknown
+    docs: Ruleset after append was larger than 50KiB
+  FilterAppendV3RulesAppendPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  FilterDeleteV3RulesIndexDeleteRequestBadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Provided index does not exist in ruleset
+  FilterDeleteV3RulesIndexDeleteRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  FilterPatchV3RulesIndexPatchRequestBadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Provided index does not exist in ruleset
+  FilterPatchV3RulesIndexPatchRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetReportsV3ReportsGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  PostReportV3ReportsPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetReportV3ReportsIdGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Report with the provided id not found.
+  GetReportV3ReportsIdGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  DeleteReportV3ReportsIdDeleteRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Report with the provided id not found.
+  DeleteReportV3ReportsIdDeleteRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  GetCategorySetV3CategoriesAccountHolderTypeGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  CustomCategoriesPostV3CategoriesAccountHolderTypePostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  DeleteCustomCategorySetV3CategoriesAccountHolderTypeResetPostRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  SearchEntityV3EntitiesLookupGetRequestBadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Bad request.
+  SearchEntityV3EntitiesLookupGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  SearchEntityV3EntitiesLookupGetRequestLockedError:
+    status-code: 423
+    type: unknown
+    docs: Not enough credits.
+  GetEntityByIdV3EntitiesIdGetRequestBadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Bad request.
+  GetEntityByIdV3EntitiesIdGetRequestNotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Entity does not exist for ID
+  GetEntityByIdV3EntitiesIdGetRequestUnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+types:
+  Account:
+    properties:
+      type:
+        type: optional<string>
+      number:
+        type: optional<string>
+      opening_balance:
+        type: optional<double>
+      closing_balance:
+        type: optional<double>
+      iso_currency_code:
+        type: optional<string>
+    source:
+      openapi: ../openapi.yml
+  AccountHolder:
+    properties:
+      type:
+        type: optional<AccountType>
+      name:
+        type: optional<string>
+      address:
+        type: optional<Address>
+    source:
+      openapi: ../openapi.yml
+  AccountHolderExternal:
+    properties:
+      id:
+        type: string
+        docs: The unique ID of the account holder of the transaction
+        validation:
+          minLength: 1
+      type:
+        type: AccountHolderType
+        docs: 'The type of the account holder. '
+      name:
+        type: optional<string>
+        docs: The name of the account holder
+      created_at:
+        type: datetime
+        docs: The timestamp of when the account holder was created.
+    source:
+      openapi: ../openapi.yml
+  AccountHolderType:
+    enum:
+      - consumer
+      - business
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  AccountType:
+    enum:
+      - consumer
+      - business
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  AccountingCategory:
+    enum:
+      - value: operational expenses
+        name: OperationalExpenses
+      - value: cost of goods sold
+        name: CostOfGoodsSold
+      - revenue
+      - financing
+      - taxes
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  ActionModel:
+    type: action
+  Address:
+    properties:
+      street:
+        type: optional<string>
+      postcode:
+        type: optional<string>
+      city:
+        type: optional<string>
+      state:
+        type: optional<string>
+      country:
+        type: optional<string>
+    source:
+      openapi: ../openapi.yml
+  BankStatement:
+    docs: Represents a bank statement with details about the file and its status.
+    properties:
+      id:
+        type: string
+        docs: A unique identifier for the bank statement job.
+      name:
+        type: optional<string>
+        docs: The name of the bank statement file, if available.
+      status:
+        type: BankStatementStatus
+        docs: The current status of the document.
+      created_at:
+        type: datetime
+        docs: The date and time when the job was created.
+      file:
+        type: BankStatementFile
+        docs: Information about the bank statement file being processed.
+      error:
+        type: optional<BankStatementError>
+    source:
+      openapi: ../openapi.yml
+  BankStatementAccount:
+    properties:
+      number:
+        type: optional<string>
+        docs: The account number, if available.
+      opening_balance:
+        type: optional<double>
+        docs: The opening balance of the account for the statement period.
+      closing_balance:
+        type: optional<double>
+        docs: The closing balance of the account for the statement period.
+      start_date:
+        type: optional<string>
+        docs: The start date of the statement period.
+        validation:
+          format: date
+      end_date:
+        type: optional<string>
+        docs: The end date of the statement period.
+        validation:
+          format: date
+      is_balance_reconciled:
+        type: optional<boolean>
+        docs: Indicates whether the balance has been reconciled.
+      total_incoming:
+        type: optional<double>
+        docs: The sum of amounts of all incoming transactions.
+      total_outgoing:
+        type: optional<double>
+        docs: The sum of amounts of all outgoing transactions.
+      transactions:
+        docs: List of transactions for this account.
+        type: list<BankStatementTransaction>
+    source:
+      openapi: ../openapi.yml
+  BankStatementError:
+    properties:
+      code:
+        type: BankStatementErrorCode
+      message: string
+    source:
+      openapi: ../openapi.yml
+  BankStatementErrorCode:
+    enum:
+      - invalid_bank_statement
+      - internal_error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  BankStatementFile:
+    properties:
+      no_pages:
+        type: integer
+        docs: The number of pages in the bank statement file.
+      size:
+        type: optional<integer>
+        docs: The size of the bank statement file in bytes, if available.
+    source:
+      openapi: ../openapi.yml
+  BankStatementResults:
+    properties:
+      accounts:
+        docs: List of accounts in the bank statement.
+        type: list<BankStatementAccount>
+    source:
+      openapi: ../openapi.yml
+  BankStatementStatus:
+    enum:
+      - processing
+      - completed
+      - error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  BankStatementTransaction:
+    properties:
+      id:
+        type: string
+        docs: A unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: The description string of the transaction
+        validation:
+          minLength: 0
+          maxLength: 1024
+      date:
+        type: string
+        docs: >-
+          The date that the transaction was posted. Uses ISO 8601 format
+          (YYYY-MM-DD)
+        validation:
+          format: date
+      amount:
+        type: double
+        docs: >-
+          The amount of the transaction in the `currency`. Must be a positive
+          value. For example, if the `currency` is USD, then it's the amount in
+          dollars.
+        validation:
+          min: 0
+      entry_type:
+        type: EntryType
+        docs: >-
+          The direction of the flow of the money from the perspective of the
+          account holder. `outgoing` to represent money leaving the account,
+          such as purchases or fees, while `incoming` represents money entering
+          the account, such as income or refunds.
+      currency:
+        type: Currency
+        docs: The currency of the transaction in ISO 4217 format
+      running_balance:
+        type: optional<double>
+        docs: The account's balance when this transaction was performed
+    source:
+      openapi: ../openapi.yml
+  Batch:
+    docs: >-
+      The `Batch` object represents the status and progress of an asynchronous
+      batch enrichment job.
+    properties:
+      id:
+        type: string
+        docs: A unique identifier for the batch.
+      status:
+        type: BatchStatus
+        docs: >-
+          The current status of the batch. A batch will error if at least one of
+          the transactions contains an error.
+      created_at:
+        type: datetime
+        docs: The timestamp of when the batch was created.
+      updated_at:
+        type: datetime
+        docs: The timestamp of when the batch was last updated.
+      progress:
+        type: integer
+        docs: The number of transactions processed so far.
+      total:
+        type: integer
+        docs: The total number of transactions in the batch.
+    source:
+      openapi: ../openapi.yml
+  BatchResult:
+    docs: >-
+      The `BatchResult` object represents the result of a batch enrichment job,
+      including its status and
+
+      enriched transactions.
+    properties:
+      id:
+        type: string
+        docs: A unique identifier for the batch.
+      total:
+        type: integer
+        docs: The total number of transactions in the batch result.
+      status:
+        type: BatchStatus
+        docs: The current status of the batch job.
+      results:
+        type: EnrichmentResult
+    source:
+      openapi: ../openapi.yml
+  BatchStatus:
+    enum:
+      - processing
+      - completed
+      - error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Categories:
+    properties:
+      general:
+        type: optional<string>
+        docs: >-
+          The category of the transaction. View the valid set of categories for
+          your key [here](./docs/v3/enrichment/entities).
+      accounting:
+        type: optional<AccountingCategory>
+        docs: >-
+          The corresponding accounting category. Only available for `business`
+          transactions.
+    source:
+      openapi: ../openapi.yml
+  CategoryConfidence:
+    enum:
+      - high
+      - medium
+      - low
+      - unknown
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  CategorySet:
+    properties:
+      incoming:
+        type: list<string>
+      outgoing:
+        type: list<string>
+    source:
+      openapi: ../openapi.yml
+  Counterparty:
+    properties:
+      id:
+        type: optional<string>
+        docs: The unique UUID identifier of the entity
+      name:
+        type: optional<string>
+        docs: The name of the entity
+      website:
+        type: optional<string>
+        docs: The website URL of the entity
+      logo:
+        type: optional<string>
+        docs: Logo's URL
+      mccs:
+        type: optional<list<integer>>
+        docs: >-
+          A list of [Merchant Category
+          Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+      type:
+        type: CounterpartyType
+    source:
+      openapi: ../openapi.yml
+  CounterpartyType:
+    enum:
+      - person
+      - organization
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Country:
+    enum:
+      - AD
+      - AE
+      - AF
+      - AG
+      - AI
+      - AL
+      - AM
+      - AO
+      - AR
+      - AS
+      - AT
+      - AU
+      - AW
+      - AZ
+      - BA
+      - BB
+      - BD
+      - BE
+      - BF
+      - BG
+      - BH
+      - BI
+      - BJ
+      - BL
+      - BM
+      - BN
+      - BO
+      - BQ
+      - BR
+      - BS
+      - BT
+      - BV
+      - BW
+      - BY
+      - BZ
+      - CA
+      - CC
+      - CD
+      - CF
+      - CG
+      - CH
+      - CI
+      - CK
+      - CL
+      - CM
+      - CN
+      - CO
+      - CR
+      - CU
+      - CV
+      - CW
+      - CX
+      - CY
+      - CZ
+      - DE
+      - DJ
+      - DK
+      - DM
+      - DO
+      - DZ
+      - EC
+      - EE
+      - EG
+      - EH
+      - ER
+      - ES
+      - ET
+      - FI
+      - FJ
+      - FK
+      - FM
+      - FR
+      - GA
+      - GB
+      - GD
+      - GE
+      - GF
+      - GG
+      - GH
+      - GI
+      - GL
+      - GM
+      - GN
+      - GP
+      - GQ
+      - GR
+      - GS
+      - GT
+      - GU
+      - GW
+      - GY
+      - HK
+      - HM
+      - HN
+      - HR
+      - HT
+      - HU
+      - ID
+      - IE
+      - IL
+      - IM
+      - IN
+      - IO
+      - IQ
+      - IR
+      - IS
+      - IT
+      - JE
+      - JM
+      - JO
+      - JP
+      - KE
+      - KG
+      - KH
+      - KI
+      - KM
+      - KN
+      - KP
+      - KR
+      - KW
+      - KY
+      - KZ
+      - LA
+      - LB
+      - LC
+      - LI
+      - LK
+      - LR
+      - LS
+      - LT
+      - LU
+      - LV
+      - LY
+      - MA
+      - MC
+      - MD
+      - ME
+      - MF
+      - MG
+      - MH
+      - MK
+      - ML
+      - MM
+      - MN
+      - MO
+      - MP
+      - MQ
+      - MR
+      - MS
+      - MT
+      - MU
+      - MV
+      - MW
+      - MX
+      - MY
+      - MZ
+      - NA
+      - NC
+      - NE
+      - NF
+      - NG
+      - NI
+      - NL
+      - 'NO'
+      - NP
+      - NR
+      - NU
+      - NZ
+      - OM
+      - PA
+      - PE
+      - PF
+      - PG
+      - PH
+      - PK
+      - PL
+      - PM
+      - PN
+      - PR
+      - PS
+      - PT
+      - PW
+      - PY
+      - QA
+      - RE
+      - RO
+      - RS
+      - RU
+      - RW
+      - SA
+      - SB
+      - SC
+      - SD
+      - SE
+      - SG
+      - SH
+      - SI
+      - SJ
+      - SK
+      - SL
+      - SM
+      - SN
+      - SO
+      - SR
+      - SS
+      - ST
+      - SV
+      - SX
+      - SY
+      - SZ
+      - TC
+      - TD
+      - TG
+      - TH
+      - TJ
+      - TK
+      - TL
+      - TM
+      - TN
+      - TO
+      - TR
+      - TT
+      - TV
+      - TW
+      - TZ
+      - UA
+      - UG
+      - UM
+      - US
+      - UY
+      - UZ
+      - VC
+      - VE
+      - VG
+      - VI
+      - VN
+      - VU
+      - WF
+      - WS
+      - YE
+      - YT
+      - ZA
+      - ZM
+      - ZW
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Currency:
+    enum:
+      - EUR
+      - AED
+      - AFN
+      - XCD
+      - ALL
+      - AMD
+      - AOA
+      - ARS
+      - USD
+      - AUD
+      - AWG
+      - AZN
+      - BAM
+      - BBD
+      - BDT
+      - XOF
+      - BGN
+      - BHD
+      - BIF
+      - BMD
+      - BND
+      - BOB
+      - BRL
+      - BSD
+      - INR
+      - NOK
+      - BWP
+      - BYR
+      - BZD
+      - CAD
+      - CDF
+      - XAF
+      - CHF
+      - NZD
+      - CLP
+      - CNY
+      - COP
+      - CRC
+      - CUP
+      - CVE
+      - ANG
+      - CZK
+      - DJF
+      - DKK
+      - DOP
+      - DZD
+      - EGP
+      - MAD
+      - ERN
+      - ETB
+      - FJD
+      - FKP
+      - GBP
+      - GEL
+      - GHS
+      - GIP
+      - GMD
+      - GNF
+      - GTQ
+      - GYD
+      - HKD
+      - HNL
+      - HUF
+      - IDR
+      - ILS
+      - IQD
+      - IRR
+      - ISK
+      - JMD
+      - JOD
+      - JPY
+      - KES
+      - KGS
+      - KHR
+      - KMF
+      - KPW
+      - KRW
+      - KWD
+      - KYD
+      - KZT
+      - LAK
+      - LBP
+      - LKR
+      - LRD
+      - ZAR
+      - LYD
+      - MDL
+      - MGA
+      - MKD
+      - MMK
+      - MNT
+      - MOP
+      - MRO
+      - MUR
+      - MVR
+      - MWK
+      - MXN
+      - MYR
+      - MZN
+      - XPF
+      - NGN
+      - NIO
+      - NPR
+      - OMR
+      - PEN
+      - PGK
+      - PHP
+      - PKR
+      - PLN
+      - PYG
+      - QAR
+      - RON
+      - RSD
+      - RUB
+      - RWF
+      - SAR
+      - SBD
+      - SCR
+      - SDG
+      - SEK
+      - SGD
+      - SHP
+      - SLL
+      - SOS
+      - SRD
+      - SSP
+      - STD
+      - SYP
+      - SZL
+      - THB
+      - TJS
+      - TMT
+      - TND
+      - TOP
+      - TRY
+      - TTD
+      - TWD
+      - TZS
+      - UAH
+      - UGX
+      - UYU
+      - UZS
+      - VEF
+      - VND
+      - VUV
+      - WST
+      - YER
+      - ZMW
+      - ZWL
+      - HRK
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  CustomCategorySet:
+    properties:
+      incoming:
+        type: list<string>
+      outgoing:
+        type: list<string>
+    source:
+      openapi: ../openapi.yml
+  DocumentStatus:
+    enum:
+      - queued
+      - processing
+      - processed
+      - failed
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  EnrichedTransaction:
+    properties:
+      entities:
+        type: optional<Entities>
+      categories:
+        type: optional<Categories>
+      location:
+        type: optional<Location>
+      error:
+        type: optional<TransactionError>
+      created_at:
+        type: datetime
+        docs: The timestamp of when the account holder was created.
+      id:
+        type: string
+        docs: >-
+          A unique identifier for the transaction. If two transactions are
+          submitted with the same `id` the most recent one will replace the
+          previous one.
+        validation:
+          minLength: 1
+    source:
+      openapi: ../openapi.yml
+  EnrichmentResult:
+    properties:
+      transactions:
+        docs: >-
+          A list of enriched transactions resulting from the enrichment of this
+          batch.
+        type: list<EnrichedTransaction>
+    source:
+      openapi: ../openapi.yml
+  Entities:
+    docs: Entities found by identity identification
+    properties:
+      counterparty:
+        type: optional<Counterparty>
+      intermediaries:
+        type: optional<list<Intermediary>>
+    source:
+      openapi: ../openapi.yml
+  Entity:
+    properties:
+      id:
+        type: optional<string>
+        docs: The unique UUID identifier of the entity
+      name:
+        type: optional<string>
+        docs: The name of the entity
+      website:
+        type: optional<string>
+        docs: The website URL of the entity
+      logo:
+        type: optional<string>
+        docs: Logo's URL
+      mccs:
+        type: optional<list<integer>>
+        docs: >-
+          A list of [Merchant Category
+          Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+    source:
+      openapi: ../openapi.yml
+  EntryType:
+    enum:
+      - incoming
+      - outgoing
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  FilterModel:
+    type: Filter
+  HTTPValidationError:
+    properties:
+      detail:
+        type: optional<list<ValidationError>>
+    source:
+      openapi: ../openapi.yml
+  Intermediary:
+    properties:
+      id:
+        type: optional<string>
+        docs: The unique UUID identifier of the entity
+      name:
+        type: optional<string>
+        docs: The name of the entity
+      website:
+        type: optional<string>
+        docs: The website URL of the entity
+      logo:
+        type: optional<string>
+        docs: Logo's URL
+      mccs:
+        type: optional<list<integer>>
+        docs: >-
+          A list of [Merchant Category
+          Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+      type:
+        type: IntermediaryType
+    source:
+      openapi: ../openapi.yml
+  IntermediaryType:
+    enum:
+      - delivery_service
+      - payment_processor
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Location:
+    properties:
+      raw_address:
+        type: optional<string>
+        docs: An unstructured string containing the address
+      structured:
+        type: optional<LocationStructured>
+        docs: When raw is set, a structured representation of it.
+    source:
+      openapi: ../openapi.yml
+  LocationInput:
+    docs: >-
+      Location of where the transaction has taken place. This can greatly
+      improve entity identification, especially
+
+      under ambiguity.
+    properties:
+      raw_address:
+        type: optional<string>
+        docs: An unstructured string containing the address
+      country:
+        type: Country
+        docs: The country where the transaction was made in ISO 3166-2 format
+    source:
+      openapi: ../openapi.yml
+  LocationStructured:
+    properties:
+      street:
+        type: optional<string>
+        docs: The street name and number of the location
+      city:
+        type: optional<string>
+        docs: The city where the location is situated
+      state:
+        type: optional<string>
+        docs: The state or region of the location
+      postcode:
+        type: optional<string>
+        docs: The postal code or ZIP code of the location
+      country_code:
+        type: optional<string>
+        docs: The country code of the location in ISO 3166-2 format
+      country:
+        type: optional<string>
+        docs: The full name of the country
+      latitude:
+        type: optional<double>
+        docs: The latitude coordinate of the location
+      longitude:
+        type: optional<double>
+        docs: The longitude coordinate of the location
+      google_maps_url:
+        type: optional<string>
+        docs: A URL link to view the location on Google Maps
+      apple_maps_url:
+        type: optional<string>
+        docs: A URL link to view the location on Apple Maps
+      store_number:
+        type: optional<string>
+        docs: A unique identifier for a specific store or branch, if applicable
+    source:
+      openapi: ../openapi.yml
+  PagedResponseAccountHolderExternal:
+    properties:
+      next_cursor: string
+      data:
+        type: list<AccountHolderExternal>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseBankStatement:
+    properties:
+      next_cursor: string
+      data:
+        type: list<BankStatement>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseBatch:
+    properties:
+      next_cursor: string
+      data:
+        type: list<Batch>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseReport:
+    properties:
+      next_cursor:
+        type: optional<string>
+      data:
+        type: list<Report>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseTransaction:
+    properties:
+      next_cursor: string
+      data:
+        type: list<Transaction>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseWebhook:
+    properties:
+      next_cursor: string
+      data:
+        type: list<Webhook>
+    source:
+      openapi: ../openapi.yml
+  Recurrence:
+    docs: >-
+      The `Recurrence` object represents the recurrence pattern of a
+      transaction. It provides information about
+
+      whether a transaction is a one-time event or a part of a recurring series.
+    properties:
+      type:
+        type: RecurrenceType
+        docs: >-
+          Whether the transaction is a one-time transfer `one-off`, regularly
+          with varying pricing `recurring` or with fixed pricing `subscription`
+    source:
+      openapi: ../openapi.yml
+  RecurrenceGroup:
+    properties:
+      id:
+        type: string
+        docs: A unique UUID identifier for the group
+      start_date:
+        type: string
+        docs: The date of the oldest transaction in the group
+        validation:
+          format: date
+      end_date:
+        type: string
+        docs: The date of the most recent transaction in the group
+        validation:
+          format: date
+      total_amount:
+        type: double
+        docs: The sum of all transaction amounts in this group
+      average_amount:
+        type: double
+        docs: The average amount per transaction in this group
+      periodicity_in_days:
+        type: double
+        docs: The estimated number of days between transactions in this group
+      periodicity:
+        type: RecurrencePeriodicity
+        docs: A human-readable description of the transaction frequency
+      counterparty:
+        type: Counterparty
+        docs: Counterparty of the transactions
+      categories:
+        type: Categories
+        docs: Categories of the transactions in the recurrence group
+      transaction_ids:
+        docs: Transactions in this recurrence group
+        type: list<string>
+    source:
+      openapi: ../openapi.yml
+  RecurrencePeriodicity:
+    enum:
+      - daily
+      - weekly
+      - bi_weekly
+      - monthly
+      - bi_monthly
+      - quarterly
+      - semi_yearly
+      - yearly
+      - other
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  RecurrenceType:
+    enum:
+      - recurring
+      - subscription
+      - value: one off
+        name: OneOff
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Report:
+    properties:
+      transaction_id:
+        type: string
+        docs: The unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: A description of what is wrong in the transaction
+      fields:
+        docs: A list of the fields that are incorrect
+        type: list<string>
+      id:
+        type: string
+        docs: A generated unique identifier for the report.
+      created_at:
+        type: datetime
+        docs: The date and time when the report was created.
+      status:
+        type: ReportStatus
+        docs: >-
+          The status of the report.
+
+
+          * `open`: a newly created report
+
+          * `pending`: the report is being investigated
+
+          * `rejected`: the original enrichment output was deemed correct or we
+          couldn't resolve it, check `rejection_reason`
+
+          * `resolved`: the issue has been resolved
+      rejection_reason:
+        type: optional<string>
+        docs: An explanation of why the report was rejected
+    source:
+      openapi: ../openapi.yml
+  ReportStatus:
+    enum:
+      - open
+      - pending
+      - resolved
+      - rejected
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  StatementInfo:
+    properties:
+      institution:
+        type: optional<string>
+      start_date:
+        type: optional<string>
+        validation:
+          format: date
+      end_date:
+        type: optional<string>
+        validation:
+          format: date
+      account_holder:
+        type: optional<AccountHolder>
+      accounts:
+        type: optional<list<Account>>
+    source:
+      openapi: ../openapi.yml
+  SyncEnrichmentOutput:
+    properties:
+      transactions:
+        docs: >-
+          A list of enriched transactions resulting from the enrichment of this
+          batch.
+        type: list<EnrichedTransaction>
+    source:
+      openapi: ../openapi.yml
+  Transaction:
+    properties:
+      id:
+        type: string
+        docs: A unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: The description string of the transaction
+        validation:
+          minLength: 0
+          maxLength: 1024
+      date:
+        type: string
+        docs: >-
+          The date that the transaction was posted. Uses ISO 8601 format
+          (YYYY-MM-DD)
+        validation:
+          format: date
+      amount:
+        type: double
+        docs: >-
+          The amount of the transaction in the `currency`. Must be a positive
+          value. For example, if the `currency` is USD, then it's the amount in
+          dollars.
+        validation:
+          min: 0
+      entry_type:
+        type: EntryType
+        docs: >-
+          The direction of the flow of the money from the perspective of the
+          account holder. `outgoing` to represent money leaving the account,
+          such as purchases or fees, while `incoming` represents money entering
+          the account, such as income or refunds.
+      currency:
+        type: Currency
+        docs: The currency of the transaction in ISO 4217 format
+      entities:
+        type: optional<Entities>
+      categories:
+        type: optional<Categories>
+      location:
+        type: optional<Location>
+      error:
+        type: optional<TransactionError>
+      created_at:
+        type: datetime
+        docs: The timestamp of when the account holder was created.
+      account_holder_id:
+        type: optional<string>
+        docs: The unique ID of the account holder of the transaction
+        validation:
+          minLength: 1
+      recurrence:
+        type: optional<Recurrence>
+    source:
+      openapi: ../openapi.yml
+  TransactionError:
+    properties:
+      code:
+        type: TransactionErrorCode
+      message: string
+    source:
+      openapi: ../openapi.yml
+  TransactionErrorCode:
+    enum:
+      - account_holder_not_found
+      - internal_error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  TransactionInput:
+    properties:
+      id:
+        type: string
+        docs: A unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: The description string of the transaction
+        validation:
+          minLength: 0
+          maxLength: 1024
+      date:
+        type: string
+        docs: >-
+          The date that the transaction was posted. Uses ISO 8601 format
+          (YYYY-MM-DD)
+        validation:
+          format: date
+      amount:
+        type: double
+        docs: >-
+          The amount of the transaction in the `currency`. Must be a positive
+          value. For example, if the `currency` is USD, then it's the amount in
+          dollars.
+        validation:
+          min: 0
+      entry_type:
+        type: EntryType
+        docs: >-
+          The direction of the flow of the money from the perspective of the
+          account holder. `outgoing` to represent money leaving the account,
+          such as purchases or fees, while `incoming` represents money entering
+          the account, such as income or refunds.
+      currency:
+        type: Currency
+        docs: The currency of the transaction in ISO 4217 format
+      account_holder_id:
+        type: string
+        docs: >-
+          The unique ID of the account holder. Unsetting it will disable
+          [categorization](./docs/v3/enrichment/entities).
+      location:
+        type: optional<LocationInput>
+    source:
+      openapi: ../openapi.yml
+  ValidationErrorLocItem:
+    discriminated: false
+    union:
+      - string
+      - integer
+    source:
+      openapi: ../openapi.yml
+  ValidationError:
+    properties:
+      loc:
+        type: list<ValidationErrorLocItem>
+      msg: string
+      type: string
+    source:
+      openapi: ../openapi.yml
+  WebhookEventsItem:
+    enum:
+      - value: reports.resolved
+        name: ReportsResolved
+      - value: reports.rejected
+        name: ReportsRejected
+      - value: reports.pending
+        name: ReportsPending
+      - value: bank_statements.completed
+        name: BankStatementsCompleted
+      - value: bank_statements.error
+        name: BankStatementsError
+      - value: batches.completed
+        name: BatchesCompleted
+      - value: batches.error
+        name: BatchesError
+    source:
+      openapi: ../openapi.yml
+  Webhook:
+    properties:
+      url:
+        type: string
+        docs: The URL of the webhook
+        validation:
+          format: uri
+          minLength: 1
+          maxLength: 1024
+      events:
+        docs: A list of events that this webhook subscribes to
+        type: list<WebhookEventsItem>
+      token:
+        type: optional<string>
+        docs: >-
+          A secret string used to authenticate the webhook. This value will be
+          included in the `X-Ntropy-Token` header when sending requests to the
+          webhook
+        validation:
+          maxLength: 128
+      id:
+        type: string
+        docs: A generated unique identifier for the webhook
+      created_at:
+        type: datetime
+        docs: The date and time when the webhook was created.
+      enabled:
+        type: boolean
+        docs: Whether the webhook is enabled or not.
+    source:
+      openapi: ../openapi.yml
+  expression:
+    discriminated: false
+    union:
+      - boolean
+      - string
+      - double
+      - FnCall
+    source:
+      openapi: ../openapi.yml
+  properties:
+    enum:
+      - logo
+      - website
+      - merchant
+      - description
+      - merchant_id
+      - location
+      - person
+      - transaction_type
+      - amount
+      - entry_type
+      - account_holder_type
+      - account_holder_id
+      - account_holder_name
+    source:
+      openapi: ../openapi.yml
+  FnCall&&:
+    properties:
+      '&&': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall||:
+    properties:
+      '||': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall==:
+    properties:
+      '==': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall+:
+    properties:
+      +: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall-:
+    properties:
+      '-': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall*:
+    properties:
+      '*': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall/:
+    properties:
+      /: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall//:
+    properties:
+      //: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall<:
+    properties:
+      <: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall<=:
+    properties:
+      <=: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall>:
+    properties:
+      '>': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall>=:
+    properties:
+      '>=': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall!:
+    properties:
+      '!':
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallIsSubstring:
+    properties:
+      is_substring: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCallStartsWith:
+    properties:
+      starts_with: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCallEndsWith:
+    properties:
+      ends_with: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCallToLower:
+    properties:
+      to_lower:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallToUpper:
+    properties:
+      to_upper:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallHasLabel:
+    properties:
+      has_label:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallHasMcc:
+    properties:
+      has_mcc:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallGet:
+    properties:
+      get:
+        type: properties
+    source:
+      openapi: ../openapi.yml
+  FnCall:
+    discriminated: false
+    union:
+      - type: FnCall&&
+      - type: FnCall||
+      - type: FnCall==
+      - type: FnCall+
+      - type: FnCall-
+      - type: FnCall*
+      - type: FnCall/
+      - type: FnCall//
+      - type: FnCall<
+      - type: FnCall<=
+      - type: FnCall>
+      - type: FnCall>=
+      - type: FnCall!
+      - type: FnCallIsSubstring
+      - type: FnCallStartsWith
+      - type: FnCallEndsWith
+      - type: FnCallToLower
+      - type: FnCallToUpper
+      - type: FnCallHasLabel
+      - type: FnCallHasMcc
+      - type: FnCallGet
+    source:
+      openapi: ../openapi.yml
+  action:
+    discriminated: false
+    union:
+      - type: if
+      - type: ModifyLabels
+      - type: set
+    source:
+      openapi: ../openapi.yml
+  if:
+    properties:
+      if:
+        type: expression
+      then:
+        type: optional<list<action>>
+      else:
+        type: optional<list<action>>
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsAddLabel:
+    properties:
+      add_label:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsRemoveLabel:
+    properties:
+      remove_label:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsSetLabels:
+    properties:
+      set_labels: list<expression>
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsAddMcc:
+    properties:
+      add_mcc:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsRemoveMcc:
+    properties:
+      remove_mcc:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsSetMcc:
+    properties:
+      set_mcc: list<expression>
+    source:
+      openapi: ../openapi.yml
+  ModifyLabels:
+    discriminated: false
+    union:
+      - type: ModifyLabelsAddLabel
+      - type: ModifyLabelsRemoveLabel
+      - type: ModifyLabelsSetLabels
+      - type: ModifyLabelsAddMcc
+      - type: ModifyLabelsRemoveMcc
+      - type: ModifyLabelsSetMcc
+    source:
+      openapi: ../openapi.yml
+  EditableTxProp:
+    enum:
+      - logo
+      - website
+      - merchant
+      - merchant_id
+      - location
+      - person
+      - transaction_type
+    source:
+      openapi: ../openapi.yml
+  set:
+    properties:
+      set:
+        type: EditableTxProp
+      to:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  Filter:
+    type: list<action>
+",
+    },
+    "accountHolders.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Account Holder API allows you to retrieve, create and modify account holders. An account holder represents an
+entity that holds an account associated with transactions. An account holder can either be a business or an individual
+person - consumer.
+
+The fields chosen for an account holder are used by our enrichment process and can dramatically improve the accuracy
+of the results. 
+
+Complete guide: [Account Holders](../../../account-holders).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Account Holders",
+          "endpoints": {
+            "createAccountHolder": {
+              "auth": true,
+              "display-name": "Create an account holder.",
+              "docs": undefined,
+              "errors": [
+                "root.CreateAccountHolderV3AccountHoldersPostRequestBadRequestError",
+                "root.CreateAccountHolderV3AccountHoldersPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/account_holders" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        "type": "consumer",
+        "name": "John Doe"
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.create(
+    id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+    type="consumer",
+    name="John Doe",
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "id": "id",
+                    "type": "consumer",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "name": "John Doe",
+                      "type": "consumer",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/account_holders",
+              "request": {
+                "body": {
+                  "properties": {
+                    "id": {
+                      "docs": "The unique ID of the account holder of the transaction",
+                      "type": "string",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": undefined,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                    "name": {
+                      "docs": "The name of the account holder",
+                      "type": "optional<string>",
+                    },
+                    "type": {
+                      "docs": "The type of the account holder. ",
+                      "type": "root.AccountHolderType",
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "AccountHolderCreate",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.AccountHolderExternal",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "deleteAccountHolder": {
+              "auth": true,
+              "display-name": "Deletes an account holder and their transactions",
+              "docs": "Deletes all of the transactions in the account holder's history. This operation is permanent and irreversible",
+              "errors": [
+                "root.DeleteAccountHolderV3AccountHoldersIdDeleteRequestNotFoundError",
+                "root.DeleteAccountHolderV3AccountHoldersIdDeleteRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.delete("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/account_holders/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getAccountHolder": {
+              "auth": true,
+              "display-name": "Retrieve an account holder.",
+              "docs": undefined,
+              "errors": [
+                "root.GetAccountHolderV3AccountHoldersIdGetRequestNotFoundError",
+                "root.GetAccountHolderV3AccountHoldersIdGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "name": "John Doe",
+                      "type": "consumer",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/account_holders/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.AccountHolderExternal",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getAccountHolders": {
+              "auth": true,
+              "display-name": "List all account holders.",
+              "docs": undefined,
+              "errors": [
+                "root.GetAccountHoldersV3AccountHoldersGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-03-30T00:00:00Z",
+                          "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                          "name": "John Doe",
+                          "type": "consumer",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/account_holders",
+              "request": {
+                "name": "GetAccountHoldersV3AccountHoldersGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return account holders older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return account holders newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of account holders",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of account holders to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseAccountHolderExternal",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getAccountHolder:
+      path: /v3/account_holders/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve an account holder.
+      response:
+        docs: Successful Response
+        type: root.AccountHolderExternal
+      errors:
+        - root.GetAccountHolderV3AccountHoldersIdGetRequestNotFoundError
+        - >-
+          root.GetAccountHolderV3AccountHoldersIdGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              type: consumer
+              name: John Doe
+              created_at: '2024-03-30T00:00:00Z'
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                ah =
+                sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") 
+    deleteAccountHolder:
+      path: /v3/account_holders/{id}
+      method: DELETE
+      auth: true
+      docs: >-
+        Deletes all of the transactions in the account holder's history. This
+        operation is permanent and irreversible
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Deletes an account holder and their transactions
+      errors:
+        - root.DeleteAccountHolderV3AccountHoldersIdDeleteRequestNotFoundError
+        - >-
+          root.DeleteAccountHolderV3AccountHoldersIdDeleteRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                ah =
+                sdk.account_holders.delete("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") 
+    getAccountHolders:
+      path: /v3/account_holders
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      display-name: List all account holders.
+      request:
+        name: GetAccountHoldersV3AccountHoldersGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return account holders older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return account holders newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of account holders
+          limit:
+            type: optional<integer>
+            docs: The limit of account holders to be returned
+            validation:
+              min: 1
+              max: 50
+      response:
+        docs: Successful Response
+        type: root.PagedResponseAccountHolderExternal
+      errors:
+        - >-
+          root.GetAccountHoldersV3AccountHoldersGetRequestUnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                  type: consumer
+                  name: John Doe
+                  created_at: '2024-03-30T00:00:00Z'
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                ah =
+                sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") 
+    createAccountHolder:
+      path: /v3/account_holders
+      method: POST
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      display-name: Create an account holder.
+      request:
+        name: AccountHolderCreate
+        body:
+          properties:
+            id:
+              type: string
+              docs: The unique ID of the account holder of the transaction
+              validation:
+                minLength: 1
+            type:
+              type: root.AccountHolderType
+              docs: 'The type of the account holder. '
+            name:
+              type: optional<string>
+              docs: The name of the account holder
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.AccountHolderExternal
+      errors:
+        - root.CreateAccountHolderV3AccountHoldersPostRequestBadRequestError
+        - >-
+          root.CreateAccountHolderV3AccountHoldersPostRequestUnprocessableEntityError
+      examples:
+        - request:
+            id: id
+            type: consumer
+          response:
+            body:
+              id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              type: consumer
+              name: John Doe
+              created_at: '2024-03-30T00:00:00Z'
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/account_holders" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "type": "consumer",
+                        "name": "John Doe"
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                ah = sdk.account_holders.create(
+                    id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                    type="consumer",
+                    name="John Doe",
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Account Holders
+docs: >
+
+  The Account Holder API allows you to retrieve, create and modify account
+  holders. An account holder represents an
+
+  entity that holds an account associated with transactions. An account holder
+  can either be a business or an individual
+
+  person - consumer.
+
+
+  The fields chosen for an account holder are used by our enrichment process and
+  can dramatically improve the accuracy
+
+  of the results. 
+
+
+  Complete guide: [Account Holders](../../../account-holders).
+",
+    },
+    "bankStatements.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Bank Statements API allows you to manage and extract information from bank statements. We support extraction of
+account holder information, account information and transaction records. Files should be uploaded in PDF format.
+
+During the extraction process, the bank statements undergo several status changes:
+|  Status  |                              Description                               |
+|----------|------------------------------------------------------------------------|
+|processing|The upload was successful. Extraction is in progress.                   |
+|completed |The extraction was successful. Results are available.                   |
+|error     |An error occurred during extraction. Check `error` for more information.|
+
+
+A list of error codes for the `error` status can be found below:
+|         Code         |                Description                |
+|----------------------|-------------------------------------------|
+|invalid_bank_statement|Failed to process file as a bank statement.|
+|internal_error        |Internal error. Please contact support.    |
+
+
+Complete guide: [Bank Statements](../../../bank-statements).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Bank statements",
+          "endpoints": {
+            "deleteBankStatement": {
+              "auth": true,
+              "display-name": "Deletes a bank statement",
+              "docs": undefined,
+              "errors": [
+                "root.DeleteBankStatementV3BankStatementsIdDeleteRequestNotFoundError",
+                "root.DeleteBankStatementV3BankStatementsIdDeleteRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatement": {
+              "auth": true,
+              "display-name": "Retrieve a bank statement",
+              "docs": undefined,
+              "errors": [
+                "root.GetBankStatementV3BankStatementsIdGetRequestNotFoundError",
+                "root.GetBankStatementV3BankStatementsIdGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+bs = sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "error": {
+                        "code": "invalid_bank_statement",
+                        "message": "message",
+                      },
+                      "file": {
+                        "no_pages": 1,
+                        "size": 4096,
+                      },
+                      "id": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                      "name": "2014-01-01_2014-02-01_statement.pdf",
+                      "status": "processing",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.BankStatement",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatementResult": {
+              "auth": true,
+              "display-name": "Retrieve the extraction results",
+              "docs": "Return the extracted account information and associated transactions from a bank statement PDF. The results are accessible once the statement's status is `completed`.",
+              "errors": [
+                "root.GetBankStatementResultV3BankStatementsIdResultsGetRequestNotFoundError",
+                "root.GetBankStatementResultV3BankStatementsIdResultsGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/results" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+bs = sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b")
+results = sdk.bank_statements.wait_for_results(
+    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "accounts": [
+                        {
+                          "closing_balance": 200,
+                          "end_date": "2024-02-01",
+                          "is_balance_reconciled": true,
+                          "number": "972913289",
+                          "opening_balance": 400,
+                          "start_date": "2024-01-01",
+                          "total_incoming": 0,
+                          "total_outgoing": 200,
+                          "transactions": [
+                            {
+                              "amount": 200,
+                              "currency": "USD",
+                              "date": "2024-03-30",
+                              "description": "SQ* STARBUCKS NW 43RD",
+                              "entry_type": "outgoing",
+                              "id": "xbx8YP14g565Xk",
+                              "running_balance": 400,
+                            },
+                          ],
+                        },
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}/results",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.BankStatementResults",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatementStatementInfo": {
+              "auth": true,
+              "display-name": "Quickly extract account holder, institution and first account",
+              "docs": "Extracts account holder, bank and account information extracted from the first page of the bank statement, which is typically available before the full results. This is a synchronous call.
+
+Complete guide: [Overview](../../../bank-statements)",
+              "errors": [
+                "root.GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestNotFoundError",
+                "root.GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/overview" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+overview = sdk.bank_statements.overview(
+    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "account_holder": {
+                        "address": {
+                          "city": "Victoria",
+                          "country": "United States",
+                          "postcode": "77901",
+                          "state": "Texas",
+                          "street": "601 Rosebud Avenue",
+                        },
+                        "name": "John Doe",
+                        "type": "consumer",
+                      },
+                      "accounts": [
+                        {
+                          "closing_balance": 1500,
+                          "iso_currency_code": "USD",
+                          "number": "83721",
+                          "opening_balance": 1000,
+                          "type": "checking",
+                        },
+                      ],
+                      "end_date": "2024-02-01",
+                      "institution": "Well's Fargo",
+                      "start_date": "2024-01-01",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}/overview",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.StatementInfo",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatements": {
+              "auth": true,
+              "display-name": "List all bank statements",
+              "docs": "Return a list of submitted bank statements starting with the most recent one.",
+              "errors": [
+                "root.GetBankStatementsV3BankStatementsGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/bank_statements" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+for bs in sdk.bank_statements.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-01-01T00:00:00Z",
+                          "error": {
+                            "code": "invalid_bank_statement",
+                            "message": "message",
+                          },
+                          "file": {
+                            "no_pages": 1,
+                            "size": 4096,
+                          },
+                          "id": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                          "name": "2014-01-01_2014-02-01_statement.pdf",
+                          "status": "processing",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/bank_statements",
+              "request": {
+                "name": "GetBankStatementsV3BankStatementsGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return bank statements older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return bank statements newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of bank statements",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of bank statements to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                  "status": {
+                    "docs": "If specified, only return bank statements with this status",
+                    "type": "optional<root.DocumentStatus>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseBankStatement",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postBankStatement": {
+              "auth": true,
+              "display-name": "Submit a bank statement PDF",
+              "docs": "Upload a PDF file and queue it for extraction.",
+              "errors": [
+                "root.PostBankStatementV3BankStatementsPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+        "https://api.ntropy.com/v3/bank_statements" \
+        -H "Accept: application/json" \
+        -H "X-API-KEY: cd1H...Wmhl" \
+        --form file=@bank_statement.pdf
+    ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+with open('bank_statement.pdf', 'rb') as fh:
+    bank_statement = sdk.bank_statements.create(fh)
+    results = sdk.bank_statement.wait_for_results(bank_statement.id) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {},
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "error": {
+                        "code": "invalid_bank_statement",
+                        "message": "message",
+                      },
+                      "file": {
+                        "no_pages": 1,
+                        "size": 4096,
+                      },
+                      "id": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                      "name": "2014-01-01_2014-02-01_statement.pdf",
+                      "status": "processing",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/bank_statements",
+              "request": {
+                "body": {
+                  "properties": {
+                    "file": "file",
+                  },
+                },
+                "content-type": "multipart/form-data",
+                "headers": undefined,
+                "name": "Body_post_bank_statement_v3_bank_statements_post",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.BankStatement",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getBankStatements:
+      path: /v3/bank_statements
+      method: GET
+      auth: true
+      docs: >-
+        Return a list of submitted bank statements starting with the most recent
+        one.
+      source:
+        openapi: ../openapi.yml
+      display-name: List all bank statements
+      request:
+        name: GetBankStatementsV3BankStatementsGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return bank statements older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return bank statements newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of bank statements
+          limit:
+            type: optional<integer>
+            docs: The limit of bank statements to be returned
+            validation:
+              min: 1
+              max: 50
+          status:
+            type: optional<root.DocumentStatus>
+            docs: If specified, only return bank statements with this status
+      response:
+        docs: Successful Response
+        type: root.PagedResponseBankStatement
+      errors:
+        - >-
+          root.GetBankStatementsV3BankStatementsGetRequestUnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+                  name: 2014-01-01_2014-02-01_statement.pdf
+                  status: processing
+                  created_at: '2024-01-01T00:00:00Z'
+                  file:
+                    no_pages: 1
+                    size: 4096
+                  error:
+                    code: invalid_bank_statement
+                    message: message
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/bank_statements" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                for bs in sdk.bank_statements.list().auto_paginate():
+                    ... 
+    postBankStatement:
+      path: /v3/bank_statements
+      method: POST
+      auth: true
+      docs: Upload a PDF file and queue it for extraction.
+      source:
+        openapi: ../openapi.yml
+      display-name: Submit a bank statement PDF
+      request:
+        name: Body_post_bank_statement_v3_bank_statements_post
+        body:
+          properties:
+            file: file
+        content-type: multipart/form-data
+      response:
+        docs: Successful Response
+        type: root.BankStatement
+      errors:
+        - >-
+          root.PostBankStatementV3BankStatementsPostRequestUnprocessableEntityError
+      examples:
+        - request: {}
+          response:
+            body:
+              id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+              name: 2014-01-01_2014-02-01_statement.pdf
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              file:
+                no_pages: 1
+                size: 4096
+              error:
+                code: invalid_bank_statement
+                message: message
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                        "https://api.ntropy.com/v3/bank_statements" \
+                        -H "Accept: application/json" \
+                        -H "X-API-KEY: cd1H...Wmhl" \
+                        --form file=@bank_statement.pdf
+                    
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                with open('bank_statement.pdf', 'rb') as fh:
+                    bank_statement = sdk.bank_statements.create(fh)
+                    results = sdk.bank_statement.wait_for_results(bank_statement.id) 
+    getBankStatement:
+      path: /v3/bank_statements/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a bank statement
+      response:
+        docs: Successful Response
+        type: root.BankStatement
+      errors:
+        - root.GetBankStatementV3BankStatementsIdGetRequestNotFoundError
+        - >-
+          root.GetBankStatementV3BankStatementsIdGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+              name: 2014-01-01_2014-02-01_statement.pdf
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              file:
+                no_pages: 1
+                size: 4096
+              error:
+                code: invalid_bank_statement
+                message: message
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                bs =
+                sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b") 
+    deleteBankStatement:
+      path: /v3/bank_statements/{id}
+      method: DELETE
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Deletes a bank statement
+      errors:
+        - root.DeleteBankStatementV3BankStatementsIdDeleteRequestNotFoundError
+        - >-
+          root.DeleteBankStatementV3BankStatementsIdDeleteRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+    getBankStatementStatementInfo:
+      path: /v3/bank_statements/{id}/overview
+      method: POST
+      auth: true
+      docs: >-
+        Extracts account holder, bank and account information extracted from the
+        first page of the bank statement, which is typically available before
+        the full results. This is a synchronous call.
+
+
+        Complete guide: [Overview](../../../bank-statements)
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Quickly extract account holder, institution and first account
+      response:
+        docs: Successful Response
+        type: root.StatementInfo
+      errors:
+        - >-
+          root.GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestNotFoundError
+        - >-
+          root.GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              institution: Well's Fargo
+              start_date: '2024-01-01'
+              end_date: '2024-02-01'
+              account_holder:
+                type: consumer
+                name: John Doe
+                address:
+                  street: 601 Rosebud Avenue
+                  postcode: '77901'
+                  city: Victoria
+                  state: Texas
+                  country: United States
+              accounts:
+                - type: checking
+                  number: '83721'
+                  opening_balance: 1000
+                  closing_balance: 1500
+                  iso_currency_code: USD
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/overview" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                overview = sdk.bank_statements.overview(
+                    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+                ) 
+    getBankStatementResult:
+      path: /v3/bank_statements/{id}/results
+      method: GET
+      auth: true
+      docs: >-
+        Return the extracted account information and associated transactions
+        from a bank statement PDF. The results are accessible once the
+        statement's status is `completed`.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve the extraction results
+      response:
+        docs: Successful Response
+        type: root.BankStatementResults
+      errors:
+        - >-
+          root.GetBankStatementResultV3BankStatementsIdResultsGetRequestNotFoundError
+        - >-
+          root.GetBankStatementResultV3BankStatementsIdResultsGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              accounts:
+                - number: '972913289'
+                  opening_balance: 400
+                  closing_balance: 200
+                  start_date: '2024-01-01'
+                  end_date: '2024-02-01'
+                  is_balance_reconciled: true
+                  total_incoming: 0
+                  total_outgoing: 200
+                  transactions:
+                    - id: xbx8YP14g565Xk
+                      description: SQ* STARBUCKS NW 43RD
+                      date: '2024-03-30'
+                      amount: 200
+                      entry_type: outgoing
+                      currency: USD
+                      running_balance: 400
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/results" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                bs =
+                sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b")
+
+                results = sdk.bank_statements.wait_for_results(
+                    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Bank statements
+docs: >
+
+  The Bank Statements API allows you to manage and extract information from bank
+  statements. We support extraction of
+
+  account holder information, account information and transaction records. Files
+  should be uploaded in PDF format.
+
+
+  During the extraction process, the bank statements undergo several status
+  changes:
+
+  |  Status  |                             
+  Description                               |
+
+  |----------|------------------------------------------------------------------------|
+
+  |processing|The upload was successful. Extraction is in
+  progress.                   |
+
+  |completed |The extraction was successful. Results are
+  available.                   |
+
+  |error     |An error occurred during extraction. Check `error` for more
+  information.|
+
+
+
+  A list of error codes for the `error` status can be found below:
+
+  |         Code         |                Description                |
+
+  |----------------------|-------------------------------------------|
+
+  |invalid_bank_statement|Failed to process file as a bank statement.|
+
+  |internal_error        |Internal error. Please contact support.    |
+
+
+
+  Complete guide: [Bank Statements](../../../bank-statements).
+",
+    },
+    "batches.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "endpoints": {
+            "getBatchResults": {
+              "auth": true,
+              "display-name": "Retrieve the results of a batch",
+              "docs": "Returns the results of the enrichment request. The resulting enriched transactions are returned in the same order they were submitted. Results are available after the batch has finished processing.",
+              "errors": [
+                "root.GetBatchResultsV3BatchesIdResultsGetRequestNotFoundError",
+                "root.GetBatchResultsV3BatchesIdResultsGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20/results" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+results = sdk.batches.wait_for_results("f203613d2-83c8-4130-8809-d14206eeec20")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "id": "id",
+                      "results": {
+                        "transactions": [
+                          {
+                            "categories": {
+                              "general": "outgoing - coffee shops",
+                            },
+                            "created_at": "2024-03-30T00:00:00Z",
+                            "entities": {
+                              "counterparty": {
+                                "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                                "logo": "https://logos.ntropy.com/starbucks.com",
+                                "mccs": [
+                                  5814,
+                                ],
+                                "name": "Starbucks",
+                                "type": "organization",
+                                "website": "starbucks.com",
+                              },
+                              "intermediaries": [
+                                {
+                                  "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                  "logo": "https://logos.ntropy.com/squareup.com",
+                                  "mccs": [
+                                    1,
+                                  ],
+                                  "name": "Square",
+                                  "type": "payment_processor",
+                                  "website": "squareup.com",
+                                },
+                              ],
+                            },
+                            "id": "xbx8YP14g565Xk",
+                            "location": {
+                              "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                              "structured": {
+                                "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                                "city": "Gainesville",
+                                "country": "United States",
+                                "country_code": "US",
+                                "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                                "latitude": 29.704558,
+                                "longitude": -82.389277,
+                                "postcode": "32653",
+                                "state": "Florida",
+                                "street": "Nw 43rd Street 5480",
+                              },
+                            },
+                          },
+                        ],
+                      },
+                      "status": "processing",
+                      "total": 1,
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/batches/{id}/results",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Returned batch of transaction enrichment results.",
+                "type": "root.BatchResult",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBatches": {
+              "auth": true,
+              "display-name": "List all batches",
+              "docs": "Returns a list of submitted batches starting with the most recent one.",
+              "errors": [
+                "root.GetBatchesV3BatchesGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/batches" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+for batch in sdk.batches.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-01-01T00:00:00Z",
+                          "id": "203613d2-83c8-4130-8809-d14206eeec20",
+                          "progress": 0,
+                          "status": "processing",
+                          "total": 4000,
+                          "updated_at": "2024-01-01T00:00:30Z",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/batches",
+              "request": {
+                "name": "GetBatchesV3BatchesGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return batches older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return batches newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of batches",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of batches to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                  "status": {
+                    "docs": "If specified, only return batches with this status",
+                    "type": "optional<root.BatchStatus>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseBatch",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getSingleBatch": {
+              "auth": true,
+              "display-name": "Retrieve a batch",
+              "docs": undefined,
+              "errors": [
+                "root.GetSingleBatchV3BatchesIdGetRequestNotFoundError",
+                "root.GetSingleBatchV3BatchesIdGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+batch = sdk.batches.get("f203613d2-83c8-4130-8809-d14206eeec20") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "id": "203613d2-83c8-4130-8809-d14206eeec20",
+                      "progress": 0,
+                      "status": "processing",
+                      "total": 4000,
+                      "updated_at": "2024-01-01T00:00:30Z",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/batches/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Batch",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postBatch": {
+              "auth": true,
+              "display-name": "Submit a batch of transactions",
+              "docs": "Creates a batch of transactions and enriches it in an asynchronous fashion. A batch, representing the status of the 
+enrichment progress is returned as a result of the submission. 
+
+In order to be notified on the status of the batch, you can setup [webhooks](../../../webhooks) and receive 
+the respective notifications. Alternatively, you can 
+[poll](../../../enrichment/introduction/#viewing-the-progress-of-a-batch) for the status of the batch using its id.
+
+This endpoints supports up to 24960 transactions.",
+              "errors": [
+                "root.PostBatchV3BatchesPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/batches/" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '[{
+        "id": "xbx8YP14g565Xk",
+        "description": "SQ* STARBUCKS NW 43RD",
+        "date": "2024-03-30",
+        "amount": 10.0,
+        "entry_type": "outgoing",
+        "currency": "USD",
+        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        "location": {
+            "country": "US"
+        }
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+sdk = SDK("cd1H...Wmhl")
+batch = sdk.batches.create([
+    TransactionInput(
+        id="xbx8YP14g565Xk",
+        description="SQ* STARBUCKS NW 43RD",
+        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        amount=10.0,
+        entry_type="outgoing",
+        date="2024-03-30",
+        currency="USD",
+        location=LocationInput(
+          country="US",
+        )
+    )
+]) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "transactions": [
+                      {
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "amount": 10,
+                        "currency": "USD",
+                        "date": "2024-03-30",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "entry_type": "outgoing",
+                        "id": "xbx8YP14g565Xk",
+                        "location": {
+                          "country": "US",
+                        },
+                      },
+                    ],
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "id": "203613d2-83c8-4130-8809-d14206eeec20",
+                      "progress": 0,
+                      "status": "processing",
+                      "total": 4000,
+                      "updated_at": "2024-01-01T00:00:30Z",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/batches",
+              "request": {
+                "body": {
+                  "properties": {
+                    "transactions": {
+                      "type": "list<root.TransactionInput>",
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "AsyncEnrichmentInput",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Batch",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getBatches:
+      path: /v3/batches
+      method: GET
+      auth: true
+      docs: Returns a list of submitted batches starting with the most recent one.
+      source:
+        openapi: ../openapi.yml
+      display-name: List all batches
+      request:
+        name: GetBatchesV3BatchesGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return batches older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return batches newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of batches
+          limit:
+            type: optional<integer>
+            docs: The limit of batches to be returned
+            validation:
+              min: 1
+              max: 50
+          status:
+            type: optional<root.BatchStatus>
+            docs: If specified, only return batches with this status
+      response:
+        docs: Successful Response
+        type: root.PagedResponseBatch
+      errors:
+        - root.GetBatchesV3BatchesGetRequestUnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: 203613d2-83c8-4130-8809-d14206eeec20
+                  status: processing
+                  created_at: '2024-01-01T00:00:00Z'
+                  updated_at: '2024-01-01T00:00:30Z'
+                  progress: 0
+                  total: 4000
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/batches" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                for batch in sdk.batches.list().auto_paginate():
+                    ... 
+    postBatch:
+      path: /v3/batches
+      method: POST
+      auth: true
+      docs: >-
+        Creates a batch of transactions and enriches it in an asynchronous
+        fashion. A batch, representing the status of the 
+
+        enrichment progress is returned as a result of the submission. 
+
+
+        In order to be notified on the status of the batch, you can setup
+        [webhooks](../../../webhooks) and receive 
+
+        the respective notifications. Alternatively, you can 
+
+        [poll](../../../enrichment/introduction/#viewing-the-progress-of-a-batch)
+        for the status of the batch using its id.
+
+
+        This endpoints supports up to 24960 transactions.
+      source:
+        openapi: ../openapi.yml
+      display-name: Submit a batch of transactions
+      request:
+        name: AsyncEnrichmentInput
+        body:
+          properties:
+            transactions:
+              type: list<root.TransactionInput>
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Batch
+      errors:
+        - root.PostBatchV3BatchesPostRequestUnprocessableEntityError
+      examples:
+        - request:
+            transactions:
+              - id: xbx8YP14g565Xk
+                description: SQ* STARBUCKS NW 43RD
+                date: '2024-03-30'
+                amount: 10
+                entry_type: outgoing
+                currency: USD
+                account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                location:
+                  country: US
+          response:
+            body:
+              id: 203613d2-83c8-4130-8809-d14206eeec20
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              updated_at: '2024-01-01T00:00:30Z'
+              progress: 0
+              total: 4000
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/batches/" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '[{
+                        "id": "xbx8YP14g565Xk",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "date": "2024-03-30",
+                        "amount": 10.0,
+                        "entry_type": "outgoing",
+                        "currency": "USD",
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "location": {
+                            "country": "US"
+                        }
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+                sdk = SDK("cd1H...Wmhl")
+                batch = sdk.batches.create([
+                    TransactionInput(
+                        id="xbx8YP14g565Xk",
+                        description="SQ* STARBUCKS NW 43RD",
+                        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        amount=10.0,
+                        entry_type="outgoing",
+                        date="2024-03-30",
+                        currency="USD",
+                        location=LocationInput(
+                          country="US",
+                        )
+                    )
+                ]) 
+    getSingleBatch:
+      path: /v3/batches/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a batch
+      response:
+        docs: Successful Response
+        type: root.Batch
+      errors:
+        - root.GetSingleBatchV3BatchesIdGetRequestNotFoundError
+        - root.GetSingleBatchV3BatchesIdGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: 203613d2-83c8-4130-8809-d14206eeec20
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              updated_at: '2024-01-01T00:00:30Z'
+              progress: 0
+              total: 4000
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                batch =
+                sdk.batches.get("f203613d2-83c8-4130-8809-d14206eeec20") 
+    getBatchResults:
+      path: /v3/batches/{id}/results
+      method: GET
+      auth: true
+      docs: >-
+        Returns the results of the enrichment request. The resulting enriched
+        transactions are returned in the same order they were submitted. Results
+        are available after the batch has finished processing.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve the results of a batch
+      response:
+        docs: Returned batch of transaction enrichment results.
+        type: root.BatchResult
+      errors:
+        - root.GetBatchResultsV3BatchesIdResultsGetRequestNotFoundError
+        - >-
+          root.GetBatchResultsV3BatchesIdResultsGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: id
+              total: 1
+              status: processing
+              results:
+                transactions:
+                  - entities:
+                      counterparty:
+                        id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                        name: Starbucks
+                        website: starbucks.com
+                        logo: https://logos.ntropy.com/starbucks.com
+                        mccs:
+                          - 5814
+                        type: organization
+                      intermediaries:
+                        - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                          name: Square
+                          website: squareup.com
+                          logo: https://logos.ntropy.com/squareup.com
+                          mccs:
+                            - 1
+                          type: payment_processor
+                    categories:
+                      general: outgoing - coffee shops
+                    location:
+                      raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                      structured:
+                        street: Nw 43rd Street 5480
+                        city: Gainesville
+                        state: Florida
+                        postcode: '32653'
+                        country_code: US
+                        country: United States
+                        latitude: 29.704558
+                        longitude: -82.389277
+                        google_maps_url: >-
+                          https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                        apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                    created_at: '2024-03-30T00:00:00Z'
+                    id: xbx8YP14g565Xk
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20/results" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                results =
+                sdk.batches.wait_for_results("f203613d2-83c8-4130-8809-d14206eeec20")
+  source:
+    openapi: ../openapi.yml
+",
+    },
+    "categories.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "endpoints": {
+            "customCategoriesPost": {
+              "auth": true,
+              "display-name": "Set a custom set of categories",
+              "docs": "Sets a custom set of categories. Transactions that don't match a category will be categorized `not enough information` regardless of whether it is present in the set.",
+              "errors": [
+                "root.CustomCategoriesPostV3CategoriesAccountHolderTypePostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/categories/consumer" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "incoming": [
+            "salary",
+            "investment income",
+            "other income"
+        ],
+        "outgoing": [
+            "rent",
+            "utilities",
+            "groceries",
+            "entertainment"
+        ]
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.categories.set("consumer", {
+    "incoming": [
+        "transfer from investment app",
+        "transfer from stock broker",
+        "transfer from crypto broker",
+        "chargeback",
+        "freelance income",
+        "rideshare or delivery income",
+        "paycheck",
+        "benefits",
+        "interest earned",
+        "stock dividend"
+    ],
+    "outgoing": [
+        "digital content and streaming",
+        "vending machine",
+        "reversal",
+        "transfer to investment app",
+        "transfer to stock broker",
+        "transfer to crypto broker",
+        "adjustment",
+        "intra account transfer",
+        "inter account transfer",
+        "peer to peer transfer",
+        "funeral service",
+        "ATM withdrawal",
+        "teller withdrawal"
+    ]
+})
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "account_holder_type": "consumer",
+                  },
+                  "request": {
+                    "incoming": [
+                      "salary",
+                      "investment income",
+                      "other income",
+                    ],
+                    "outgoing": [
+                      "rent",
+                      "utilities",
+                      "groceries",
+                      "entertainment",
+                    ],
+                  },
+                  "response": {
+                    "body": {
+                      "incoming": [
+                        "salary",
+                        "investment income",
+                        "other income",
+                      ],
+                      "outgoing": [
+                        "rent",
+                        "utilities",
+                        "groceries",
+                        "entertainment",
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/categories/{account_holder_type}",
+              "path-parameters": {
+                "account_holder_type": "root.AccountHolderType",
+              },
+              "request": {
+                "body": {
+                  "type": "root.CustomCategorySet",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Custom categories successfully set.",
+                "type": "root.CustomCategorySet",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "deleteCustomCategorySet": {
+              "auth": true,
+              "display-name": "Reset category set to original values",
+              "docs": "Resets the set of categories of the specified account holder type to the original values.",
+              "errors": [
+                "root.DeleteCustomCategorySetV3CategoriesAccountHolderTypeResetPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/categories/consumer/reset" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.categories.reset("consumer")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "account_holder_type": "consumer",
+                  },
+                  "response": {
+                    "body": {
+                      "incoming": [
+                        "transfer from investment app",
+                        "transfer from stock broker",
+                        "transfer from crypto broker",
+                        "chargeback",
+                        "freelance income",
+                        "rideshare or delivery income",
+                        "paycheck",
+                        "benefits",
+                        "interest earned",
+                        "stock dividend",
+                      ],
+                      "outgoing": [
+                        "digital content and streaming",
+                        "vending machine",
+                        "reversal",
+                        "transfer to investment app",
+                        "transfer to stock broker",
+                        "transfer to crypto broker",
+                        "adjustment",
+                        "intra account transfer",
+                        "inter account transfer",
+                        "peer to peer transfer",
+                        "funeral service",
+                        "ATM withdrawal",
+                        "teller withdrawal",
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/categories/{account_holder_type}/reset",
+              "path-parameters": {
+                "account_holder_type": "root.AccountHolderType",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.CategorySet",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getCategorySet": {
+              "auth": true,
+              "display-name": "Retrieve category set",
+              "docs": "Retrieves the set of categories. Category sets are different per account holder type.",
+              "errors": [
+                "root.GetCategorySetV3CategoriesAccountHolderTypeGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/categories/consumer" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.categories.get("consumer")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "account_holder_type": "consumer",
+                  },
+                  "response": {
+                    "body": {
+                      "incoming": [
+                        "transfer from investment app",
+                        "transfer from stock broker",
+                        "transfer from crypto broker",
+                        "chargeback",
+                        "freelance income",
+                        "rideshare or delivery income",
+                        "paycheck",
+                        "benefits",
+                        "interest earned",
+                        "stock dividend",
+                      ],
+                      "outgoing": [
+                        "digital content and streaming",
+                        "vending machine",
+                        "reversal",
+                        "transfer to investment app",
+                        "transfer to stock broker",
+                        "transfer to crypto broker",
+                        "adjustment",
+                        "intra account transfer",
+                        "inter account transfer",
+                        "peer to peer transfer",
+                        "funeral service",
+                        "ATM withdrawal",
+                        "teller withdrawal",
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/categories/{account_holder_type}",
+              "path-parameters": {
+                "account_holder_type": "root.AccountHolderType",
+              },
+              "response": {
+                "docs": "Category set for the selected type of account holder",
+                "type": "root.CategorySet",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getCategorySet:
+      path: /v3/categories/{account_holder_type}
+      method: GET
+      auth: true
+      docs: >-
+        Retrieves the set of categories. Category sets are different per account
+        holder type.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        account_holder_type: root.AccountHolderType
+      display-name: Retrieve category set
+      response:
+        docs: Category set for the selected type of account holder
+        type: root.CategorySet
+      errors:
+        - >-
+          root.GetCategorySetV3CategoriesAccountHolderTypeGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            account_holder_type: consumer
+          response:
+            body:
+              incoming:
+                - transfer from investment app
+                - transfer from stock broker
+                - transfer from crypto broker
+                - chargeback
+                - freelance income
+                - rideshare or delivery income
+                - paycheck
+                - benefits
+                - interest earned
+                - stock dividend
+              outgoing:
+                - digital content and streaming
+                - vending machine
+                - reversal
+                - transfer to investment app
+                - transfer to stock broker
+                - transfer to crypto broker
+                - adjustment
+                - intra account transfer
+                - inter account transfer
+                - peer to peer transfer
+                - funeral service
+                - ATM withdrawal
+                - teller withdrawal
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/categories/consumer" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.categories.get("consumer")
+    customCategoriesPost:
+      path: /v3/categories/{account_holder_type}
+      method: POST
+      auth: true
+      docs: >-
+        Sets a custom set of categories. Transactions that don't match a
+        category will be categorized `not enough information` regardless of
+        whether it is present in the set.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        account_holder_type: root.AccountHolderType
+      display-name: Set a custom set of categories
+      request:
+        body:
+          type: root.CustomCategorySet
+        content-type: application/json
+      response:
+        docs: Custom categories successfully set.
+        type: root.CustomCategorySet
+      errors:
+        - >-
+          root.CustomCategoriesPostV3CategoriesAccountHolderTypePostRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            account_holder_type: consumer
+          request:
+            incoming:
+              - salary
+              - investment income
+              - other income
+            outgoing:
+              - rent
+              - utilities
+              - groceries
+              - entertainment
+          response:
+            body:
+              incoming:
+                - salary
+                - investment income
+                - other income
+              outgoing:
+                - rent
+                - utilities
+                - groceries
+                - entertainment
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/categories/consumer" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "incoming": [
+                            "salary",
+                            "investment income",
+                            "other income"
+                        ],
+                        "outgoing": [
+                            "rent",
+                            "utilities",
+                            "groceries",
+                            "entertainment"
+                        ]
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.categories.set("consumer", {
+                    "incoming": [
+                        "transfer from investment app",
+                        "transfer from stock broker",
+                        "transfer from crypto broker",
+                        "chargeback",
+                        "freelance income",
+                        "rideshare or delivery income",
+                        "paycheck",
+                        "benefits",
+                        "interest earned",
+                        "stock dividend"
+                    ],
+                    "outgoing": [
+                        "digital content and streaming",
+                        "vending machine",
+                        "reversal",
+                        "transfer to investment app",
+                        "transfer to stock broker",
+                        "transfer to crypto broker",
+                        "adjustment",
+                        "intra account transfer",
+                        "inter account transfer",
+                        "peer to peer transfer",
+                        "funeral service",
+                        "ATM withdrawal",
+                        "teller withdrawal"
+                    ]
+                })
+    deleteCustomCategorySet:
+      path: /v3/categories/{account_holder_type}/reset
+      method: POST
+      auth: true
+      docs: >-
+        Resets the set of categories of the specified account holder type to the
+        original values.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        account_holder_type: root.AccountHolderType
+      display-name: Reset category set to original values
+      response:
+        docs: Successful Response
+        type: root.CategorySet
+      errors:
+        - >-
+          root.DeleteCustomCategorySetV3CategoriesAccountHolderTypeResetPostRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            account_holder_type: consumer
+          response:
+            body:
+              incoming:
+                - transfer from investment app
+                - transfer from stock broker
+                - transfer from crypto broker
+                - chargeback
+                - freelance income
+                - rideshare or delivery income
+                - paycheck
+                - benefits
+                - interest earned
+                - stock dividend
+              outgoing:
+                - digital content and streaming
+                - vending machine
+                - reversal
+                - transfer to investment app
+                - transfer to stock broker
+                - transfer to crypto broker
+                - adjustment
+                - intra account transfer
+                - inter account transfer
+                - peer to peer transfer
+                - funeral service
+                - ATM withdrawal
+                - teller withdrawal
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/categories/consumer/reset" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.categories.reset("consumer")
+  source:
+    openapi: ../openapi.yml
+",
+    },
+    "entities.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "endpoints": {
+            "getEntityById": {
+              "auth": true,
+              "display-name": "Retrieve an entity",
+              "docs": "Retrieve more information about an entity by using its unique ID.",
+              "errors": [
+                "root.GetEntityByIdV3EntitiesIdGetRequestBadRequestError",
+                "root.GetEntityByIdV3EntitiesIdGetRequestNotFoundError",
+                "root.GetEntityByIdV3EntitiesIdGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/entities/d4bc3c80-ec1a-3da2-836e-2a4ca4758be5" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.entities.lookup("d4bc3c80-ec1a-3da2-836e-2a4ca4758be5") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                      "logo": "https://logos.ntropy.com/starbucks.com",
+                      "mccs": [
+                        5814,
+                      ],
+                      "name": "Starbucks",
+                      "website": "starbucks.com",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/entities/{id}",
+              "path-parameters": {
+                "id": {
+                  "docs": "The unique ID of the entity",
+                  "type": "string",
+                },
+              },
+              "response": {
+                "docs": "Entity",
+                "type": "root.Entity",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "searchEntity": {
+              "auth": true,
+              "display-name": "Searches for an entity",
+              "docs": "Resolves a query into an entity by querying our entity resolution system. 
+    The parameters `name` and `website` are mutually exclusive. Calls to this endpoint using 
+    the `name` parameter are billed the same way transactions are.",
+              "errors": [
+                "root.SearchEntityV3EntitiesLookupGetRequestBadRequestError",
+                "root.SearchEntityV3EntitiesLookupGetRequestUnprocessableEntityError",
+                "root.SearchEntityV3EntitiesLookupGetRequestLockedError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/entities?name=Starbucks" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.entities.lookup(name="Starbucks") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                      "logo": "https://logos.ntropy.com/starbucks.com",
+                      "mccs": [
+                        5814,
+                      ],
+                      "name": "Starbucks",
+                      "website": "starbucks.com",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/entities/lookup",
+              "request": {
+                "name": "SearchEntityV3EntitiesLookupGetRequest",
+                "query-parameters": {
+                  "location": {
+                    "docs": "An unstructured location string of the entity to resolve",
+                    "type": "optional<string>",
+                  },
+                  "name": {
+                    "docs": "The name of the entity to resolve",
+                    "type": "optional<string>",
+                  },
+                  "website": {
+                    "docs": "The website of the entity to resolve",
+                    "type": "optional<string>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Entity",
+                "type": "root.Entity",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    searchEntity:
+      path: /v3/entities/lookup
+      method: GET
+      auth: true
+      docs: >-
+        Resolves a query into an entity by querying our entity resolution
+        system. 
+            The parameters `name` and `website` are mutually exclusive. Calls to this endpoint using 
+            the `name` parameter are billed the same way transactions are.
+      source:
+        openapi: ../openapi.yml
+      display-name: Searches for an entity
+      request:
+        name: SearchEntityV3EntitiesLookupGetRequest
+        query-parameters:
+          name:
+            type: optional<string>
+            docs: The name of the entity to resolve
+          website:
+            type: optional<string>
+            docs: The website of the entity to resolve
+          location:
+            type: optional<string>
+            docs: An unstructured location string of the entity to resolve
+      response:
+        docs: Entity
+        type: root.Entity
+      errors:
+        - root.SearchEntityV3EntitiesLookupGetRequestBadRequestError
+        - root.SearchEntityV3EntitiesLookupGetRequestUnprocessableEntityError
+        - root.SearchEntityV3EntitiesLookupGetRequestLockedError
+      examples:
+        - response:
+            body:
+              id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+              name: Starbucks
+              website: starbucks.com
+              logo: https://logos.ntropy.com/starbucks.com
+              mccs:
+                - 5814
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/entities?name=Starbucks" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.entities.lookup(name="Starbucks") 
+    getEntityById:
+      path: /v3/entities/{id}
+      method: GET
+      auth: true
+      docs: Retrieve more information about an entity by using its unique ID.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id:
+          type: string
+          docs: The unique ID of the entity
+      display-name: Retrieve an entity
+      response:
+        docs: Entity
+        type: root.Entity
+      errors:
+        - root.GetEntityByIdV3EntitiesIdGetRequestBadRequestError
+        - root.GetEntityByIdV3EntitiesIdGetRequestNotFoundError
+        - root.GetEntityByIdV3EntitiesIdGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+              name: Starbucks
+              website: starbucks.com
+              logo: https://logos.ntropy.com/starbucks.com
+              mccs:
+                - 5814
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/entities/d4bc3c80-ec1a-3da2-836e-2a4ca4758be5" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.entities.lookup("d4bc3c80-ec1a-3da2-836e-2a4ca4758be5") 
+  source:
+    openapi: ../openapi.yml
+",
+    },
+    "personalization.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Personalization API allows you to customize the output of enrichment by
+uploading a set of rules. For more information, see our documentation on
+[Personalization](None).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Personalization",
+          "endpoints": {
+            "filterAppend": {
+              "auth": true,
+              "display-name": "Append a rule.",
+              "docs": "Append a rule to the personalization ruleset.",
+              "errors": [
+                "root.FilterAppendV3RulesAppendPostRequestBadRequestError",
+                "root.FilterAppendV3RulesAppendPostRequestContentTooLargeError",
+                "root.FilterAppendV3RulesAppendPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/rules/append" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl" \
+    -H "Content-Type: application/json" \
+    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.append({"set": "logo", "to": "http://example.com/favicon.ico"})
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "if": true,
+                  },
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/rules/append",
+              "request": {
+                "body": {
+                  "type": "root.action",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterDelete": {
+              "auth": true,
+              "display-name": "Delete a rule.",
+              "docs": "Delete the rule at the specified index from the personalization ruleset.",
+              "errors": [
+                "root.FilterDeleteV3RulesIndexDeleteRequestBadRequestError",
+                "root.FilterDeleteV3RulesIndexDeleteRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/rules/0" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.delete(0)
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "index": 1,
+                  },
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/rules/{index}",
+              "path-parameters": {
+                "index": "integer",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterGet": {
+              "auth": true,
+              "display-name": "Get the current personalization ruleset.",
+              "docs": "Get the current personalization ruleset.",
+              "errors": [
+                "root.FilterGetV3RulesGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/rules" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+rules = sdk.rules.get()
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": [
+                      {
+                        "if": {
+                          "is_substring": [],
+                        },
+                      },
+                    ],
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/rules",
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Filter",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterPatch": {
+              "auth": true,
+              "display-name": "Modify an existing rule.",
+              "docs": "Modify an existing rule at the specified index on the ruleset.",
+              "errors": [
+                "root.FilterPatchV3RulesIndexPatchRequestBadRequestError",
+                "root.FilterPatchV3RulesIndexPatchRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "PATCH" \
+    "https://api.ntropy.com/v3/rules/0" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl" \
+    -H "Content-Type: application/json" \
+    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.patch(0, {"set": "logo", "to": "http://example.com/favicon.ico"})
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "index": 1,
+                  },
+                  "request": {
+                    "if": true,
+                  },
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "PATCH",
+              "pagination": undefined,
+              "path": "/v3/rules/{index}",
+              "path-parameters": {
+                "index": "integer",
+              },
+              "request": {
+                "body": {
+                  "type": "root.action",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterPost": {
+              "auth": true,
+              "display-name": "Set the personalization ruleset.",
+              "docs": "Set the personalization ruleset.",
+              "errors": [
+                "root.FilterPostV3RulesPostRequestBadRequestError",
+                "root.FilterPostV3RulesPostRequestContentTooLargeError",
+                "root.FilterPostV3RulesPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/rules" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl" \
+    -H "Content-Type: application/json" \
+    -d '[{
+        "if": {
+            "is_substring": [
+                {"get": "website"},
+                "ntropy"
+            ]
+        },
+        "then": [
+            {"set": "logo", "to": "http://example.com/favicon.ico"}
+        ],
+        "else": [
+            {"remove_label": "example label"}
+        ]
+    }]'
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.set([{
+    "if": {
+        "is_substring": [
+            {"get": "website"},
+            "ntropy"
+        ]
+    },
+    "then": [
+        {"set": "logo", "to": "http://example.com/favicon.ico"}
+    ],
+    "else": [
+        {"remove_label": "example label"}
+    ]
+}])
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": [
+                    {
+                      "if": {
+                        "is_substring": [],
+                      },
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/rules",
+              "request": {
+                "body": {
+                  "type": "root.Filter",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    filterGet:
+      path: /v3/rules
+      method: GET
+      auth: true
+      docs: Get the current personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      display-name: Get the current personalization ruleset.
+      response:
+        docs: Successful Response
+        type: root.Filter
+      errors:
+        - root.FilterGetV3RulesGetRequestUnprocessableEntityError
+      examples:
+        - response:
+            body:
+              - if:
+                  is_substring: []
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/rules" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                rules = sdk.rules.get()
+    filterPost:
+      path: /v3/rules
+      method: POST
+      auth: true
+      docs: Set the personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      display-name: Set the personalization ruleset.
+      request:
+        body:
+          type: root.Filter
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.FilterPostV3RulesPostRequestBadRequestError
+        - root.FilterPostV3RulesPostRequestContentTooLargeError
+        - root.FilterPostV3RulesPostRequestUnprocessableEntityError
+      examples:
+        - request:
+            - if:
+                is_substring: []
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/rules" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl" \
+                    -H "Content-Type: application/json" \
+                    -d '[{
+                        "if": {
+                            "is_substring": [
+                                {"get": "website"},
+                                "ntropy"
+                            ]
+                        },
+                        "then": [
+                            {"set": "logo", "to": "http://example.com/favicon.ico"}
+                        ],
+                        "else": [
+                            {"remove_label": "example label"}
+                        ]
+                    }]'
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.rules.set([{
+                    "if": {
+                        "is_substring": [
+                            {"get": "website"},
+                            "ntropy"
+                        ]
+                    },
+                    "then": [
+                        {"set": "logo", "to": "http://example.com/favicon.ico"}
+                    ],
+                    "else": [
+                        {"remove_label": "example label"}
+                    ]
+                }])
+    filterAppend:
+      path: /v3/rules/append
+      method: POST
+      auth: true
+      docs: Append a rule to the personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      display-name: Append a rule.
+      request:
+        body:
+          type: root.action
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.FilterAppendV3RulesAppendPostRequestBadRequestError
+        - root.FilterAppendV3RulesAppendPostRequestContentTooLargeError
+        - root.FilterAppendV3RulesAppendPostRequestUnprocessableEntityError
+      examples:
+        - request:
+            if: true
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/rules/append" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl" \
+                    -H "Content-Type: application/json" \
+                    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                sdk.rules.append({"set": "logo", "to":
+                "http://example.com/favicon.ico"})
+    filterDelete:
+      path: /v3/rules/{index}
+      method: DELETE
+      auth: true
+      docs: Delete the rule at the specified index from the personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        index: integer
+      display-name: Delete a rule.
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.FilterDeleteV3RulesIndexDeleteRequestBadRequestError
+        - root.FilterDeleteV3RulesIndexDeleteRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            index: 1
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/rules/0" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.rules.delete(0)
+    filterPatch:
+      path: /v3/rules/{index}
+      method: PATCH
+      auth: true
+      docs: Modify an existing rule at the specified index on the ruleset.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        index: integer
+      display-name: Modify an existing rule.
+      request:
+        body:
+          type: root.action
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.FilterPatchV3RulesIndexPatchRequestBadRequestError
+        - root.FilterPatchV3RulesIndexPatchRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            index: 1
+          request:
+            if: true
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |
+                curl -X "PATCH" \
+                    "https://api.ntropy.com/v3/rules/0" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl" \
+                    -H "Content-Type: application/json" \
+                    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                sdk.rules.patch(0, {"set": "logo", "to":
+                "http://example.com/favicon.ico"})
+  source:
+    openapi: ../openapi.yml
+  display-name: Personalization
+docs: |
+
+  The Personalization API allows you to customize the output of enrichment by
+  uploading a set of rules. For more information, see our documentation on
+  [Personalization](None).
+",
+    },
+    "recurrence.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Recurrence API allows you to identify and categorize recurring patterns found in the transactions of an 
+[account holder](#tag/Account-Holders), such as periodic payments or subscriptions and group them 
+into recurrence groups. Each recurrence group contains detailed information about the pattern, 
+such as periodicity, amount and counterparty.
+
+Transactions can be added to an account holder via the [Enrichment API](#tag/Enrichment). 
+It is crucial that transactions are submitted with the [correct](../../../account-holders) 
+account holder information as the recurrence calculation relies heavily on it.
+
+Complete guide: [Recurrence](../../../enrichment/recurrence).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Recurrence",
+          "endpoints": {
+            "getAccountHolderRecurringPayments": {
+              "auth": true,
+              "display-name": "Find recurring groups in a transaction history",
+              "docs": "Identifies and categorizes recurring patterns found in the transaction history of the account holder, such as periodic payments or subscriptions. These patterns are called recurrence groups.",
+              "errors": [
+                "root.GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestNotFoundError",
+                "root.GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad/recurring_groups" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+recurring_groups = sdk.account_holders.recurring_groups(
+    "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": [
+                      {
+                        "average_amount": 10,
+                        "categories": {
+                          "accounting": "operational expenses",
+                          "general": "outgoing - coffee shops",
+                        },
+                        "counterparty": {
+                          "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                          "logo": "https://logos.ntropy.com/starbucks.com",
+                          "mccs": [
+                            5814,
+                          ],
+                          "name": "Starbucks",
+                          "type": "organization",
+                          "website": "starbucks.com",
+                        },
+                        "end_date": "2024-03-30",
+                        "id": "8efbac45-9bd5-4b67-be29-334106198c40",
+                        "periodicity": "daily",
+                        "periodicity_in_days": 1,
+                        "start_date": "2024-03-01",
+                        "total_amount": 300,
+                        "transaction_ids": [
+                          "2dc6SE8A7cTQ2jUdUadCg",
+                          "tQYAhhl0XNkl1wasacpVQ",
+                          "NNJTqvockIdKnYxBqPlJw",
+                        ],
+                      },
+                    ],
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/account_holders/{id}/recurring_groups",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "list<root.RecurrenceGroup>",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getAccountHolderRecurringPayments:
+      path: /v3/account_holders/{id}/recurring_groups
+      method: POST
+      auth: true
+      docs: >-
+        Identifies and categorizes recurring patterns found in the transaction
+        history of the account holder, such as periodic payments or
+        subscriptions. These patterns are called recurrence groups.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Find recurring groups in a transaction history
+      response:
+        docs: Successful Response
+        type: list<root.RecurrenceGroup>
+      errors:
+        - >-
+          root.GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestNotFoundError
+        - >-
+          root.GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              - id: 8efbac45-9bd5-4b67-be29-334106198c40
+                start_date: '2024-03-01'
+                end_date: '2024-03-30'
+                total_amount: 300
+                average_amount: 10
+                periodicity_in_days: 1
+                periodicity: daily
+                counterparty:
+                  id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                  name: Starbucks
+                  website: starbucks.com
+                  logo: https://logos.ntropy.com/starbucks.com
+                  mccs:
+                    - 5814
+                  type: organization
+                categories:
+                  general: outgoing - coffee shops
+                  accounting: operational expenses
+                transaction_ids:
+                  - 2dc6SE8A7cTQ2jUdUadCg
+                  - tQYAhhl0XNkl1wasacpVQ
+                  - NNJTqvockIdKnYxBqPlJw
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad/recurring_groups" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                recurring_groups = sdk.account_holders.recurring_groups(
+                    "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Recurrence
+docs: >
+
+  The Recurrence API allows you to identify and categorize recurring patterns
+  found in the transactions of an 
+
+  [account holder](#tag/Account-Holders), such as periodic payments or
+  subscriptions and group them 
+
+  into recurrence groups. Each recurrence group contains detailed information
+  about the pattern, 
+
+  such as periodicity, amount and counterparty.
+
+
+  Transactions can be added to an account holder via the [Enrichment
+  API](#tag/Enrichment). 
+
+  It is crucial that transactions are submitted with the
+  [correct](../../../account-holders) 
+
+  account holder information as the recurrence calculation relies heavily on it.
+
+
+  Complete guide: [Recurrence](../../../enrichment/recurrence).
+",
+    },
+    "reports.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Reports API allows you to flag transactions with incorrect fields. You can also track the progress of each
+report either through the API or using [webhooks](#tag/Webhooks).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Reports",
+          "endpoints": {
+            "deleteReport": {
+              "auth": true,
+              "display-name": "Delete a report",
+              "docs": "Delete a report",
+              "errors": [
+                "root.DeleteReportV3ReportsIdDeleteRequestNotFoundError",
+                "root.DeleteReportV3ReportsIdDeleteRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/reports/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getReport": {
+              "auth": true,
+              "display-name": "Retrieve a report",
+              "docs": "Retrieve a report",
+              "errors": [
+                "root.GetReportV3ReportsIdGetRequestNotFoundError",
+                "root.GetReportV3ReportsIdGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/reports/a652285d-de1b-4a6f-b6ce-45efa9be7952" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+report = sdk.reports.get("a652285d-de1b-4a6f-b6ce-45efa9be7952")
+    ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "description": "lorem ipsum",
+                      "fields": [
+                        ".entities.counterparty",
+                      ],
+                      "id": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                      "rejection_reason": "rejection_reason",
+                      "status": "open",
+                      "transaction_id": "xbx8YP14g565Xk",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/reports/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Report",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getReports": {
+              "auth": true,
+              "display-name": "List all reports",
+              "docs": "List all reports",
+              "errors": [
+                "root.GetReportsV3ReportsGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/reports" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+reports = sdk.reports.list()
+    ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-10-03T02:53:30Z",
+                          "description": "lorem ipsum",
+                          "fields": [
+                            ".entities.counterparty",
+                          ],
+                          "id": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                          "rejection_reason": "rejection_reason",
+                          "status": "open",
+                          "transaction_id": "xbx8YP14g565Xk",
+                        },
+                      ],
+                      "next_cursor": "next_cursor",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/reports",
+              "request": {
+                "name": "GetReportsV3ReportsGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return report older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return report newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of report",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of report to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                  "status": {
+                    "docs": "If specified, only return reports with this status",
+                    "type": "optional<root.ReportStatus>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseReport",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postReport": {
+              "auth": true,
+              "display-name": "Create a report",
+              "docs": "Report a transaction with incorrect fields.",
+              "errors": [
+                "root.PostReportV3ReportsPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/reports" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "transaction_id": "xbx8YP14g565Xk",
+        "description": "lorem ipsum",
+        "fields": [
+            ".entities.counterparty"
+        ]
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+report = sdk.reports.create(
+    transaction_id="xbx8YP14g565Xk",
+    description="lorem ipsum",
+    fields=['.entities.counterparty'],
+)
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "description": "lorem ipsum",
+                    "fields": [
+                      ".entities.counterparty",
+                    ],
+                    "transaction_id": "xbx8YP14g565Xk",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "description": "lorem ipsum",
+                      "fields": [
+                        ".entities.counterparty",
+                      ],
+                      "id": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                      "rejection_reason": "rejection_reason",
+                      "status": "open",
+                      "transaction_id": "xbx8YP14g565Xk",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/reports",
+              "request": {
+                "body": {
+                  "properties": {
+                    "description": {
+                      "docs": "A description of what is wrong in the transaction",
+                      "type": "string",
+                    },
+                    "fields": {
+                      "docs": "A list of the fields that are incorrect",
+                      "type": "list<string>",
+                    },
+                    "transaction_id": {
+                      "docs": "The unique identifier of the transaction",
+                      "type": "string",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": undefined,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "ReportBase",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "The newly created report",
+                "type": "root.Report",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getReports:
+      path: /v3/reports
+      method: GET
+      auth: true
+      docs: List all reports
+      source:
+        openapi: ../openapi.yml
+      display-name: List all reports
+      request:
+        name: GetReportsV3ReportsGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return report older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return report newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of report
+          limit:
+            type: optional<integer>
+            docs: The limit of report to be returned
+            validation:
+              min: 1
+              max: 50
+          status:
+            type: optional<root.ReportStatus>
+            docs: If specified, only return reports with this status
+      response:
+        docs: Successful Response
+        type: root.PagedResponseReport
+      errors:
+        - root.GetReportsV3ReportsGetRequestUnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: next_cursor
+              data:
+                - transaction_id: xbx8YP14g565Xk
+                  description: lorem ipsum
+                  fields:
+                    - .entities.counterparty
+                  id: a652285d-de1b-4a6f-b6ce-45efa9be7952
+                  created_at: '2024-10-03T02:53:30Z'
+                  status: open
+                  rejection_reason: rejection_reason
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/reports" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                reports = sdk.reports.list()
+                    
+    postReport:
+      path: /v3/reports
+      method: POST
+      auth: true
+      docs: Report a transaction with incorrect fields.
+      source:
+        openapi: ../openapi.yml
+      display-name: Create a report
+      request:
+        name: ReportBase
+        body:
+          properties:
+            transaction_id:
+              type: string
+              docs: The unique identifier of the transaction
+              validation:
+                minLength: 1
+            description:
+              type: string
+              docs: A description of what is wrong in the transaction
+            fields:
+              docs: A list of the fields that are incorrect
+              type: list<string>
+        content-type: application/json
+      response:
+        docs: The newly created report
+        type: root.Report
+      errors:
+        - root.PostReportV3ReportsPostRequestUnprocessableEntityError
+      examples:
+        - request:
+            transaction_id: xbx8YP14g565Xk
+            description: lorem ipsum
+            fields:
+              - .entities.counterparty
+          response:
+            body:
+              transaction_id: xbx8YP14g565Xk
+              description: lorem ipsum
+              fields:
+                - .entities.counterparty
+              id: a652285d-de1b-4a6f-b6ce-45efa9be7952
+              created_at: '2024-10-03T02:53:30Z'
+              status: open
+              rejection_reason: rejection_reason
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/reports" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "transaction_id": "xbx8YP14g565Xk",
+                        "description": "lorem ipsum",
+                        "fields": [
+                            ".entities.counterparty"
+                        ]
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                report = sdk.reports.create(
+                    transaction_id="xbx8YP14g565Xk",
+                    description="lorem ipsum",
+                    fields=['.entities.counterparty'],
+                )
+    getReport:
+      path: /v3/reports/{id}
+      method: GET
+      auth: true
+      docs: Retrieve a report
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a report
+      response:
+        docs: Successful Response
+        type: root.Report
+      errors:
+        - root.GetReportV3ReportsIdGetRequestNotFoundError
+        - root.GetReportV3ReportsIdGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              transaction_id: xbx8YP14g565Xk
+              description: lorem ipsum
+              fields:
+                - .entities.counterparty
+              id: a652285d-de1b-4a6f-b6ce-45efa9be7952
+              created_at: '2024-10-03T02:53:30Z'
+              status: open
+              rejection_reason: rejection_reason
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/reports/a652285d-de1b-4a6f-b6ce-45efa9be7952" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                report = sdk.reports.get("a652285d-de1b-4a6f-b6ce-45efa9be7952")
+                    
+    deleteReport:
+      path: /v3/reports/{id}
+      method: DELETE
+      auth: true
+      docs: Delete a report
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Delete a report
+      errors:
+        - root.DeleteReportV3ReportsIdDeleteRequestNotFoundError
+        - root.DeleteReportV3ReportsIdDeleteRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+  source:
+    openapi: ../openapi.yml
+  display-name: Reports
+docs: >
+
+  The Reports API allows you to flag transactions with incorrect fields. You can
+  also track the progress of each
+
+  report either through the API or using [webhooks](#tag/Webhooks).
+",
+    },
+    "transactions.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Transaction API allows you to manage, retrieve and search through enriched transactions. A transaction contains
+both the enrichment fields and the original input fields. They are made available after being 
+[enriched](#tag/Enrichment).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Transactions",
+          "endpoints": {
+            "deleteTransaction": {
+              "auth": true,
+              "display-name": "Deletes a transaction",
+              "docs": "Deleting a transaction will also delete it from our systems. This operation is permanent.",
+              "errors": [
+                "root.DeleteTransactionV3TransactionsIdDeleteRequestNotFoundError",
+                "root.DeleteTransactionV3TransactionsIdDeleteRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+tx = sdk.transactions.delete("xbx8YP14g565Xk") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/transactions/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getTransaction": {
+              "auth": true,
+              "display-name": "Retrieve a transaction",
+              "docs": undefined,
+              "errors": [
+                "root.GetTransactionV3TransactionsIdGetRequestNotFoundError",
+                "root.GetTransactionV3TransactionsIdGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+tx = sdk.transactions.get("xbx8YP14g565Xk") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "amount": 10,
+                      "categories": {
+                        "accounting": "operational expenses",
+                        "general": "outgoing - coffee shops",
+                      },
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "currency": "USD",
+                      "date": "2024-03-30",
+                      "description": "SQ* STARBUCKS NW 43RD",
+                      "entities": {
+                        "counterparty": {
+                          "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                          "logo": "https://logos.ntropy.com/starbucks.com",
+                          "mccs": [
+                            5814,
+                          ],
+                          "name": "Starbucks",
+                          "type": "organization",
+                          "website": "starbucks.com",
+                        },
+                        "intermediaries": [
+                          {
+                            "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                            "logo": "https://logos.ntropy.com/squareup.com",
+                            "mccs": [
+                              1,
+                            ],
+                            "name": "Square",
+                            "type": "payment_processor",
+                            "website": "squareup.com",
+                          },
+                        ],
+                      },
+                      "entry_type": "outgoing",
+                      "error": {
+                        "code": "account_holder_not_found",
+                        "message": "message",
+                      },
+                      "id": "xbx8YP14g565Xk",
+                      "location": {
+                        "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                        "structured": {
+                          "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                          "city": "Gainesville",
+                          "country": "United States",
+                          "country_code": "US",
+                          "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                          "latitude": 29.704558,
+                          "longitude": -82.389277,
+                          "postcode": "32653",
+                          "state": "Florida",
+                          "store_number": "store_number",
+                          "street": "Nw 43rd Street 5480",
+                        },
+                      },
+                      "recurrence": {
+                        "type": "recurring",
+                      },
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/transactions/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Transaction",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "listTransactions": {
+              "auth": true,
+              "display-name": "List all transactions",
+              "docs": "Return a list of enriched transactions starting with the most recent one.",
+              "errors": [
+                "root.ListTransactionsV3TransactionsGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/transactions" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+for tx in sdk.transactions.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                          "amount": 10,
+                          "categories": {
+                            "general": "outgoing - coffee shops",
+                          },
+                          "created_at": "2024-03-30T00:00:00Z",
+                          "currency": "USD",
+                          "date": "2024-03-30",
+                          "description": "SQ* STARBUCKS NW 43RD",
+                          "entities": {
+                            "counterparty": {
+                              "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                              "logo": "https://logos.ntropy.com/starbucks.com",
+                              "mccs": [
+                                5814,
+                              ],
+                              "name": "Starbucks",
+                              "type": "organization",
+                              "website": "starbucks.com",
+                            },
+                            "intermediaries": [
+                              {
+                                "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                "logo": "https://logos.ntropy.com/squareup.com",
+                                "mccs": [
+                                  1,
+                                ],
+                                "name": "Square",
+                                "type": "payment_processor",
+                                "website": "squareup.com",
+                              },
+                            ],
+                          },
+                          "entry_type": "outgoing",
+                          "error": {
+                            "code": "account_holder_not_found",
+                            "message": "message",
+                          },
+                          "id": "xbx8YP14g565Xk",
+                          "location": {
+                            "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                            "structured": {
+                              "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                              "city": "Gainesville",
+                              "country": "United States",
+                              "country_code": "US",
+                              "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                              "latitude": 29.704558,
+                              "longitude": -82.389277,
+                              "postcode": "32653",
+                              "state": "Florida",
+                              "street": "Nw 43rd Street 5480",
+                            },
+                          },
+                          "recurrence": {
+                            "type": "recurring",
+                          },
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/transactions",
+              "request": {
+                "name": "ListTransactionsV3TransactionsGetRequest",
+                "query-parameters": {
+                  "account_holder_id": {
+                    "docs": "If specified, only return the transactions of this account holder",
+                    "type": "optional<string>",
+                  },
+                  "created_after": {
+                    "docs": "Only return transactions older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return transactions newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of transactions",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of transactions to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 500,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseTransaction",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postTransactions": {
+              "auth": true,
+              "display-name": "Synchronously enrich transactions",
+              "docs": "Enriches a list of transactions in synchronous fashion. The enriched transactions returned in
+the order that they were submitted. Webhook events are not triggered for this operation. 
+
+This endpoint supports up to 1000 transactions. 
+
+If you want more throughput and live updates refer to the 
+[async enrichment endpoint](../batches/post-batch).",
+              "errors": [
+                "root.PostTransactionsV3TransactionsPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/transactions" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '[{
+        "id": "xbx8YP14g565Xk",
+        "description": "SQ* STARBUCKS NW 43RD",
+        "date": "2024-03-30",
+        "amount": 10.0,
+        "entry_type": "outgoing",
+        "currency": "USD",
+        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        "location": {
+            "country": "US"
+        }
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+sdk = SDK("cd1H...Wmhl")
+enriched = sdk.transactions.create([
+    TransactionInput(
+        id="xbx8YP14g565Xk",
+        description="SQ* STARBUCKS NW 43RD",
+        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        amount=10.0,
+        entry_type="outgoing",
+        date="2024-03-30",
+        currency="USD",
+        location=LocationInput(
+          country="US",
+        )
+    )
+]) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "transactions": [
+                      {
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "amount": 10,
+                        "currency": "USD",
+                        "date": "2024-03-30",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "entry_type": "outgoing",
+                        "id": "xbx8YP14g565Xk",
+                        "location": {
+                          "country": "US",
+                        },
+                      },
+                    ],
+                  },
+                  "response": {
+                    "body": {
+                      "transactions": [
+                        {
+                          "categories": {
+                            "general": "outgoing - coffee shops",
+                          },
+                          "created_at": "2024-03-30T00:00:00Z",
+                          "entities": {
+                            "counterparty": {
+                              "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                              "logo": "https://logos.ntropy.com/starbucks.com",
+                              "mccs": [
+                                5814,
+                              ],
+                              "name": "Starbucks",
+                              "type": "organization",
+                              "website": "starbucks.com",
+                            },
+                            "intermediaries": [
+                              {
+                                "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                "logo": "https://logos.ntropy.com/squareup.com",
+                                "mccs": [
+                                  1,
+                                ],
+                                "name": "Square",
+                                "type": "payment_processor",
+                                "website": "squareup.com",
+                              },
+                            ],
+                          },
+                          "error": {
+                            "code": "account_holder_not_found",
+                            "message": "message",
+                          },
+                          "id": "xbx8YP14g565Xk",
+                          "location": {
+                            "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                            "structured": {
+                              "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                              "city": "Gainesville",
+                              "country": "United States",
+                              "country_code": "US",
+                              "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                              "latitude": 29.704558,
+                              "longitude": -82.389277,
+                              "postcode": "32653",
+                              "state": "Florida",
+                              "street": "Nw 43rd Street 5480",
+                            },
+                          },
+                        },
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/transactions",
+              "request": {
+                "body": {
+                  "properties": {
+                    "transactions": {
+                      "type": "list<root.TransactionInput>",
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "SyncEnrichmentInput",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Enriched transactions.",
+                "type": "root.SyncEnrichmentOutput",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "setTransactionAh": {
+              "auth": true,
+              "display-name": "Assign a transaction to an account holder",
+              "docs": "Changes the account holder associated with the transaction. The old and new account holder must share the same categories",
+              "errors": [
+                "root.SetTransactionAhV3TransactionsIdAssignPostRequestNotFoundError",
+                "root.SetTransactionAhV3TransactionsIdAssignPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.transactions.assign(
+    transaction_id="xbx8YP14g565Xk", 
+    account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "request": {
+                    "account_holder_id": "account_holder_id",
+                  },
+                  "response": {
+                    "body": {
+                      "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "amount": 10,
+                      "categories": {
+                        "accounting": "operational expenses",
+                        "general": "outgoing - coffee shops",
+                      },
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "currency": "USD",
+                      "date": "2024-03-30",
+                      "description": "SQ* STARBUCKS NW 43RD",
+                      "entities": {
+                        "counterparty": {
+                          "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                          "logo": "https://logos.ntropy.com/starbucks.com",
+                          "mccs": [
+                            5814,
+                          ],
+                          "name": "Starbucks",
+                          "type": "organization",
+                          "website": "starbucks.com",
+                        },
+                        "intermediaries": [
+                          {
+                            "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                            "logo": "https://logos.ntropy.com/squareup.com",
+                            "mccs": [
+                              1,
+                            ],
+                            "name": "Square",
+                            "type": "payment_processor",
+                            "website": "squareup.com",
+                          },
+                        ],
+                      },
+                      "entry_type": "outgoing",
+                      "error": {
+                        "code": "account_holder_not_found",
+                        "message": "message",
+                      },
+                      "id": "xbx8YP14g565Xk",
+                      "location": {
+                        "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                        "structured": {
+                          "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                          "city": "Gainesville",
+                          "country": "United States",
+                          "country_code": "US",
+                          "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                          "latitude": 29.704558,
+                          "longitude": -82.389277,
+                          "postcode": "32653",
+                          "state": "Florida",
+                          "store_number": "store_number",
+                          "street": "Nw 43rd Street 5480",
+                        },
+                      },
+                      "recurrence": {
+                        "type": "recurring",
+                      },
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/transactions/{id}/assign",
+              "path-parameters": {
+                "id": "string",
+              },
+              "request": {
+                "body": {
+                  "properties": {
+                    "account_holder_id": "string",
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "BodySetTransactionAhV3TransactionsIdAssignPost",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Transaction",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getTransaction:
+      path: /v3/transactions/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a transaction
+      response:
+        docs: Successful Response
+        type: root.Transaction
+      errors:
+        - root.GetTransactionV3TransactionsIdGetRequestNotFoundError
+        - root.GetTransactionV3TransactionsIdGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: xbx8YP14g565Xk
+              description: SQ* STARBUCKS NW 43RD
+              date: '2024-03-30'
+              amount: 10
+              entry_type: outgoing
+              currency: USD
+              entities:
+                counterparty:
+                  id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                  name: Starbucks
+                  website: starbucks.com
+                  logo: https://logos.ntropy.com/starbucks.com
+                  mccs:
+                    - 5814
+                  type: organization
+                intermediaries:
+                  - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                    name: Square
+                    website: squareup.com
+                    logo: https://logos.ntropy.com/squareup.com
+                    mccs:
+                      - 1
+                    type: payment_processor
+              categories:
+                general: outgoing - coffee shops
+                accounting: operational expenses
+              location:
+                raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                structured:
+                  street: Nw 43rd Street 5480
+                  city: Gainesville
+                  state: Florida
+                  postcode: '32653'
+                  country_code: US
+                  country: United States
+                  latitude: 29.704558
+                  longitude: -82.389277
+                  google_maps_url: >-
+                    https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                  apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  store_number: store_number
+              error:
+                code: account_holder_not_found
+                message: message
+              created_at: '2024-03-30T00:00:00Z'
+              account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              recurrence:
+                type: recurring
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                tx = sdk.transactions.get("xbx8YP14g565Xk") 
+    deleteTransaction:
+      path: /v3/transactions/{id}
+      method: DELETE
+      auth: true
+      docs: >-
+        Deleting a transaction will also delete it from our systems. This
+        operation is permanent.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Deletes a transaction
+      errors:
+        - root.DeleteTransactionV3TransactionsIdDeleteRequestNotFoundError
+        - >-
+          root.DeleteTransactionV3TransactionsIdDeleteRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                tx = sdk.transactions.delete("xbx8YP14g565Xk") 
+    listTransactions:
+      path: /v3/transactions
+      method: GET
+      auth: true
+      docs: >-
+        Return a list of enriched transactions starting with the most recent
+        one.
+      source:
+        openapi: ../openapi.yml
+      display-name: List all transactions
+      request:
+        name: ListTransactionsV3TransactionsGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return transactions older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return transactions newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of transactions
+          limit:
+            type: optional<integer>
+            docs: The limit of transactions to be returned
+            validation:
+              min: 1
+              max: 500
+          account_holder_id:
+            type: optional<string>
+            docs: If specified, only return the transactions of this account holder
+      response:
+        docs: Successful Response
+        type: root.PagedResponseTransaction
+      errors:
+        - root.ListTransactionsV3TransactionsGetRequestUnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: xbx8YP14g565Xk
+                  description: SQ* STARBUCKS NW 43RD
+                  date: '2024-03-30'
+                  amount: 10
+                  entry_type: outgoing
+                  currency: USD
+                  entities:
+                    counterparty:
+                      id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                      name: Starbucks
+                      website: starbucks.com
+                      logo: https://logos.ntropy.com/starbucks.com
+                      mccs:
+                        - 5814
+                      type: organization
+                    intermediaries:
+                      - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                        name: Square
+                        website: squareup.com
+                        logo: https://logos.ntropy.com/squareup.com
+                        mccs:
+                          - 1
+                        type: payment_processor
+                  categories:
+                    general: outgoing - coffee shops
+                  location:
+                    raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                    structured:
+                      street: Nw 43rd Street 5480
+                      city: Gainesville
+                      state: Florida
+                      postcode: '32653'
+                      country_code: US
+                      country: United States
+                      latitude: 29.704558
+                      longitude: -82.389277
+                      google_maps_url: >-
+                        https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                      apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  error:
+                    code: account_holder_not_found
+                    message: message
+                  created_at: '2024-03-30T00:00:00Z'
+                  account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                  recurrence:
+                    type: recurring
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/transactions" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                for tx in sdk.transactions.list().auto_paginate():
+                    ... 
+    postTransactions:
+      path: /v3/transactions
+      method: POST
+      auth: true
+      docs: >-
+        Enriches a list of transactions in synchronous fashion. The enriched
+        transactions returned in
+
+        the order that they were submitted. Webhook events are not triggered for
+        this operation. 
+
+
+        This endpoint supports up to 1000 transactions. 
+
+
+        If you want more throughput and live updates refer to the 
+
+        [async enrichment endpoint](../batches/post-batch).
+      source:
+        openapi: ../openapi.yml
+      display-name: Synchronously enrich transactions
+      request:
+        name: SyncEnrichmentInput
+        body:
+          properties:
+            transactions:
+              type: list<root.TransactionInput>
+        content-type: application/json
+      response:
+        docs: Enriched transactions.
+        type: root.SyncEnrichmentOutput
+      errors:
+        - root.PostTransactionsV3TransactionsPostRequestUnprocessableEntityError
+      examples:
+        - request:
+            transactions:
+              - id: xbx8YP14g565Xk
+                description: SQ* STARBUCKS NW 43RD
+                date: '2024-03-30'
+                amount: 10
+                entry_type: outgoing
+                currency: USD
+                account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                location:
+                  country: US
+          response:
+            body:
+              transactions:
+                - entities:
+                    counterparty:
+                      id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                      name: Starbucks
+                      website: starbucks.com
+                      logo: https://logos.ntropy.com/starbucks.com
+                      mccs:
+                        - 5814
+                      type: organization
+                    intermediaries:
+                      - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                        name: Square
+                        website: squareup.com
+                        logo: https://logos.ntropy.com/squareup.com
+                        mccs:
+                          - 1
+                        type: payment_processor
+                  categories:
+                    general: outgoing - coffee shops
+                  location:
+                    raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                    structured:
+                      street: Nw 43rd Street 5480
+                      city: Gainesville
+                      state: Florida
+                      postcode: '32653'
+                      country_code: US
+                      country: United States
+                      latitude: 29.704558
+                      longitude: -82.389277
+                      google_maps_url: >-
+                        https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                      apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  error:
+                    code: account_holder_not_found
+                    message: message
+                  created_at: '2024-03-30T00:00:00Z'
+                  id: xbx8YP14g565Xk
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/transactions" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '[{
+                        "id": "xbx8YP14g565Xk",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "date": "2024-03-30",
+                        "amount": 10.0,
+                        "entry_type": "outgoing",
+                        "currency": "USD",
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "location": {
+                            "country": "US"
+                        }
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+                sdk = SDK("cd1H...Wmhl")
+                enriched = sdk.transactions.create([
+                    TransactionInput(
+                        id="xbx8YP14g565Xk",
+                        description="SQ* STARBUCKS NW 43RD",
+                        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        amount=10.0,
+                        entry_type="outgoing",
+                        date="2024-03-30",
+                        currency="USD",
+                        location=LocationInput(
+                          country="US",
+                        )
+                    )
+                ]) 
+    setTransactionAh:
+      path: /v3/transactions/{id}/assign
+      method: POST
+      auth: true
+      docs: >-
+        Changes the account holder associated with the transaction. The old and
+        new account holder must share the same categories
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Assign a transaction to an account holder
+      request:
+        name: BodySetTransactionAhV3TransactionsIdAssignPost
+        body:
+          properties:
+            account_holder_id: string
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Transaction
+      errors:
+        - root.SetTransactionAhV3TransactionsIdAssignPostRequestNotFoundError
+        - >-
+          root.SetTransactionAhV3TransactionsIdAssignPostRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          request:
+            account_holder_id: account_holder_id
+          response:
+            body:
+              id: xbx8YP14g565Xk
+              description: SQ* STARBUCKS NW 43RD
+              date: '2024-03-30'
+              amount: 10
+              entry_type: outgoing
+              currency: USD
+              entities:
+                counterparty:
+                  id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                  name: Starbucks
+                  website: starbucks.com
+                  logo: https://logos.ntropy.com/starbucks.com
+                  mccs:
+                    - 5814
+                  type: organization
+                intermediaries:
+                  - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                    name: Square
+                    website: squareup.com
+                    logo: https://logos.ntropy.com/squareup.com
+                    mccs:
+                      - 1
+                    type: payment_processor
+              categories:
+                general: outgoing - coffee shops
+                accounting: operational expenses
+              location:
+                raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                structured:
+                  street: Nw 43rd Street 5480
+                  city: Gainesville
+                  state: Florida
+                  postcode: '32653'
+                  country_code: US
+                  country: United States
+                  latitude: 29.704558
+                  longitude: -82.389277
+                  google_maps_url: >-
+                    https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                  apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  store_number: store_number
+              error:
+                code: account_holder_not_found
+                message: message
+              created_at: '2024-03-30T00:00:00Z'
+              account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              recurrence:
+                type: recurring
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.transactions.assign(
+                    transaction_id="xbx8YP14g565Xk", 
+                    account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Transactions
+docs: >
+
+  The Transaction API allows you to manage, retrieve and search through enriched
+  transactions. A transaction contains
+
+  both the enrichment fields and the original input fields. They are made
+  available after being 
+
+  [enriched](#tag/Enrichment).
+",
+    },
+    "webhooks.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Webhooks API allows you to receive notifications when certain events occur,
+such as when a batch or bank statement finishes processing. 
+
+When an event occurs, Ntropy will make a POST request to the `url` of the
+webhook. If you specified a `token` when creating the webhook, this string will
+be included in the `X-Ntropy-Token` header. The webhook call has a timeout limit of 10 
+seconds, so any processing of the event 
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Webhooks",
+          "endpoints": {
+            "deleteWebhook": {
+              "auth": true,
+              "display-name": "Delete a webhook",
+              "docs": "Delete a webhook",
+              "errors": [
+                "root.DeleteWebhookV3WebhooksIdDeleteRequestNotFoundError",
+                "root.DeleteWebhookV3WebhooksIdDeleteRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.webhooks.delete("e94a150d-40af-4e96-8aa7-2948a6b4d8d3") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/webhooks/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getWebhook": {
+              "auth": true,
+              "display-name": "Retrieve a webhook",
+              "docs": "Retrieve a webhook",
+              "errors": [
+                "root.GetWebhookV3WebhooksIdGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+webhook = sdk.webhooks.get("e94a150d-40af-4e96-8aa7-2948a6b4d8d3")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "enabled": true,
+                      "events": [
+                        "batches.completed",
+                        "batches.error",
+                      ],
+                      "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                      "token": "hunter2",
+                      "url": "https://example.com:5689",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/webhooks/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Webhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getWebhooks": {
+              "auth": true,
+              "display-name": "List all webhooks",
+              "docs": "List all webhooks",
+              "errors": [
+                "root.GetWebhooksV3WebhooksGetRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/webhooks" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+for webhook in sdk.webhooks.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-10-03T02:53:30Z",
+                          "enabled": true,
+                          "events": [
+                            "batches.completed",
+                            "batches.error",
+                          ],
+                          "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                          "token": "hunter2",
+                          "url": "https://example.com:5689",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/webhooks",
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseWebhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "patchWebhook": {
+              "auth": true,
+              "display-name": "Update a webhook",
+              "docs": "Update a webhook. Fields that aren't specified in the body will remain unchanged",
+              "errors": [
+                "root.PatchWebhookV3WebhooksIdPatchRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "events": [
+            "batches.completed",
+            "batches.error"
+        ],
+        "enabled": false
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+wh = sdk.webhooks.patch(
+    "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+    events=['batches.completed', 'batches.error'],
+    enabled=False,
+)
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "request": {},
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "enabled": true,
+                      "events": [
+                        "batches.completed",
+                        "batches.error",
+                      ],
+                      "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                      "token": "hunter2",
+                      "url": "https://example.com:5689",
+                    },
+                  },
+                },
+              ],
+              "method": "PATCH",
+              "pagination": undefined,
+              "path": "/v3/webhooks/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "request": {
+                "body": {
+                  "properties": {
+                    "enabled": {
+                      "docs": "Whether the webhook is enabled or not.",
+                      "type": "optional<boolean>",
+                    },
+                    "events": {
+                      "docs": "A list of events that this webhook subscribes to",
+                      "type": "optional<list<WebhookPatchEventsItem>>",
+                    },
+                    "token": {
+                      "docs": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                      "type": "optional<string>",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": 128,
+                        "minLength": undefined,
+                        "pattern": undefined,
+                      },
+                    },
+                    "url": {
+                      "docs": "The URL of the webhook",
+                      "type": "optional<string>",
+                      "validation": {
+                        "format": "uri",
+                        "maxLength": 1024,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "WebhookPatch",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Webhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postWebhook": {
+              "auth": true,
+              "display-name": "Create a webhook",
+              "docs": "Create a webhook to be called when certain events occur.",
+              "errors": [
+                "root.PostWebhookV3WebhooksPostRequestUnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/webhooks" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "url": "https://example.com:5689",
+        "events": [
+            "batches.completed",
+            "batches.error"
+        ],
+        "token": "hunter2"
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.webhooks.create(
+    url="https://example.com:5689",
+    events="['batches.completed', 'batches.error']",
+    token="hunter2",
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "events": [
+                      "reports.resolved",
+                    ],
+                    "url": "url",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "enabled": true,
+                      "events": [
+                        "batches.completed",
+                        "batches.error",
+                      ],
+                      "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                      "token": "hunter2",
+                      "url": "https://example.com:5689",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/webhooks",
+              "request": {
+                "body": {
+                  "properties": {
+                    "events": {
+                      "docs": "A list of events that this webhook subscribes to",
+                      "type": "list<WebhookBaseEventsItem>",
+                    },
+                    "token": {
+                      "docs": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                      "type": "optional<string>",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": 128,
+                        "minLength": undefined,
+                        "pattern": undefined,
+                      },
+                    },
+                    "url": {
+                      "docs": "The URL of the webhook",
+                      "type": "string",
+                      "validation": {
+                        "format": "uri",
+                        "maxLength": 1024,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "WebhookBase",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Webhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+        "types": {
+          "WebhookBaseEventsItem": {
+            "enum": [
+              {
+                "name": "ReportsResolved",
+                "value": "reports.resolved",
+              },
+              {
+                "name": "ReportsRejected",
+                "value": "reports.rejected",
+              },
+              {
+                "name": "ReportsPending",
+                "value": "reports.pending",
+              },
+              {
+                "name": "BankStatementsCompleted",
+                "value": "bank_statements.completed",
+              },
+              {
+                "name": "BankStatementsError",
+                "value": "bank_statements.error",
+              },
+              {
+                "name": "BatchesCompleted",
+                "value": "batches.completed",
+              },
+              {
+                "name": "BatchesError",
+                "value": "batches.error",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "WebhookPatchEventsItem": {
+            "enum": [
+              {
+                "name": "ReportsResolved",
+                "value": "reports.resolved",
+              },
+              {
+                "name": "ReportsRejected",
+                "value": "reports.rejected",
+              },
+              {
+                "name": "ReportsPending",
+                "value": "reports.pending",
+              },
+              {
+                "name": "BankStatementsCompleted",
+                "value": "bank_statements.completed",
+              },
+              {
+                "name": "BankStatementsError",
+                "value": "bank_statements.error",
+              },
+              {
+                "name": "BatchesCompleted",
+                "value": "batches.completed",
+              },
+              {
+                "name": "BatchesError",
+                "value": "batches.error",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getWebhooks:
+      path: /v3/webhooks
+      method: GET
+      auth: true
+      docs: List all webhooks
+      source:
+        openapi: ../openapi.yml
+      display-name: List all webhooks
+      response:
+        docs: Successful Response
+        type: root.PagedResponseWebhook
+      errors:
+        - root.GetWebhooksV3WebhooksGetRequestUnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - url: https://example.com:5689
+                  events:
+                    - batches.completed
+                    - batches.error
+                  token: hunter2
+                  id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+                  created_at: '2024-10-03T02:53:30Z'
+                  enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/webhooks" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                for webhook in sdk.webhooks.list().auto_paginate():
+                    ... 
+    postWebhook:
+      path: /v3/webhooks
+      method: POST
+      auth: true
+      docs: Create a webhook to be called when certain events occur.
+      source:
+        openapi: ../openapi.yml
+      display-name: Create a webhook
+      request:
+        name: WebhookBase
+        body:
+          properties:
+            url:
+              type: string
+              docs: The URL of the webhook
+              validation:
+                format: uri
+                minLength: 1
+                maxLength: 1024
+            events:
+              docs: A list of events that this webhook subscribes to
+              type: list<WebhookBaseEventsItem>
+            token:
+              type: optional<string>
+              docs: >-
+                A secret string used to authenticate the webhook. This value
+                will be included in the `X-Ntropy-Token` header when sending
+                requests to the webhook
+              validation:
+                maxLength: 128
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Webhook
+      errors:
+        - root.PostWebhookV3WebhooksPostRequestUnprocessableEntityError
+      examples:
+        - request:
+            url: url
+            events:
+              - reports.resolved
+          response:
+            body:
+              url: https://example.com:5689
+              events:
+                - batches.completed
+                - batches.error
+              token: hunter2
+              id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+              created_at: '2024-10-03T02:53:30Z'
+              enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/webhooks" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "url": "https://example.com:5689",
+                        "events": [
+                            "batches.completed",
+                            "batches.error"
+                        ],
+                        "token": "hunter2"
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.webhooks.create(
+                    url="https://example.com:5689",
+                    events="['batches.completed', 'batches.error']",
+                    token="hunter2",
+                ) 
+    getWebhook:
+      path: /v3/webhooks/{id}
+      method: GET
+      auth: true
+      docs: Retrieve a webhook
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a webhook
+      response:
+        docs: Successful Response
+        type: root.Webhook
+      errors:
+        - root.GetWebhookV3WebhooksIdGetRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              url: https://example.com:5689
+              events:
+                - batches.completed
+                - batches.error
+              token: hunter2
+              id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+              created_at: '2024-10-03T02:53:30Z'
+              enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                webhook =
+                sdk.webhooks.get("e94a150d-40af-4e96-8aa7-2948a6b4d8d3")
+    deleteWebhook:
+      path: /v3/webhooks/{id}
+      method: DELETE
+      auth: true
+      docs: Delete a webhook
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Delete a webhook
+      errors:
+        - root.DeleteWebhookV3WebhooksIdDeleteRequestNotFoundError
+        - root.DeleteWebhookV3WebhooksIdDeleteRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.webhooks.delete("e94a150d-40af-4e96-8aa7-2948a6b4d8d3") 
+    patchWebhook:
+      path: /v3/webhooks/{id}
+      method: PATCH
+      auth: true
+      docs: >-
+        Update a webhook. Fields that aren't specified in the body will remain
+        unchanged
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Update a webhook
+      request:
+        name: WebhookPatch
+        body:
+          properties:
+            url:
+              type: optional<string>
+              docs: The URL of the webhook
+              validation:
+                format: uri
+                minLength: 1
+                maxLength: 1024
+            events:
+              type: optional<list<WebhookPatchEventsItem>>
+              docs: A list of events that this webhook subscribes to
+            token:
+              type: optional<string>
+              docs: >-
+                A secret string used to authenticate the webhook. This value
+                will be included in the `X-Ntropy-Token` header when sending
+                requests to the webhook
+              validation:
+                maxLength: 128
+            enabled:
+              type: optional<boolean>
+              docs: Whether the webhook is enabled or not.
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Webhook
+      errors:
+        - root.PatchWebhookV3WebhooksIdPatchRequestUnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          request: {}
+          response:
+            body:
+              url: https://example.com:5689
+              events:
+                - batches.completed
+                - batches.error
+              token: hunter2
+              id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+              created_at: '2024-10-03T02:53:30Z'
+              enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "events": [
+                            "batches.completed",
+                            "batches.error"
+                        ],
+                        "enabled": false
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                wh = sdk.webhooks.patch(
+                    "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                    events=['batches.completed', 'batches.error'],
+                    enabled=False,
+                )
+  source:
+    openapi: ../openapi.yml
+  display-name: Webhooks
+docs: >
+
+  The Webhooks API allows you to receive notifications when certain events
+  occur,
+
+  such as when a batch or bank statement finishes processing. 
+
+
+  When an event occurs, Ntropy will make a POST request to the `url` of the
+
+  webhook. If you specified a `token` when creating the webhook, this string
+  will
+
+  be included in the `X-Ntropy-Token` header. The webhook call has a timeout
+  limit of 10 
+
+  seconds, so any processing of the event 
+types:
+  WebhookBaseEventsItem:
+    enum:
+      - value: reports.resolved
+        name: ReportsResolved
+      - value: reports.rejected
+        name: ReportsRejected
+      - value: reports.pending
+        name: ReportsPending
+      - value: bank_statements.completed
+        name: BankStatementsCompleted
+      - value: bank_statements.error
+        name: BankStatementsError
+      - value: batches.completed
+        name: BatchesCompleted
+      - value: batches.error
+        name: BatchesError
+    source:
+      openapi: ../openapi.yml
+  WebhookPatchEventsItem:
+    enum:
+      - value: reports.resolved
+        name: ReportsResolved
+      - value: reports.rejected
+        name: ReportsRejected
+      - value: reports.pending
+        name: ReportsPending
+      - value: bank_statements.completed
+        name: BankStatementsCompleted
+      - value: bank_statements.error
+        name: BankStatementsError
+      - value: batches.completed
+        name: BatchesCompleted
+      - value: batches.error
+        name: BatchesError
+    source:
+      openapi: ../openapi.yml
+",
+    },
+  },
+  "packageMarkers": {},
+  "rootApiFile": {
+    "contents": {
+      "auth": "APIKeyHeader",
+      "auth-schemes": {
+        "APIKeyHeader": {
+          "header": "X-Api-Key",
+          "name": "apiKey",
+          "type": "string",
+        },
+      },
+      "default-environment": "Default",
+      "display-name": "Ntropy Transaction API",
+      "environments": {
+        "Default": "https://api.ntropy.com",
+      },
+      "error-discrimination": {
+        "strategy": "status-code",
+      },
+      "name": "api",
+    },
+    "defaultUrl": undefined,
+    "rawContents": "name: api
+error-discrimination:
+  strategy: status-code
+display-name: Ntropy Transaction API
+environments:
+  Default: https://api.ntropy.com
+default-environment: Default
+auth-schemes:
+  APIKeyHeader:
+    header: X-Api-Key
+    name: apiKey
+    type: string
+auth: APIKeyHeader
+",
+  },
+}
\ No newline at end of file
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-ir/ntropy.json b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-ir/ntropy.json
new file mode 100644
index 00000000000..0babf21c358
--- /dev/null
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi-ir/ntropy.json
@@ -0,0 +1,17567 @@
+{
+  "title": "Ntropy Transaction API",
+  "servers": [
+    {
+      "url": "https://api.ntropy.com",
+      "description": "Production server (uses live data)."
+    }
+  ],
+  "tags": {
+    "tagsById": {
+      "Enrichment": {
+        "id": "Enrichment",
+        "description": "\nThe Enrichment API allows you to submit multiple transactions for enrichment in a single request. It supports both \nsynchronous and asynchronous submission of transactions.\n\nTransactions enriched by these endpoints are accessible via the [Transactions API](#tag/Transactions) \nand only accessible by the API key that has submitted them. Each transaction is identified by an id, if you submit two\ntransactions the same id, the most recent will replace the previous one. Transactions also accept an account holder.\nNot supplying one will disable both categorization and recurrence.\n\nFor more information on account holder attributes, please refer to \n[this](../../../account-holders/#optional-account-holder-fields) guide.\n\nComplete guide: [Transaction Enrichment](../../../enrichment/introduction).\n"
+      },
+      "Transactions": {
+        "id": "Transactions",
+        "description": "\nThe Transaction API allows you to manage, retrieve and search through enriched transactions. A transaction contains\nboth the enrichment fields and the original input fields. They are made available after being \n[enriched](#tag/Enrichment).\n"
+      },
+      "Account Holders": {
+        "id": "Account Holders",
+        "description": "\nThe Account Holder API allows you to retrieve, create and modify account holders. An account holder represents an\nentity that holds an account associated with transactions. An account holder can either be a business or an individual\nperson - consumer.\n\nThe fields chosen for an account holder are used by our enrichment process and can dramatically improve the accuracy\nof the results. \n\nComplete guide: [Account Holders](../../../account-holders).\n"
+      },
+      "Recurrence": {
+        "id": "Recurrence",
+        "description": "\nThe Recurrence API allows you to identify and categorize recurring patterns found in the transactions of an \n[account holder](#tag/Account-Holders), such as periodic payments or subscriptions and group them \ninto recurrence groups. Each recurrence group contains detailed information about the pattern, \nsuch as periodicity, amount and counterparty.\n\nTransactions can be added to an account holder via the [Enrichment API](#tag/Enrichment). \nIt is crucial that transactions are submitted with the [correct](../../../account-holders) \naccount holder information as the recurrence calculation relies heavily on it.\n\nComplete guide: [Recurrence](../../../enrichment/recurrence).\n"
+      },
+      "Bank statements": {
+        "id": "Bank statements",
+        "description": "\nThe Bank Statements API allows you to manage and extract information from bank statements. We support extraction of\naccount holder information, account information and transaction records. Files should be uploaded in PDF format.\n\nDuring the extraction process, the bank statements undergo several status changes:\n|  Status  |                              Description                               |\n|----------|------------------------------------------------------------------------|\n|processing|The upload was successful. Extraction is in progress.                   |\n|completed |The extraction was successful. Results are available.                   |\n|error     |An error occurred during extraction. Check `error` for more information.|\n\n\nA list of error codes for the `error` status can be found below:\n|         Code         |                Description                |\n|----------------------|-------------------------------------------|\n|invalid_bank_statement|Failed to process file as a bank statement.|\n|internal_error        |Internal error. Please contact support.    |\n\n\nComplete guide: [Bank Statements](../../../bank-statements).\n"
+      },
+      "Webhooks": {
+        "id": "Webhooks",
+        "description": "\nThe Webhooks API allows you to receive notifications when certain events occur,\nsuch as when a batch or bank statement finishes processing. \n\nWhen an event occurs, Ntropy will make a POST request to the `url` of the\nwebhook. If you specified a `token` when creating the webhook, this string will\nbe included in the `X-Ntropy-Token` header. The webhook call has a timeout limit of 10 \nseconds, so any processing of the event \n"
+      },
+      "Personalization": {
+        "id": "Personalization",
+        "description": "\nThe Personalization API allows you to customize the output of enrichment by\nuploading a set of rules. For more information, see our documentation on\n[Personalization](None).\n"
+      },
+      "Reports": {
+        "id": "Reports",
+        "description": "\nThe Reports API allows you to flag transactions with incorrect fields. You can also track the progress of each\nreport either through the API or using [webhooks](#tag/Webhooks).\n"
+      }
+    },
+    "orderedTagIds": [
+      "Enrichment",
+      "Transactions",
+      "Account Holders",
+      "Recurrence",
+      "Bank statements",
+      "Webhooks",
+      "Personalization",
+      "Reports"
+    ]
+  },
+  "hasEndpointsMarkedInternal": false,
+  "endpoints": [
+    {
+      "summary": "Retrieve a transaction",
+      "audiences": [],
+      "operationId": "get_transaction_v3_transactions__id__get",
+      "tags": [
+        "Transactions"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetTransactionV3TransactionsIdGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetTransactionV3TransactionsIdGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetTransactionV3TransactionsIdGetResponse",
+          "schema": "Transaction",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Transaction with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/transactions/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "xbx8YP14g565Xk",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "description": {
+                  "value": {
+                    "value": "SQ* STARBUCKS NW 43RD",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "date": {
+                  "value": {
+                    "value": "2024-03-30",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "amount": {
+                  "value": {
+                    "value": 10,
+                    "type": "double"
+                  },
+                  "type": "primitive"
+                },
+                "entry_type": {
+                  "value": "outgoing",
+                  "type": "enum"
+                },
+                "currency": {
+                  "value": "USD",
+                  "type": "enum"
+                },
+                "entities": {
+                  "properties": {
+                    "counterparty": {
+                      "properties": {
+                        "id": {
+                          "value": {
+                            "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "name": {
+                          "value": {
+                            "value": "Starbucks",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "website": {
+                          "value": {
+                            "value": "starbucks.com",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "logo": {
+                          "value": {
+                            "value": "https://logos.ntropy.com/starbucks.com",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "mccs": {
+                          "value": [
+                            {
+                              "value": {
+                                "value": 5814,
+                                "type": "int"
+                              },
+                              "type": "primitive"
+                            }
+                          ],
+                          "type": "array"
+                        },
+                        "type": {
+                          "value": "organization",
+                          "type": "enum"
+                        }
+                      },
+                      "type": "object"
+                    },
+                    "intermediaries": {
+                      "value": [
+                        {
+                          "properties": {
+                            "id": {
+                              "value": {
+                                "value": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "name": {
+                              "value": {
+                                "value": "Square",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "website": {
+                              "value": {
+                                "value": "squareup.com",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "logo": {
+                              "value": {
+                                "value": "https://logos.ntropy.com/squareup.com",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "mccs": {
+                              "value": [
+                                {
+                                  "value": {
+                                    "value": 1,
+                                    "type": "int"
+                                  },
+                                  "type": "primitive"
+                                }
+                              ],
+                              "type": "array"
+                            },
+                            "type": {
+                              "value": "payment_processor",
+                              "type": "enum"
+                            }
+                          },
+                          "type": "object"
+                        }
+                      ],
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                },
+                "categories": {
+                  "properties": {
+                    "general": {
+                      "value": {
+                        "value": "outgoing - coffee shops",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "accounting": {
+                      "value": "operational expenses",
+                      "type": "enum"
+                    }
+                  },
+                  "type": "object"
+                },
+                "location": {
+                  "properties": {
+                    "raw_address": {
+                      "value": {
+                        "value": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "structured": {
+                      "properties": {
+                        "street": {
+                          "value": {
+                            "value": "Nw 43rd Street 5480",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "city": {
+                          "value": {
+                            "value": "Gainesville",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "state": {
+                          "value": {
+                            "value": "Florida",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "postcode": {
+                          "value": {
+                            "value": "32653",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "country_code": {
+                          "value": {
+                            "value": "US",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "country": {
+                          "value": {
+                            "value": "United States",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "latitude": {
+                          "value": {
+                            "value": 29.704558,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "longitude": {
+                          "value": {
+                            "value": -82.389277,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "google_maps_url": {
+                          "value": {
+                            "value": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "apple_maps_url": {
+                          "value": {
+                            "value": "https://maps.apple.com/?q=29.704558,-82.389277",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "store_number": {
+                          "value": {
+                            "value": "store_number",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  },
+                  "type": "object"
+                },
+                "error": {
+                  "properties": {
+                    "code": {
+                      "value": "account_holder_not_found",
+                      "type": "enum"
+                    },
+                    "message": {
+                      "value": {
+                        "value": "message",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  },
+                  "type": "object"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-03-30T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "account_holder_id": {
+                  "value": {
+                    "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "recurrence": {
+                  "properties": {
+                    "type": {
+                      "value": "recurring",
+                      "type": "enum"
+                    }
+                  },
+                  "type": "object"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\ntx = sdk.transactions.get(\"xbx8YP14g565Xk\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Deletes a transaction",
+      "audiences": [],
+      "operationId": "delete_transaction_v3_transactions__id__delete",
+      "tags": [
+        "Transactions"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "DeleteTransactionV3TransactionsIdDeleteRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "DeleteTransactionV3TransactionsIdDeleteRequest",
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Transaction with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Deleting a transaction will also delete it from our systems. This operation is permanent.",
+      "authed": true,
+      "method": "DELETE",
+      "path": "/v3/transactions/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\ntx = sdk.transactions.delete(\"xbx8YP14g565Xk\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "List all transactions",
+      "audiences": [],
+      "operationId": "list_transactions_v3_transactions_get",
+      "tags": [
+        "Transactions"
+      ],
+      "pathParameters": [],
+      "queryParameters": [
+        {
+          "description": "Only return transactions older or equal than this date",
+          "name": "created_after",
+          "schema": {
+            "generatedName": "ListTransactionsV3TransactionsGetRequestCreatedAfter",
+            "title": "Created After",
+            "description": "Only return transactions older or equal than this date",
+            "value": {
+              "description": "Only return transactions older or equal than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "ListTransactionsV3TransactionsGetRequestCreatedAfter",
+              "title": "Created After",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Only return transactions newer than this date",
+          "name": "created_before",
+          "schema": {
+            "generatedName": "ListTransactionsV3TransactionsGetRequestCreatedBefore",
+            "title": "Created Before",
+            "description": "Only return transactions newer than this date",
+            "value": {
+              "description": "Only return transactions newer than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "ListTransactionsV3TransactionsGetRequestCreatedBefore",
+              "title": "Created Before",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Starting point for the set of transactions",
+          "name": "cursor",
+          "schema": {
+            "generatedName": "ListTransactionsV3TransactionsGetRequestCursor",
+            "nameOverride": "Cursor",
+            "title": "Cursor",
+            "description": "Starting point for the set of transactions",
+            "value": {
+              "description": "Starting point for the set of transactions",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "ListTransactionsV3TransactionsGetRequestCursor",
+              "nameOverride": "Cursor",
+              "title": "Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "The limit of transactions to be returned",
+          "name": "limit",
+          "schema": {
+            "generatedName": "ListTransactionsV3TransactionsGetRequestLimit",
+            "nameOverride": "Limit",
+            "title": "Limit",
+            "description": "The limit of transactions to be returned",
+            "value": {
+              "description": "The limit of transactions to be returned",
+              "schema": {
+                "default": 25,
+                "minimum": 1,
+                "maximum": 500,
+                "type": "int"
+              },
+              "generatedName": "ListTransactionsV3TransactionsGetRequestLimit",
+              "nameOverride": "Limit",
+              "title": "Limit",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "If specified, only return the transactions of this account holder",
+          "name": "account_holder_id",
+          "schema": {
+            "generatedName": "ListTransactionsV3TransactionsGetRequestAccountHolderId",
+            "title": "Account Holder Id",
+            "description": "If specified, only return the transactions of this account holder",
+            "value": {
+              "description": "If specified, only return the transactions of this account holder",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "ListTransactionsV3TransactionsGetRequestAccountHolderId",
+              "title": "Account Holder Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "headers": [],
+      "generatedRequestName": "ListTransactionsV3TransactionsGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "ListTransactionsV3TransactionsGetResponse",
+          "schema": "PagedResponse_Transaction",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Return a list of enriched transactions starting with the most recent one.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/transactions",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "next_cursor": {
+                  "value": {
+                    "value": "XjdHaksD",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "data": {
+                  "value": [
+                    {
+                      "properties": {
+                        "id": {
+                          "value": {
+                            "value": "xbx8YP14g565Xk",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "description": {
+                          "value": {
+                            "value": "SQ* STARBUCKS NW 43RD",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "date": {
+                          "value": {
+                            "value": "2024-03-30",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "amount": {
+                          "value": {
+                            "value": 10,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "entry_type": {
+                          "value": "outgoing",
+                          "type": "enum"
+                        },
+                        "currency": {
+                          "value": "USD",
+                          "type": "enum"
+                        },
+                        "entities": {
+                          "properties": {
+                            "counterparty": {
+                              "properties": {
+                                "id": {
+                                  "value": {
+                                    "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "name": {
+                                  "value": {
+                                    "value": "Starbucks",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "website": {
+                                  "value": {
+                                    "value": "starbucks.com",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "logo": {
+                                  "value": {
+                                    "value": "https://logos.ntropy.com/starbucks.com",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "mccs": {
+                                  "value": [
+                                    {
+                                      "value": {
+                                        "value": 5814,
+                                        "type": "int"
+                                      },
+                                      "type": "primitive"
+                                    }
+                                  ],
+                                  "type": "array"
+                                },
+                                "type": {
+                                  "value": "organization",
+                                  "type": "enum"
+                                }
+                              },
+                              "type": "object"
+                            },
+                            "intermediaries": {
+                              "value": [
+                                {
+                                  "properties": {
+                                    "id": {
+                                      "value": {
+                                        "value": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "name": {
+                                      "value": {
+                                        "value": "Square",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "website": {
+                                      "value": {
+                                        "value": "squareup.com",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "logo": {
+                                      "value": {
+                                        "value": "https://logos.ntropy.com/squareup.com",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "mccs": {
+                                      "value": [
+                                        {
+                                          "value": {
+                                            "value": 1,
+                                            "type": "int"
+                                          },
+                                          "type": "primitive"
+                                        }
+                                      ],
+                                      "type": "array"
+                                    },
+                                    "type": {
+                                      "value": "payment_processor",
+                                      "type": "enum"
+                                    }
+                                  },
+                                  "type": "object"
+                                }
+                              ],
+                              "type": "array"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "categories": {
+                          "properties": {
+                            "general": {
+                              "value": {
+                                "value": "outgoing - coffee shops",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "location": {
+                          "properties": {
+                            "raw_address": {
+                              "value": {
+                                "value": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "structured": {
+                              "properties": {
+                                "street": {
+                                  "value": {
+                                    "value": "Nw 43rd Street 5480",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "city": {
+                                  "value": {
+                                    "value": "Gainesville",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "state": {
+                                  "value": {
+                                    "value": "Florida",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "postcode": {
+                                  "value": {
+                                    "value": "32653",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "country_code": {
+                                  "value": {
+                                    "value": "US",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "country": {
+                                  "value": {
+                                    "value": "United States",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "latitude": {
+                                  "value": {
+                                    "value": 29.704558,
+                                    "type": "double"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "longitude": {
+                                  "value": {
+                                    "value": -82.389277,
+                                    "type": "double"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "google_maps_url": {
+                                  "value": {
+                                    "value": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "apple_maps_url": {
+                                  "value": {
+                                    "value": "https://maps.apple.com/?q=29.704558,-82.389277",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                }
+                              },
+                              "type": "object"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "error": {
+                          "properties": {
+                            "code": {
+                              "value": "account_holder_not_found",
+                              "type": "enum"
+                            },
+                            "message": {
+                              "value": {
+                                "value": "message",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "created_at": {
+                          "value": {
+                            "value": "2024-03-30T00:00:00",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        },
+                        "account_holder_id": {
+                          "value": {
+                            "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "recurrence": {
+                          "properties": {
+                            "type": {
+                              "value": "recurring",
+                              "type": "enum"
+                            }
+                          },
+                          "type": "object"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/transactions\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nfor tx in sdk.transactions.list().auto_paginate():\n    ... ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Synchronously enrich transactions",
+      "audiences": [],
+      "operationId": "post_transactions_v3_transactions_post",
+      "tags": [
+        "Transactions"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "PostTransactionsV3TransactionsPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "PostTransactionsV3TransactionsPostRequest",
+          "schema": "SyncEnrichmentInput",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Enriched transactions.",
+        "schema": {
+          "generatedName": "PostTransactionsV3TransactionsPostResponse",
+          "schema": "SyncEnrichmentOutput",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Enriches a list of transactions in synchronous fashion. The enriched transactions returned in\nthe order that they were submitted. Webhook events are not triggered for this operation. \n\nThis endpoint supports up to 1000 transactions. \n\nIf you want more throughput and live updates refer to the \n[async enrichment endpoint](../batches/post-batch).",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/transactions",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "transactions": {
+                "value": [
+                  {
+                    "properties": {
+                      "id": {
+                        "value": {
+                          "value": "xbx8YP14g565Xk",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "description": {
+                        "value": {
+                          "value": "SQ* STARBUCKS NW 43RD",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "date": {
+                        "value": {
+                          "value": "2024-03-30",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "amount": {
+                        "value": {
+                          "value": 10,
+                          "type": "double"
+                        },
+                        "type": "primitive"
+                      },
+                      "entry_type": {
+                        "value": "outgoing",
+                        "type": "enum"
+                      },
+                      "currency": {
+                        "value": "USD",
+                        "type": "enum"
+                      },
+                      "account_holder_id": {
+                        "value": {
+                          "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "location": {
+                        "properties": {
+                          "country": {
+                            "value": "US",
+                            "type": "enum"
+                          }
+                        },
+                        "type": "object"
+                      }
+                    },
+                    "type": "object"
+                  }
+                ],
+                "type": "array"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "transactions": {
+                  "value": [
+                    {
+                      "properties": {
+                        "entities": {
+                          "properties": {
+                            "counterparty": {
+                              "properties": {
+                                "id": {
+                                  "value": {
+                                    "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "name": {
+                                  "value": {
+                                    "value": "Starbucks",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "website": {
+                                  "value": {
+                                    "value": "starbucks.com",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "logo": {
+                                  "value": {
+                                    "value": "https://logos.ntropy.com/starbucks.com",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "mccs": {
+                                  "value": [
+                                    {
+                                      "value": {
+                                        "value": 5814,
+                                        "type": "int"
+                                      },
+                                      "type": "primitive"
+                                    }
+                                  ],
+                                  "type": "array"
+                                },
+                                "type": {
+                                  "value": "organization",
+                                  "type": "enum"
+                                }
+                              },
+                              "type": "object"
+                            },
+                            "intermediaries": {
+                              "value": [
+                                {
+                                  "properties": {
+                                    "id": {
+                                      "value": {
+                                        "value": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "name": {
+                                      "value": {
+                                        "value": "Square",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "website": {
+                                      "value": {
+                                        "value": "squareup.com",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "logo": {
+                                      "value": {
+                                        "value": "https://logos.ntropy.com/squareup.com",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "mccs": {
+                                      "value": [
+                                        {
+                                          "value": {
+                                            "value": 1,
+                                            "type": "int"
+                                          },
+                                          "type": "primitive"
+                                        }
+                                      ],
+                                      "type": "array"
+                                    },
+                                    "type": {
+                                      "value": "payment_processor",
+                                      "type": "enum"
+                                    }
+                                  },
+                                  "type": "object"
+                                }
+                              ],
+                              "type": "array"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "categories": {
+                          "properties": {
+                            "general": {
+                              "value": {
+                                "value": "outgoing - coffee shops",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "location": {
+                          "properties": {
+                            "raw_address": {
+                              "value": {
+                                "value": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "structured": {
+                              "properties": {
+                                "street": {
+                                  "value": {
+                                    "value": "Nw 43rd Street 5480",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "city": {
+                                  "value": {
+                                    "value": "Gainesville",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "state": {
+                                  "value": {
+                                    "value": "Florida",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "postcode": {
+                                  "value": {
+                                    "value": "32653",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "country_code": {
+                                  "value": {
+                                    "value": "US",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "country": {
+                                  "value": {
+                                    "value": "United States",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "latitude": {
+                                  "value": {
+                                    "value": 29.704558,
+                                    "type": "double"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "longitude": {
+                                  "value": {
+                                    "value": -82.389277,
+                                    "type": "double"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "google_maps_url": {
+                                  "value": {
+                                    "value": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "apple_maps_url": {
+                                  "value": {
+                                    "value": "https://maps.apple.com/?q=29.704558,-82.389277",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                }
+                              },
+                              "type": "object"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "error": {
+                          "properties": {
+                            "code": {
+                              "value": "account_holder_not_found",
+                              "type": "enum"
+                            },
+                            "message": {
+                              "value": {
+                                "value": "message",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "created_at": {
+                          "value": {
+                            "value": "2024-03-30T00:00:00",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        },
+                        "id": {
+                          "value": {
+                            "value": "xbx8YP14g565Xk",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/transactions\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '[{\n        \"id\": \"xbx8YP14g565Xk\",\n        \"description\": \"SQ* STARBUCKS NW 43RD\",\n        \"date\": \"2024-03-30\",\n        \"amount\": 10.0,\n        \"entry_type\": \"outgoing\",\n        \"currency\": \"USD\",\n        \"account_holder_id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n        \"location\": {\n            \"country\": \"US\"\n        }\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK, TransactionInput, LocationInput\n\nsdk = SDK(\"cd1H...Wmhl\")\nenriched = sdk.transactions.create([\n    TransactionInput(\n        id=\"xbx8YP14g565Xk\",\n        description=\"SQ* STARBUCKS NW 43RD\",\n        account_holder_id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n        amount=10.0,\n        entry_type=\"outgoing\",\n        date=\"2024-03-30\",\n        currency=\"USD\",\n        location=LocationInput(\n          country=\"US\",\n        )\n    )\n]) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Assign a transaction to an account holder",
+      "audiences": [],
+      "operationId": "set_transaction_ah_v3_transactions__id__assign_post",
+      "tags": [
+        "Transactions"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "SetTransactionAhV3TransactionsIdAssignPostRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "SetTransactionAhV3TransactionsIdAssignPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "SetTransactionAhV3TransactionsIdAssignPostRequest",
+          "schema": "Body_set_transaction_ah_v3_transactions__id__assign_post",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "SetTransactionAhV3TransactionsIdAssignPostResponse",
+          "schema": "Transaction",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Transaction or account holder with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Changes the account holder associated with the transaction. The old and new account holder must share the same categories",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/transactions/{id}/assign",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "account_holder_id": {
+                "value": {
+                  "value": "account_holder_id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "xbx8YP14g565Xk",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "description": {
+                  "value": {
+                    "value": "SQ* STARBUCKS NW 43RD",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "date": {
+                  "value": {
+                    "value": "2024-03-30",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "amount": {
+                  "value": {
+                    "value": 10,
+                    "type": "double"
+                  },
+                  "type": "primitive"
+                },
+                "entry_type": {
+                  "value": "outgoing",
+                  "type": "enum"
+                },
+                "currency": {
+                  "value": "USD",
+                  "type": "enum"
+                },
+                "entities": {
+                  "properties": {
+                    "counterparty": {
+                      "properties": {
+                        "id": {
+                          "value": {
+                            "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "name": {
+                          "value": {
+                            "value": "Starbucks",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "website": {
+                          "value": {
+                            "value": "starbucks.com",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "logo": {
+                          "value": {
+                            "value": "https://logos.ntropy.com/starbucks.com",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "mccs": {
+                          "value": [
+                            {
+                              "value": {
+                                "value": 5814,
+                                "type": "int"
+                              },
+                              "type": "primitive"
+                            }
+                          ],
+                          "type": "array"
+                        },
+                        "type": {
+                          "value": "organization",
+                          "type": "enum"
+                        }
+                      },
+                      "type": "object"
+                    },
+                    "intermediaries": {
+                      "value": [
+                        {
+                          "properties": {
+                            "id": {
+                              "value": {
+                                "value": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "name": {
+                              "value": {
+                                "value": "Square",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "website": {
+                              "value": {
+                                "value": "squareup.com",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "logo": {
+                              "value": {
+                                "value": "https://logos.ntropy.com/squareup.com",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            },
+                            "mccs": {
+                              "value": [
+                                {
+                                  "value": {
+                                    "value": 1,
+                                    "type": "int"
+                                  },
+                                  "type": "primitive"
+                                }
+                              ],
+                              "type": "array"
+                            },
+                            "type": {
+                              "value": "payment_processor",
+                              "type": "enum"
+                            }
+                          },
+                          "type": "object"
+                        }
+                      ],
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                },
+                "categories": {
+                  "properties": {
+                    "general": {
+                      "value": {
+                        "value": "outgoing - coffee shops",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "accounting": {
+                      "value": "operational expenses",
+                      "type": "enum"
+                    }
+                  },
+                  "type": "object"
+                },
+                "location": {
+                  "properties": {
+                    "raw_address": {
+                      "value": {
+                        "value": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "structured": {
+                      "properties": {
+                        "street": {
+                          "value": {
+                            "value": "Nw 43rd Street 5480",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "city": {
+                          "value": {
+                            "value": "Gainesville",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "state": {
+                          "value": {
+                            "value": "Florida",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "postcode": {
+                          "value": {
+                            "value": "32653",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "country_code": {
+                          "value": {
+                            "value": "US",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "country": {
+                          "value": {
+                            "value": "United States",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "latitude": {
+                          "value": {
+                            "value": 29.704558,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "longitude": {
+                          "value": {
+                            "value": -82.389277,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "google_maps_url": {
+                          "value": {
+                            "value": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "apple_maps_url": {
+                          "value": {
+                            "value": "https://maps.apple.com/?q=29.704558,-82.389277",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "store_number": {
+                          "value": {
+                            "value": "store_number",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  },
+                  "type": "object"
+                },
+                "error": {
+                  "properties": {
+                    "code": {
+                      "value": "account_holder_not_found",
+                      "type": "enum"
+                    },
+                    "message": {
+                      "value": {
+                        "value": "message",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  },
+                  "type": "object"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-03-30T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "account_holder_id": {
+                  "value": {
+                    "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "recurrence": {
+                  "properties": {
+                    "type": {
+                      "value": "recurring",
+                      "type": "enum"
+                    }
+                  },
+                  "type": "object"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n        \"account_holder_id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.transactions.assign(\n    transaction_id=\"xbx8YP14g565Xk\", \n    account_holder_id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\n) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "List all batches",
+      "audiences": [],
+      "operationId": "get_batches_v3_batches_get",
+      "tags": [
+        "Batches"
+      ],
+      "pathParameters": [],
+      "queryParameters": [
+        {
+          "description": "Only return batches older or equal than this date",
+          "name": "created_after",
+          "schema": {
+            "generatedName": "GetBatchesV3BatchesGetRequestCreatedAfter",
+            "title": "Created After",
+            "description": "Only return batches older or equal than this date",
+            "value": {
+              "description": "Only return batches older or equal than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetBatchesV3BatchesGetRequestCreatedAfter",
+              "title": "Created After",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Only return batches newer than this date",
+          "name": "created_before",
+          "schema": {
+            "generatedName": "GetBatchesV3BatchesGetRequestCreatedBefore",
+            "title": "Created Before",
+            "description": "Only return batches newer than this date",
+            "value": {
+              "description": "Only return batches newer than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetBatchesV3BatchesGetRequestCreatedBefore",
+              "title": "Created Before",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Starting point for the set of batches",
+          "name": "cursor",
+          "schema": {
+            "generatedName": "GetBatchesV3BatchesGetRequestCursor",
+            "nameOverride": "Cursor",
+            "title": "Cursor",
+            "description": "Starting point for the set of batches",
+            "value": {
+              "description": "Starting point for the set of batches",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "GetBatchesV3BatchesGetRequestCursor",
+              "nameOverride": "Cursor",
+              "title": "Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "The limit of batches to be returned",
+          "name": "limit",
+          "schema": {
+            "generatedName": "GetBatchesV3BatchesGetRequestLimit",
+            "nameOverride": "Limit",
+            "title": "Limit",
+            "description": "The limit of batches to be returned",
+            "value": {
+              "description": "The limit of batches to be returned",
+              "schema": {
+                "default": 10,
+                "minimum": 1,
+                "maximum": 50,
+                "type": "int"
+              },
+              "generatedName": "GetBatchesV3BatchesGetRequestLimit",
+              "nameOverride": "Limit",
+              "title": "Limit",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "If specified, only return batches with this status",
+          "name": "status",
+          "schema": {
+            "generatedName": "GetBatchesV3BatchesGetRequestStatus",
+            "description": "If specified, only return batches with this status",
+            "value": {
+              "generatedName": "GetBatchesV3BatchesGetRequestStatus",
+              "schema": "BatchStatus",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "headers": [],
+      "generatedRequestName": "GetBatchesV3BatchesGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetBatchesV3BatchesGetResponse",
+          "schema": "PagedResponse_Batch",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Returns a list of submitted batches starting with the most recent one.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/batches",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "next_cursor": {
+                  "value": {
+                    "value": "XjdHaksD",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "data": {
+                  "value": [
+                    {
+                      "properties": {
+                        "id": {
+                          "value": {
+                            "value": "203613d2-83c8-4130-8809-d14206eeec20",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "status": {
+                          "value": "processing",
+                          "type": "enum"
+                        },
+                        "created_at": {
+                          "value": {
+                            "value": "2024-01-01T00:00:00",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        },
+                        "updated_at": {
+                          "value": {
+                            "value": "2024-01-01T00:00:30",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        },
+                        "progress": {
+                          "value": {
+                            "value": 0,
+                            "type": "int"
+                          },
+                          "type": "primitive"
+                        },
+                        "total": {
+                          "value": {
+                            "value": 4000,
+                            "type": "int"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/batches\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nfor batch in sdk.batches.list().auto_paginate():\n    ... ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Submit a batch of transactions",
+      "audiences": [],
+      "operationId": "post_batch_v3_batches_post",
+      "tags": [
+        "Batches"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "PostBatchV3BatchesPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "PostBatchV3BatchesPostRequest",
+          "schema": "AsyncEnrichmentInput",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "PostBatchV3BatchesPostResponse",
+          "schema": "Batch",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Creates a batch of transactions and enriches it in an asynchronous fashion. A batch, representing the status of the \nenrichment progress is returned as a result of the submission. \n\nIn order to be notified on the status of the batch, you can setup [webhooks](../../../webhooks) and receive \nthe respective notifications. Alternatively, you can \n[poll](../../../enrichment/introduction/#viewing-the-progress-of-a-batch) for the status of the batch using its id.\n\nThis endpoints supports up to 24960 transactions.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/batches",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "transactions": {
+                "value": [
+                  {
+                    "properties": {
+                      "id": {
+                        "value": {
+                          "value": "xbx8YP14g565Xk",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "description": {
+                        "value": {
+                          "value": "SQ* STARBUCKS NW 43RD",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "date": {
+                        "value": {
+                          "value": "2024-03-30",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "amount": {
+                        "value": {
+                          "value": 10,
+                          "type": "double"
+                        },
+                        "type": "primitive"
+                      },
+                      "entry_type": {
+                        "value": "outgoing",
+                        "type": "enum"
+                      },
+                      "currency": {
+                        "value": "USD",
+                        "type": "enum"
+                      },
+                      "account_holder_id": {
+                        "value": {
+                          "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                          "type": "string"
+                        },
+                        "type": "primitive"
+                      },
+                      "location": {
+                        "properties": {
+                          "country": {
+                            "value": "US",
+                            "type": "enum"
+                          }
+                        },
+                        "type": "object"
+                      }
+                    },
+                    "type": "object"
+                  }
+                ],
+                "type": "array"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "203613d2-83c8-4130-8809-d14206eeec20",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "status": {
+                  "value": "processing",
+                  "type": "enum"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-01-01T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "updated_at": {
+                  "value": {
+                    "value": "2024-01-01T00:00:30",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "progress": {
+                  "value": {
+                    "value": 0,
+                    "type": "int"
+                  },
+                  "type": "primitive"
+                },
+                "total": {
+                  "value": {
+                    "value": 4000,
+                    "type": "int"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/batches/\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '[{\n        \"id\": \"xbx8YP14g565Xk\",\n        \"description\": \"SQ* STARBUCKS NW 43RD\",\n        \"date\": \"2024-03-30\",\n        \"amount\": 10.0,\n        \"entry_type\": \"outgoing\",\n        \"currency\": \"USD\",\n        \"account_holder_id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n        \"location\": {\n            \"country\": \"US\"\n        }\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK, TransactionInput, LocationInput\n\nsdk = SDK(\"cd1H...Wmhl\")\nbatch = sdk.batches.create([\n    TransactionInput(\n        id=\"xbx8YP14g565Xk\",\n        description=\"SQ* STARBUCKS NW 43RD\",\n        account_holder_id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n        amount=10.0,\n        entry_type=\"outgoing\",\n        date=\"2024-03-30\",\n        currency=\"USD\",\n        location=LocationInput(\n          country=\"US\",\n        )\n    )\n]) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve a batch",
+      "audiences": [],
+      "operationId": "get_single_batch_v3_batches__id__get",
+      "tags": [
+        "Batches"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetSingleBatchV3BatchesIdGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetSingleBatchV3BatchesIdGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetSingleBatchV3BatchesIdGetResponse",
+          "schema": "Batch",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Batch with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/batches/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "203613d2-83c8-4130-8809-d14206eeec20",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "status": {
+                  "value": "processing",
+                  "type": "enum"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-01-01T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "updated_at": {
+                  "value": {
+                    "value": "2024-01-01T00:00:30",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "progress": {
+                  "value": {
+                    "value": 0,
+                    "type": "int"
+                  },
+                  "type": "primitive"
+                },
+                "total": {
+                  "value": {
+                    "value": 4000,
+                    "type": "int"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nbatch = sdk.batches.get(\"f203613d2-83c8-4130-8809-d14206eeec20\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve the results of a batch",
+      "audiences": [],
+      "operationId": "get_batch_results_v3_batches__id__results_get",
+      "tags": [
+        "Batches"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetBatchResultsV3BatchesIdResultsGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetBatchResultsV3BatchesIdResultsGetRequest",
+      "response": {
+        "description": "Returned batch of transaction enrichment results.",
+        "schema": {
+          "generatedName": "GetBatchResultsV3BatchesIdResultsGetResponse",
+          "schema": "BatchResult",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Batch with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Returns the results of the enrichment request. The resulting enriched transactions are returned in the same order they were submitted. Results are available after the batch has finished processing.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/batches/{id}/results",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "id",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "total": {
+                  "value": {
+                    "value": 1,
+                    "type": "int"
+                  },
+                  "type": "primitive"
+                },
+                "status": {
+                  "value": "processing",
+                  "type": "enum"
+                },
+                "results": {
+                  "properties": {
+                    "transactions": {
+                      "value": [
+                        {
+                          "properties": {
+                            "entities": {
+                              "properties": {
+                                "counterparty": {
+                                  "properties": {
+                                    "id": {
+                                      "value": {
+                                        "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "name": {
+                                      "value": {
+                                        "value": "Starbucks",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "website": {
+                                      "value": {
+                                        "value": "starbucks.com",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "logo": {
+                                      "value": {
+                                        "value": "https://logos.ntropy.com/starbucks.com",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "mccs": {
+                                      "value": [
+                                        {
+                                          "value": {
+                                            "value": 5814,
+                                            "type": "int"
+                                          },
+                                          "type": "primitive"
+                                        }
+                                      ],
+                                      "type": "array"
+                                    },
+                                    "type": {
+                                      "value": "organization",
+                                      "type": "enum"
+                                    }
+                                  },
+                                  "type": "object"
+                                },
+                                "intermediaries": {
+                                  "value": [
+                                    {
+                                      "properties": {
+                                        "id": {
+                                          "value": {
+                                            "value": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                            "type": "string"
+                                          },
+                                          "type": "primitive"
+                                        },
+                                        "name": {
+                                          "value": {
+                                            "value": "Square",
+                                            "type": "string"
+                                          },
+                                          "type": "primitive"
+                                        },
+                                        "website": {
+                                          "value": {
+                                            "value": "squareup.com",
+                                            "type": "string"
+                                          },
+                                          "type": "primitive"
+                                        },
+                                        "logo": {
+                                          "value": {
+                                            "value": "https://logos.ntropy.com/squareup.com",
+                                            "type": "string"
+                                          },
+                                          "type": "primitive"
+                                        },
+                                        "mccs": {
+                                          "value": [
+                                            {
+                                              "value": {
+                                                "value": 1,
+                                                "type": "int"
+                                              },
+                                              "type": "primitive"
+                                            }
+                                          ],
+                                          "type": "array"
+                                        },
+                                        "type": {
+                                          "value": "payment_processor",
+                                          "type": "enum"
+                                        }
+                                      },
+                                      "type": "object"
+                                    }
+                                  ],
+                                  "type": "array"
+                                }
+                              },
+                              "type": "object"
+                            },
+                            "categories": {
+                              "properties": {
+                                "general": {
+                                  "value": {
+                                    "value": "outgoing - coffee shops",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                }
+                              },
+                              "type": "object"
+                            },
+                            "location": {
+                              "properties": {
+                                "raw_address": {
+                                  "value": {
+                                    "value": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "structured": {
+                                  "properties": {
+                                    "street": {
+                                      "value": {
+                                        "value": "Nw 43rd Street 5480",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "city": {
+                                      "value": {
+                                        "value": "Gainesville",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "state": {
+                                      "value": {
+                                        "value": "Florida",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "postcode": {
+                                      "value": {
+                                        "value": "32653",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "country_code": {
+                                      "value": {
+                                        "value": "US",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "country": {
+                                      "value": {
+                                        "value": "United States",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "latitude": {
+                                      "value": {
+                                        "value": 29.704558,
+                                        "type": "double"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "longitude": {
+                                      "value": {
+                                        "value": -82.389277,
+                                        "type": "double"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "google_maps_url": {
+                                      "value": {
+                                        "value": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    },
+                                    "apple_maps_url": {
+                                      "value": {
+                                        "value": "https://maps.apple.com/?q=29.704558,-82.389277",
+                                        "type": "string"
+                                      },
+                                      "type": "primitive"
+                                    }
+                                  },
+                                  "type": "object"
+                                }
+                              },
+                              "type": "object"
+                            },
+                            "created_at": {
+                              "value": {
+                                "value": "2024-03-30T00:00:00",
+                                "type": "datetime"
+                              },
+                              "type": "primitive"
+                            },
+                            "id": {
+                              "value": {
+                                "value": "xbx8YP14g565Xk",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            }
+                          },
+                          "type": "object"
+                        }
+                      ],
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20/results\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nresults = sdk.batches.wait_for_results(\"f203613d2-83c8-4130-8809-d14206eeec20\")\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "List all bank statements",
+      "audiences": [],
+      "operationId": "get_bank_statements_v3_bank_statements_get",
+      "tags": [
+        "Bank statements"
+      ],
+      "pathParameters": [],
+      "queryParameters": [
+        {
+          "description": "Only return bank statements older or equal than this date",
+          "name": "created_after",
+          "schema": {
+            "generatedName": "GetBankStatementsV3BankStatementsGetRequestCreatedAfter",
+            "title": "Created After",
+            "description": "Only return bank statements older or equal than this date",
+            "value": {
+              "description": "Only return bank statements older or equal than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetBankStatementsV3BankStatementsGetRequestCreatedAfter",
+              "title": "Created After",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Only return bank statements newer than this date",
+          "name": "created_before",
+          "schema": {
+            "generatedName": "GetBankStatementsV3BankStatementsGetRequestCreatedBefore",
+            "title": "Created Before",
+            "description": "Only return bank statements newer than this date",
+            "value": {
+              "description": "Only return bank statements newer than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetBankStatementsV3BankStatementsGetRequestCreatedBefore",
+              "title": "Created Before",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Starting point for the set of bank statements",
+          "name": "cursor",
+          "schema": {
+            "generatedName": "GetBankStatementsV3BankStatementsGetRequestCursor",
+            "nameOverride": "Cursor",
+            "title": "Cursor",
+            "description": "Starting point for the set of bank statements",
+            "value": {
+              "description": "Starting point for the set of bank statements",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "GetBankStatementsV3BankStatementsGetRequestCursor",
+              "nameOverride": "Cursor",
+              "title": "Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "The limit of bank statements to be returned",
+          "name": "limit",
+          "schema": {
+            "generatedName": "GetBankStatementsV3BankStatementsGetRequestLimit",
+            "nameOverride": "Limit",
+            "title": "Limit",
+            "description": "The limit of bank statements to be returned",
+            "value": {
+              "description": "The limit of bank statements to be returned",
+              "schema": {
+                "default": 10,
+                "minimum": 1,
+                "maximum": 50,
+                "type": "int"
+              },
+              "generatedName": "GetBankStatementsV3BankStatementsGetRequestLimit",
+              "nameOverride": "Limit",
+              "title": "Limit",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "If specified, only return bank statements with this status",
+          "name": "status",
+          "schema": {
+            "generatedName": "GetBankStatementsV3BankStatementsGetRequestStatus",
+            "description": "If specified, only return bank statements with this status",
+            "value": {
+              "generatedName": "GetBankStatementsV3BankStatementsGetRequestStatus",
+              "schema": "DocumentStatus",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "headers": [],
+      "generatedRequestName": "GetBankStatementsV3BankStatementsGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetBankStatementsV3BankStatementsGetResponse",
+          "schema": "PagedResponse_BankStatement",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Return a list of submitted bank statements starting with the most recent one.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/bank_statements",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "next_cursor": {
+                  "value": {
+                    "value": "XjdHaksD",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "data": {
+                  "value": [
+                    {
+                      "properties": {
+                        "id": {
+                          "value": {
+                            "value": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "name": {
+                          "value": {
+                            "value": "2014-01-01_2014-02-01_statement.pdf",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "status": {
+                          "value": "processing",
+                          "type": "enum"
+                        },
+                        "created_at": {
+                          "value": {
+                            "value": "2024-01-01T00:00:00",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        },
+                        "file": {
+                          "properties": {
+                            "no_pages": {
+                              "value": {
+                                "value": 1,
+                                "type": "int"
+                              },
+                              "type": "primitive"
+                            },
+                            "size": {
+                              "value": {
+                                "value": 4096,
+                                "type": "int"
+                              },
+                              "type": "primitive"
+                            }
+                          },
+                          "type": "object"
+                        },
+                        "error": {
+                          "properties": {
+                            "code": {
+                              "value": "invalid_bank_statement",
+                              "type": "enum"
+                            },
+                            "message": {
+                              "value": {
+                                "value": "message",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            }
+                          },
+                          "type": "object"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/bank_statements\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nfor bs in sdk.bank_statements.list().auto_paginate():\n    ... ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Submit a bank statement PDF",
+      "audiences": [],
+      "operationId": "post_bank_statement_v3_bank_statements_post",
+      "tags": [
+        "Bank statements"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "PostBankStatementV3BankStatementsPostRequest",
+      "request": {
+        "name": "Body_post_bank_statement_v3_bank_statements_post",
+        "properties": [
+          {
+            "key": "file",
+            "schema": {
+              "isOptional": false,
+              "isArray": false,
+              "type": "file"
+            }
+          }
+        ],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "multipart"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "PostBankStatementV3BankStatementsPostResponse",
+          "schema": "BankStatement",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Upload a PDF file and queue it for extraction.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/bank_statements",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {},
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "name": {
+                  "value": {
+                    "value": "2014-01-01_2014-02-01_statement.pdf",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "status": {
+                  "value": "processing",
+                  "type": "enum"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-01-01T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "file": {
+                  "properties": {
+                    "no_pages": {
+                      "value": {
+                        "value": 1,
+                        "type": "int"
+                      },
+                      "type": "primitive"
+                    },
+                    "size": {
+                      "value": {
+                        "value": 4096,
+                        "type": "int"
+                      },
+                      "type": "primitive"
+                    }
+                  },
+                  "type": "object"
+                },
+                "error": {
+                  "properties": {
+                    "code": {
+                      "value": "invalid_bank_statement",
+                      "type": "enum"
+                    },
+                    "message": {
+                      "value": {
+                        "value": "message",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  },
+                  "type": "object"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n        \"https://api.ntropy.com/v3/bank_statements\" \\\n        -H \"Accept: application/json\" \\\n        -H \"X-API-KEY: cd1H...Wmhl\" \\\n        --form file=@bank_statement.pdf\n    ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nwith open('bank_statement.pdf', 'rb') as fh:\n    bank_statement = sdk.bank_statements.create(fh)\n    results = sdk.bank_statement.wait_for_results(bank_statement.id) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve a bank statement",
+      "audiences": [],
+      "operationId": "get_bank_statement_v3_bank_statements__id__get",
+      "tags": [
+        "Bank statements"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetBankStatementV3BankStatementsIdGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetBankStatementV3BankStatementsIdGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetBankStatementV3BankStatementsIdGetResponse",
+          "schema": "BankStatement",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Bank statement with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/bank_statements/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "name": {
+                  "value": {
+                    "value": "2014-01-01_2014-02-01_statement.pdf",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "status": {
+                  "value": "processing",
+                  "type": "enum"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-01-01T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "file": {
+                  "properties": {
+                    "no_pages": {
+                      "value": {
+                        "value": 1,
+                        "type": "int"
+                      },
+                      "type": "primitive"
+                    },
+                    "size": {
+                      "value": {
+                        "value": 4096,
+                        "type": "int"
+                      },
+                      "type": "primitive"
+                    }
+                  },
+                  "type": "object"
+                },
+                "error": {
+                  "properties": {
+                    "code": {
+                      "value": "invalid_bank_statement",
+                      "type": "enum"
+                    },
+                    "message": {
+                      "value": {
+                        "value": "message",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  },
+                  "type": "object"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nbs = sdk.bank_statements.get(\"7f8dceac-2848-472d-b5c3-55cdbaf35a9b\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Deletes a bank statement",
+      "audiences": [],
+      "operationId": "delete_bank_statement_v3_bank_statements__id__delete",
+      "tags": [
+        "Bank statements"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "DeleteBankStatementV3BankStatementsIdDeleteRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "DeleteBankStatementV3BankStatementsIdDeleteRequest",
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Bank statement with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "authed": true,
+      "method": "DELETE",
+      "path": "/v3/bank_statements/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "codeSamples": [],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Quickly extract account holder, institution and first account",
+      "audiences": [],
+      "operationId": "get_bank_statement_statement_info_v3_bank_statements__id__overview_post",
+      "tags": [
+        "Bank statements"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetBankStatementStatementInfoV3BankStatementsIdOverviewPostRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetBankStatementStatementInfoV3BankStatementsIdOverviewPostResponse",
+          "schema": "StatementInfo",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Bank statement with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Extracts account holder, bank and account information extracted from the first page of the bank statement, which is typically available before the full results. This is a synchronous call.\n\nComplete guide: [Overview](../../../bank-statements)",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/bank_statements/{id}/overview",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "institution": {
+                  "value": {
+                    "value": "Well's Fargo",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "start_date": {
+                  "value": {
+                    "value": "2024-01-01",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "end_date": {
+                  "value": {
+                    "value": "2024-02-01",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "account_holder": {
+                  "properties": {
+                    "type": {
+                      "value": "consumer",
+                      "type": "enum"
+                    },
+                    "name": {
+                      "value": {
+                        "value": "John Doe",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "address": {
+                      "properties": {
+                        "street": {
+                          "value": {
+                            "value": "601 Rosebud Avenue",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "postcode": {
+                          "value": {
+                            "value": "77901",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "city": {
+                          "value": {
+                            "value": "Victoria",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "state": {
+                          "value": {
+                            "value": "Texas",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "country": {
+                          "value": {
+                            "value": "United States",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  },
+                  "type": "object"
+                },
+                "accounts": {
+                  "value": [
+                    {
+                      "properties": {
+                        "type": {
+                          "value": {
+                            "value": "checking",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "number": {
+                          "value": {
+                            "value": "83721",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "opening_balance": {
+                          "value": {
+                            "value": 1000,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "closing_balance": {
+                          "value": {
+                            "value": 1500,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "iso_currency_code": {
+                          "value": {
+                            "value": "USD",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/overview\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\noverview = sdk.bank_statements.overview(\n    \"7f8dceac-2848-472d-b5c3-55cdbaf35a9b\"\n) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve the extraction results",
+      "audiences": [],
+      "operationId": "get_bank_statement_result_v3_bank_statements__id__results_get",
+      "tags": [
+        "Bank statements"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetBankStatementResultV3BankStatementsIdResultsGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetBankStatementResultV3BankStatementsIdResultsGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetBankStatementResultV3BankStatementsIdResultsGetResponse",
+          "schema": "BankStatementResults",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Bank statement with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Return the extracted account information and associated transactions from a bank statement PDF. The results are accessible once the statement's status is `completed`.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/bank_statements/{id}/results",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "accounts": {
+                  "value": [
+                    {
+                      "properties": {
+                        "number": {
+                          "value": {
+                            "value": "972913289",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "opening_balance": {
+                          "value": {
+                            "value": 400,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "closing_balance": {
+                          "value": {
+                            "value": 200,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "start_date": {
+                          "value": {
+                            "value": "2024-01-01",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "end_date": {
+                          "value": {
+                            "value": "2024-02-01",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "is_balance_reconciled": {
+                          "value": {
+                            "value": true,
+                            "type": "boolean"
+                          },
+                          "type": "primitive"
+                        },
+                        "total_incoming": {
+                          "value": {
+                            "value": 0,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "total_outgoing": {
+                          "value": {
+                            "value": 200,
+                            "type": "double"
+                          },
+                          "type": "primitive"
+                        },
+                        "transactions": {
+                          "value": [
+                            {
+                              "properties": {
+                                "id": {
+                                  "value": {
+                                    "value": "xbx8YP14g565Xk",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "description": {
+                                  "value": {
+                                    "value": "SQ* STARBUCKS NW 43RD",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "date": {
+                                  "value": {
+                                    "value": "2024-03-30",
+                                    "type": "string"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "amount": {
+                                  "value": {
+                                    "value": 200,
+                                    "type": "double"
+                                  },
+                                  "type": "primitive"
+                                },
+                                "entry_type": {
+                                  "value": "outgoing",
+                                  "type": "enum"
+                                },
+                                "currency": {
+                                  "value": "USD",
+                                  "type": "enum"
+                                },
+                                "running_balance": {
+                                  "value": {
+                                    "value": 400,
+                                    "type": "double"
+                                  },
+                                  "type": "primitive"
+                                }
+                              },
+                              "type": "object"
+                            }
+                          ],
+                          "type": "array"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/results\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nbs = sdk.bank_statements.get(\"7f8dceac-2848-472d-b5c3-55cdbaf35a9b\")\nresults = sdk.bank_statements.wait_for_results(\n    \"7f8dceac-2848-472d-b5c3-55cdbaf35a9b\"\n) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve an account holder.",
+      "audiences": [],
+      "operationId": "get_account_holder_v3_account_holders__id__get",
+      "tags": [
+        "Account Holders"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetAccountHolderV3AccountHoldersIdGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetAccountHolderV3AccountHoldersIdGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetAccountHolderV3AccountHoldersIdGetResponse",
+          "schema": "AccountHolderExternal",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Account holder with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/account_holders/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "type": {
+                  "value": "consumer",
+                  "type": "enum"
+                },
+                "name": {
+                  "value": {
+                    "value": "John Doe",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-03-30T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nah = sdk.account_holders.get(\"f35b927b6-6fda-40aa-93b8-95b47c2b2cad\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Deletes an account holder and their transactions",
+      "audiences": [],
+      "operationId": "delete_account_holder_v3_account_holders__id__delete",
+      "tags": [
+        "Account Holders"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "DeleteAccountHolderV3AccountHoldersIdDeleteRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "DeleteAccountHolderV3AccountHoldersIdDeleteRequest",
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Account holder with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Deletes all of the transactions in the account holder's history. This operation is permanent and irreversible",
+      "authed": true,
+      "method": "DELETE",
+      "path": "/v3/account_holders/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nah = sdk.account_holders.delete(\"f35b927b6-6fda-40aa-93b8-95b47c2b2cad\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "List all account holders.",
+      "audiences": [],
+      "operationId": "get_account_holders_v3_account_holders_get",
+      "tags": [
+        "Account Holders"
+      ],
+      "pathParameters": [],
+      "queryParameters": [
+        {
+          "description": "Only return account holders older or equal than this date",
+          "name": "created_after",
+          "schema": {
+            "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestCreatedAfter",
+            "title": "Created After",
+            "description": "Only return account holders older or equal than this date",
+            "value": {
+              "description": "Only return account holders older or equal than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestCreatedAfter",
+              "title": "Created After",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Only return account holders newer than this date",
+          "name": "created_before",
+          "schema": {
+            "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestCreatedBefore",
+            "title": "Created Before",
+            "description": "Only return account holders newer than this date",
+            "value": {
+              "description": "Only return account holders newer than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestCreatedBefore",
+              "title": "Created Before",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Starting point for the set of account holders",
+          "name": "cursor",
+          "schema": {
+            "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestCursor",
+            "nameOverride": "Cursor",
+            "title": "Cursor",
+            "description": "Starting point for the set of account holders",
+            "value": {
+              "description": "Starting point for the set of account holders",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestCursor",
+              "nameOverride": "Cursor",
+              "title": "Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "The limit of account holders to be returned",
+          "name": "limit",
+          "schema": {
+            "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestLimit",
+            "nameOverride": "Limit",
+            "title": "Limit",
+            "description": "The limit of account holders to be returned",
+            "value": {
+              "description": "The limit of account holders to be returned",
+              "schema": {
+                "default": 10,
+                "minimum": 1,
+                "maximum": 50,
+                "type": "int"
+              },
+              "generatedName": "GetAccountHoldersV3AccountHoldersGetRequestLimit",
+              "nameOverride": "Limit",
+              "title": "Limit",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "headers": [],
+      "generatedRequestName": "GetAccountHoldersV3AccountHoldersGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetAccountHoldersV3AccountHoldersGetResponse",
+          "schema": "PagedResponse_AccountHolderExternal",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/account_holders",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "next_cursor": {
+                  "value": {
+                    "value": "XjdHaksD",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "data": {
+                  "value": [
+                    {
+                      "properties": {
+                        "id": {
+                          "value": {
+                            "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "type": {
+                          "value": "consumer",
+                          "type": "enum"
+                        },
+                        "name": {
+                          "value": {
+                            "value": "John Doe",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "created_at": {
+                          "value": {
+                            "value": "2024-03-30T00:00:00",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nah = sdk.account_holders.get(\"f35b927b6-6fda-40aa-93b8-95b47c2b2cad\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Create an account holder.",
+      "audiences": [],
+      "operationId": "create_account_holder_v3_account_holders_post",
+      "tags": [
+        "Account Holders"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "CreateAccountHolderV3AccountHoldersPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "CreateAccountHolderV3AccountHoldersPostRequest",
+          "schema": "AccountHolderCreate",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "CreateAccountHolderV3AccountHoldersPostResponse",
+          "schema": "AccountHolderExternal",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "400": {
+          "generatedName": "BadRequestError",
+          "schema": {
+            "generatedName": "BadRequestErrorBody",
+            "type": "unknown"
+          },
+          "description": "Account holder with the provided id already exists.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/account_holders",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "id": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              },
+              "type": {
+                "value": "consumer",
+                "type": "enum"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "type": {
+                  "value": "consumer",
+                  "type": "enum"
+                },
+                "name": {
+                  "value": {
+                    "value": "John Doe",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-03-30T00:00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/account_holders\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n        \"id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n        \"type\": \"consumer\",\n        \"name\": \"John Doe\"\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nah = sdk.account_holders.create(\n    id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n    type=\"consumer\",\n    name=\"John Doe\",\n) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Find recurring groups in a transaction history",
+      "audiences": [],
+      "operationId": "get_account_holder_recurring_payments_v3_account_holders__id__recurring_groups_post",
+      "tags": [
+        "Recurrence"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "value": {
+            "generatedName": "GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostResponseItem",
+            "schema": "RecurrenceGroup",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "generatedName": "GetAccountHolderRecurringPaymentsV3AccountHoldersIdRecurringGroupsPostResponse",
+          "title": "Response Get Account Holder Recurring Payments V3 Account Holders  Id  Recurring Groups Post",
+          "groupName": [],
+          "type": "array"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Account holder with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Identifies and categorizes recurring patterns found in the transaction history of the account holder, such as periodic payments or subscriptions. These patterns are called recurrence groups.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/account_holders/{id}/recurring_groups",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "value": [
+                {
+                  "properties": {
+                    "id": {
+                      "value": {
+                        "value": "8efbac45-9bd5-4b67-be29-334106198c40",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "start_date": {
+                      "value": {
+                        "value": "2024-03-01",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "end_date": {
+                      "value": {
+                        "value": "2024-03-30",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    "total_amount": {
+                      "value": {
+                        "value": 300,
+                        "type": "double"
+                      },
+                      "type": "primitive"
+                    },
+                    "average_amount": {
+                      "value": {
+                        "value": 10,
+                        "type": "double"
+                      },
+                      "type": "primitive"
+                    },
+                    "periodicity_in_days": {
+                      "value": {
+                        "value": 1,
+                        "type": "double"
+                      },
+                      "type": "primitive"
+                    },
+                    "periodicity": {
+                      "value": "daily",
+                      "type": "enum"
+                    },
+                    "counterparty": {
+                      "properties": {
+                        "id": {
+                          "value": {
+                            "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "name": {
+                          "value": {
+                            "value": "Starbucks",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "website": {
+                          "value": {
+                            "value": "starbucks.com",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "logo": {
+                          "value": {
+                            "value": "https://logos.ntropy.com/starbucks.com",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "mccs": {
+                          "value": [
+                            {
+                              "value": {
+                                "value": 5814,
+                                "type": "int"
+                              },
+                              "type": "primitive"
+                            }
+                          ],
+                          "type": "array"
+                        },
+                        "type": {
+                          "value": "organization",
+                          "type": "enum"
+                        }
+                      },
+                      "type": "object"
+                    },
+                    "categories": {
+                      "properties": {
+                        "general": {
+                          "value": {
+                            "value": "outgoing - coffee shops",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "accounting": {
+                          "value": "operational expenses",
+                          "type": "enum"
+                        }
+                      },
+                      "type": "object"
+                    },
+                    "transaction_ids": {
+                      "value": [
+                        {
+                          "value": {
+                            "value": "2dc6SE8A7cTQ2jUdUadCg",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        {
+                          "value": {
+                            "value": "tQYAhhl0XNkl1wasacpVQ",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        {
+                          "value": {
+                            "value": "NNJTqvockIdKnYxBqPlJw",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        }
+                      ],
+                      "type": "array"
+                    }
+                  },
+                  "type": "object"
+                }
+              ],
+              "type": "array"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad/recurring_groups\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nrecurring_groups = sdk.account_holders.recurring_groups(\n    \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\n) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "List all webhooks",
+      "audiences": [],
+      "operationId": "get_webhooks_v3_webhooks_get",
+      "tags": [
+        "Webhooks"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetWebhooksV3WebhooksGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetWebhooksV3WebhooksGetResponse",
+          "schema": "PagedResponse_Webhook",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "List all webhooks",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/webhooks",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "next_cursor": {
+                  "value": {
+                    "value": "XjdHaksD",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "data": {
+                  "value": [
+                    {
+                      "properties": {
+                        "url": {
+                          "value": {
+                            "value": "https://example.com:5689",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "events": {
+                          "value": [
+                            {
+                              "value": "batches.completed",
+                              "type": "enum"
+                            },
+                            {
+                              "value": "batches.error",
+                              "type": "enum"
+                            }
+                          ],
+                          "type": "array"
+                        },
+                        "token": {
+                          "value": {
+                            "value": "hunter2",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "id": {
+                          "value": {
+                            "value": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "created_at": {
+                          "value": {
+                            "value": "2024-10-03T02:53:30.167953",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        },
+                        "enabled": {
+                          "value": {
+                            "value": true,
+                            "type": "boolean"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/webhooks\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nfor webhook in sdk.webhooks.list().auto_paginate():\n    ... ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Create a webhook",
+      "audiences": [],
+      "operationId": "post_webhook_v3_webhooks_post",
+      "tags": [
+        "Webhooks"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "PostWebhookV3WebhooksPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "PostWebhookV3WebhooksPostRequest",
+          "schema": "WebhookBase",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "PostWebhookV3WebhooksPostResponse",
+          "schema": "Webhook",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Create a webhook to be called when certain events occur.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/webhooks",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "url": {
+                "value": {
+                  "value": "url",
+                  "type": "string"
+                },
+                "type": "primitive"
+              },
+              "events": {
+                "value": [
+                  {
+                    "value": "reports.resolved",
+                    "type": "enum"
+                  }
+                ],
+                "type": "array"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "url": {
+                  "value": {
+                    "value": "https://example.com:5689",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "events": {
+                  "value": [
+                    {
+                      "value": "batches.completed",
+                      "type": "enum"
+                    },
+                    {
+                      "value": "batches.error",
+                      "type": "enum"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "token": {
+                  "value": {
+                    "value": "hunter2",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "id": {
+                  "value": {
+                    "value": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-10-03T02:53:30.167953",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "enabled": {
+                  "value": {
+                    "value": true,
+                    "type": "boolean"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/webhooks\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n        \"url\": \"https://example.com:5689\",\n        \"events\": [\n            \"batches.completed\",\n            \"batches.error\"\n        ],\n        \"token\": \"hunter2\"\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.webhooks.create(\n    url=\"https://example.com:5689\",\n    events=\"['batches.completed', 'batches.error']\",\n    token=\"hunter2\",\n) ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve a webhook",
+      "audiences": [],
+      "operationId": "get_webhook_v3_webhooks__id__get",
+      "tags": [
+        "Webhooks"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetWebhookV3WebhooksIdGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetWebhookV3WebhooksIdGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetWebhookV3WebhooksIdGetResponse",
+          "schema": "Webhook",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Retrieve a webhook",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/webhooks/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "url": {
+                  "value": {
+                    "value": "https://example.com:5689",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "events": {
+                  "value": [
+                    {
+                      "value": "batches.completed",
+                      "type": "enum"
+                    },
+                    {
+                      "value": "batches.error",
+                      "type": "enum"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "token": {
+                  "value": {
+                    "value": "hunter2",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "id": {
+                  "value": {
+                    "value": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-10-03T02:53:30.167953",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "enabled": {
+                  "value": {
+                    "value": true,
+                    "type": "boolean"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nwebhook = sdk.webhooks.get(\"e94a150d-40af-4e96-8aa7-2948a6b4d8d3\")\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Delete a webhook",
+      "audiences": [],
+      "operationId": "delete_webhook_v3_webhooks__id__delete",
+      "tags": [
+        "Webhooks"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "DeleteWebhookV3WebhooksIdDeleteRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "DeleteWebhookV3WebhooksIdDeleteRequest",
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Webhook with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Delete a webhook",
+      "authed": true,
+      "method": "DELETE",
+      "path": "/v3/webhooks/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.webhooks.delete(\"e94a150d-40af-4e96-8aa7-2948a6b4d8d3\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Update a webhook",
+      "audiences": [],
+      "operationId": "patch_webhook_v3_webhooks__id__patch",
+      "tags": [
+        "Webhooks"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "PatchWebhookV3WebhooksIdPatchRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "PatchWebhookV3WebhooksIdPatchRequest",
+      "request": {
+        "schema": {
+          "generatedName": "PatchWebhookV3WebhooksIdPatchRequest",
+          "schema": "WebhookPatch",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "PatchWebhookV3WebhooksIdPatchResponse",
+          "schema": "Webhook",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Update a webhook. Fields that aren't specified in the body will remain unchanged",
+      "authed": true,
+      "method": "PATCH",
+      "path": "/v3/webhooks/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {},
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "url": {
+                  "value": {
+                    "value": "https://example.com:5689",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "events": {
+                  "value": [
+                    {
+                      "value": "batches.completed",
+                      "type": "enum"
+                    },
+                    {
+                      "value": "batches.error",
+                      "type": "enum"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "token": {
+                  "value": {
+                    "value": "hunter2",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "id": {
+                  "value": {
+                    "value": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-10-03T02:53:30.167953",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "enabled": {
+                  "value": {
+                    "value": true,
+                    "type": "boolean"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n        \"events\": [\n            \"batches.completed\",\n            \"batches.error\"\n        ],\n        \"enabled\": false\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nwh = sdk.webhooks.patch(\n    \"e94a150d-40af-4e96-8aa7-2948a6b4d8d3\",\n    events=['batches.completed', 'batches.error'],\n    enabled=False,\n)\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Get the current personalization ruleset.",
+      "audiences": [],
+      "operationId": "filter_get_v3_rules_get",
+      "tags": [
+        "Personalization",
+        "Personalization"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "FilterGetV3RulesGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "FilterGetV3RulesGetResponse",
+          "schema": "personalization",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Get the current personalization ruleset.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/rules",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "value": [
+                {
+                  "properties": {
+                    "if": {
+                      "properties": {
+                        "is_substring": {
+                          "value": [],
+                          "type": "array"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  },
+                  "type": "object"
+                }
+              ],
+              "type": "array"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/rules\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nrules = sdk.rules.get()\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Set the personalization ruleset.",
+      "audiences": [],
+      "operationId": "filter_post_v3_rules_post",
+      "tags": [
+        "Personalization",
+        "Personalization"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "FilterPostV3RulesPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "FilterPostV3RulesPostRequest",
+          "schema": "personalization",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "FilterPostV3RulesPostResponse",
+          "type": "unknown"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "400": {
+          "generatedName": "BadRequestError",
+          "schema": {
+            "generatedName": "BadRequestErrorBody",
+            "type": "unknown"
+          },
+          "description": "Provided ruleset has invalid structure",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "413": {
+          "generatedName": "ContentTooLargeError",
+          "schema": {
+            "generatedName": "ContentTooLargeErrorBody",
+            "type": "unknown"
+          },
+          "description": "Ruleset was larger than 50KiB",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Set the personalization ruleset.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/rules",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "value": [
+              {
+                "properties": {
+                  "if": {
+                    "properties": {
+                      "is_substring": {
+                        "value": [],
+                        "type": "array"
+                      }
+                    },
+                    "type": "object"
+                  }
+                },
+                "type": "object"
+              }
+            ],
+            "type": "array"
+          },
+          "response": {
+            "value": {
+              "value": [
+                {
+                  "key": {
+                    "value": "key",
+                    "type": "string"
+                  },
+                  "value": {
+                    "value": {
+                      "value": "value",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  }
+                }
+              ],
+              "type": "map"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/rules\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\" \\\n    -H \"Content-Type: application/json\" \\\n    -d '[{\n        \"if\": {\n            \"is_substring\": [\n                {\"get\": \"website\"},\n                \"ntropy\"\n            ]\n        },\n        \"then\": [\n            {\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"}\n        ],\n        \"else\": [\n            {\"remove_label\": \"example label\"}\n        ]\n    }]'\n",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.rules.set([{\n    \"if\": {\n        \"is_substring\": [\n            {\"get\": \"website\"},\n            \"ntropy\"\n        ]\n    },\n    \"then\": [\n        {\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"}\n    ],\n    \"else\": [\n        {\"remove_label\": \"example label\"}\n    ]\n}])\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Append a rule.",
+      "audiences": [],
+      "operationId": "filter_append_v3_rules_append_post",
+      "tags": [
+        "Personalization",
+        "Personalization"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "FilterAppendV3RulesAppendPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "FilterAppendV3RulesAppendPostRequest",
+          "schema": "Action",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "FilterAppendV3RulesAppendPostResponse",
+          "type": "unknown"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "400": {
+          "generatedName": "BadRequestError",
+          "schema": {
+            "generatedName": "BadRequestErrorBody",
+            "type": "unknown"
+          },
+          "description": "Provided rule has invalid structure",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "413": {
+          "generatedName": "ContentTooLargeError",
+          "schema": {
+            "generatedName": "ContentTooLargeErrorBody",
+            "type": "unknown"
+          },
+          "description": "Ruleset after append was larger than 50KiB",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Append a rule to the personalization ruleset.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/rules/append",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "if": {
+                "value": {
+                  "value": true,
+                  "type": "boolean"
+                },
+                "type": "primitive"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "value": [
+                {
+                  "key": {
+                    "value": "key",
+                    "type": "string"
+                  },
+                  "value": {
+                    "value": {
+                      "value": "value",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  }
+                }
+              ],
+              "type": "map"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/rules/append\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\" \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"}'\n",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.rules.append({\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"})\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Delete a rule.",
+      "audiences": [],
+      "operationId": "filter_delete_v3_rules__index__delete",
+      "tags": [
+        "Personalization",
+        "Personalization"
+      ],
+      "pathParameters": [
+        {
+          "name": "index",
+          "schema": {
+            "schema": {
+              "type": "int"
+            },
+            "generatedName": "FilterDeleteV3RulesIndexDeleteRequestIndex",
+            "nameOverride": "Index",
+            "title": "Index",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "FilterDeleteV3RulesIndexDeleteRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "FilterDeleteV3RulesIndexDeleteResponse",
+          "type": "unknown"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "400": {
+          "generatedName": "BadRequestError",
+          "schema": {
+            "generatedName": "BadRequestErrorBody",
+            "type": "unknown"
+          },
+          "description": "Provided index does not exist in ruleset",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Delete the rule at the specified index from the personalization ruleset.",
+      "authed": true,
+      "method": "DELETE",
+      "path": "/v3/rules/{index}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "index",
+              "value": {
+                "value": {
+                  "value": 1,
+                  "type": "int"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "value": [
+                {
+                  "key": {
+                    "value": "key",
+                    "type": "string"
+                  },
+                  "value": {
+                    "value": {
+                      "value": "value",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  }
+                }
+              ],
+              "type": "map"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/rules/0\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.rules.delete(0)\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Modify an existing rule.",
+      "audiences": [],
+      "operationId": "filter_patch_v3_rules__index__patch",
+      "tags": [
+        "Personalization",
+        "Personalization"
+      ],
+      "pathParameters": [
+        {
+          "name": "index",
+          "schema": {
+            "schema": {
+              "type": "int"
+            },
+            "generatedName": "FilterPatchV3RulesIndexPatchRequestIndex",
+            "nameOverride": "Index",
+            "title": "Index",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "FilterPatchV3RulesIndexPatchRequest",
+      "request": {
+        "schema": {
+          "generatedName": "FilterPatchV3RulesIndexPatchRequest",
+          "schema": "Action",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "FilterPatchV3RulesIndexPatchResponse",
+          "type": "unknown"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "400": {
+          "generatedName": "BadRequestError",
+          "schema": {
+            "generatedName": "BadRequestErrorBody",
+            "type": "unknown"
+          },
+          "description": "Provided index does not exist in ruleset",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Modify an existing rule at the specified index on the ruleset.",
+      "authed": true,
+      "method": "PATCH",
+      "path": "/v3/rules/{index}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "index",
+              "value": {
+                "value": {
+                  "value": 1,
+                  "type": "int"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "if": {
+                "value": {
+                  "value": true,
+                  "type": "boolean"
+                },
+                "type": "primitive"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "value": [
+                {
+                  "key": {
+                    "value": "key",
+                    "type": "string"
+                  },
+                  "value": {
+                    "value": {
+                      "value": "value",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  }
+                }
+              ],
+              "type": "map"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"PATCH\" \\\n    \"https://api.ntropy.com/v3/rules/0\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\" \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"}'\n",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.rules.patch(0, {\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"})\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "List all reports",
+      "audiences": [],
+      "operationId": "get_reports_v3_reports_get",
+      "tags": [
+        "Reports"
+      ],
+      "pathParameters": [],
+      "queryParameters": [
+        {
+          "description": "Only return report older or equal than this date",
+          "name": "created_after",
+          "schema": {
+            "generatedName": "GetReportsV3ReportsGetRequestCreatedAfter",
+            "title": "Created After",
+            "description": "Only return report older or equal than this date",
+            "value": {
+              "description": "Only return report older or equal than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetReportsV3ReportsGetRequestCreatedAfter",
+              "title": "Created After",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Only return report newer than this date",
+          "name": "created_before",
+          "schema": {
+            "generatedName": "GetReportsV3ReportsGetRequestCreatedBefore",
+            "title": "Created Before",
+            "description": "Only return report newer than this date",
+            "value": {
+              "description": "Only return report newer than this date",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "GetReportsV3ReportsGetRequestCreatedBefore",
+              "title": "Created Before",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "Starting point for the set of report",
+          "name": "cursor",
+          "schema": {
+            "generatedName": "GetReportsV3ReportsGetRequestCursor",
+            "nameOverride": "Cursor",
+            "title": "Cursor",
+            "description": "Starting point for the set of report",
+            "value": {
+              "description": "Starting point for the set of report",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "GetReportsV3ReportsGetRequestCursor",
+              "nameOverride": "Cursor",
+              "title": "Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "The limit of report to be returned",
+          "name": "limit",
+          "schema": {
+            "generatedName": "GetReportsV3ReportsGetRequestLimit",
+            "nameOverride": "Limit",
+            "title": "Limit",
+            "description": "The limit of report to be returned",
+            "value": {
+              "description": "The limit of report to be returned",
+              "schema": {
+                "default": 10,
+                "minimum": 1,
+                "maximum": 50,
+                "type": "int"
+              },
+              "generatedName": "GetReportsV3ReportsGetRequestLimit",
+              "nameOverride": "Limit",
+              "title": "Limit",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "If specified, only return reports with this status",
+          "name": "status",
+          "schema": {
+            "generatedName": "GetReportsV3ReportsGetRequestStatus",
+            "description": "If specified, only return reports with this status",
+            "value": {
+              "generatedName": "GetReportsV3ReportsGetRequestStatus",
+              "schema": "ReportStatus",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "headers": [],
+      "generatedRequestName": "GetReportsV3ReportsGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetReportsV3ReportsGetResponse",
+          "schema": "PagedResponse_Report_",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "List all reports",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/reports",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "next_cursor": {
+                  "value": {
+                    "value": "next_cursor",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "data": {
+                  "value": [
+                    {
+                      "properties": {
+                        "transaction_id": {
+                          "value": {
+                            "value": "xbx8YP14g565Xk",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "description": {
+                          "value": {
+                            "value": "lorem ipsum",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "fields": {
+                          "value": [
+                            {
+                              "value": {
+                                "value": ".entities.counterparty",
+                                "type": "string"
+                              },
+                              "type": "primitive"
+                            }
+                          ],
+                          "type": "array"
+                        },
+                        "id": {
+                          "value": {
+                            "value": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        },
+                        "created_at": {
+                          "value": {
+                            "value": "2024-10-03T02:53:30.167953+00:00",
+                            "type": "datetime"
+                          },
+                          "type": "primitive"
+                        },
+                        "status": {
+                          "value": "open",
+                          "type": "enum"
+                        },
+                        "rejection_reason": {
+                          "value": {
+                            "value": "rejection_reason",
+                            "type": "string"
+                          },
+                          "type": "primitive"
+                        }
+                      },
+                      "type": "object"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/reports\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nreports = sdk.reports.list()\n    ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Create a report",
+      "audiences": [],
+      "operationId": "post_report_v3_reports_post",
+      "tags": [
+        "Reports"
+      ],
+      "pathParameters": [],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "PostReportV3ReportsPostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "PostReportV3ReportsPostRequest",
+          "schema": "ReportBase",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "The newly created report",
+        "schema": {
+          "generatedName": "PostReportV3ReportsPostResponse",
+          "schema": "Report",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Report a transaction with incorrect fields.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/reports",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "transaction_id": {
+                "value": {
+                  "value": "xbx8YP14g565Xk",
+                  "type": "string"
+                },
+                "type": "primitive"
+              },
+              "description": {
+                "value": {
+                  "value": "lorem ipsum",
+                  "type": "string"
+                },
+                "type": "primitive"
+              },
+              "fields": {
+                "value": [
+                  {
+                    "value": {
+                      "value": ".entities.counterparty",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  }
+                ],
+                "type": "array"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "transaction_id": {
+                  "value": {
+                    "value": "xbx8YP14g565Xk",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "description": {
+                  "value": {
+                    "value": "lorem ipsum",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "fields": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": ".entities.counterparty",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "id": {
+                  "value": {
+                    "value": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-10-03T02:53:30.167953+00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "status": {
+                  "value": "open",
+                  "type": "enum"
+                },
+                "rejection_reason": {
+                  "value": {
+                    "value": "rejection_reason",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/reports\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n        \"transaction_id\": \"xbx8YP14g565Xk\",\n        \"description\": \"lorem ipsum\",\n        \"fields\": [\n            \".entities.counterparty\"\n        ]\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nreport = sdk.reports.create(\n    transaction_id=\"xbx8YP14g565Xk\",\n    description=\"lorem ipsum\",\n    fields=['.entities.counterparty'],\n)\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve a report",
+      "audiences": [],
+      "operationId": "get_report_v3_reports__id__get",
+      "tags": [
+        "Reports"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetReportV3ReportsIdGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetReportV3ReportsIdGetRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "GetReportV3ReportsIdGetResponse",
+          "schema": "Report",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Report with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Retrieve a report",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/reports/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "transaction_id": {
+                  "value": {
+                    "value": "xbx8YP14g565Xk",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "description": {
+                  "value": {
+                    "value": "lorem ipsum",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "fields": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": ".entities.counterparty",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "id": {
+                  "value": {
+                    "value": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "created_at": {
+                  "value": {
+                    "value": "2024-10-03T02:53:30.167953+00:00",
+                    "type": "datetime"
+                  },
+                  "type": "primitive"
+                },
+                "status": {
+                  "value": "open",
+                  "type": "enum"
+                },
+                "rejection_reason": {
+                  "value": {
+                    "value": "rejection_reason",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/reports/a652285d-de1b-4a6f-b6ce-45efa9be7952\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nreport = sdk.reports.get(\"a652285d-de1b-4a6f-b6ce-45efa9be7952\")\n    ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Delete a report",
+      "audiences": [],
+      "operationId": "delete_report_v3_reports__id__delete",
+      "tags": [
+        "Reports"
+      ],
+      "pathParameters": [
+        {
+          "name": "id",
+          "schema": {
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "DeleteReportV3ReportsIdDeleteRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "DeleteReportV3ReportsIdDeleteRequest",
+      "errors": {
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Report with the provided id not found.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Delete a report",
+      "authed": true,
+      "method": "DELETE",
+      "path": "/v3/reports/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "codeSamples": [],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve category set",
+      "audiences": [],
+      "operationId": "get_category_set_v3_categories__account_holder_type__get",
+      "tags": [
+        "Categories"
+      ],
+      "pathParameters": [
+        {
+          "name": "account_holder_type",
+          "schema": {
+            "generatedName": "GetCategorySetV3CategoriesAccountHolderTypeGetRequestAccountHolderType",
+            "schema": "AccountHolderType",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetCategorySetV3CategoriesAccountHolderTypeGetRequest",
+      "response": {
+        "description": "Category set for the selected type of account holder",
+        "schema": {
+          "generatedName": "GetCategorySetV3CategoriesAccountHolderTypeGetResponse",
+          "schema": "CategorySet",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Retrieves the set of categories. Category sets are different per account holder type.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/categories/{account_holder_type}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "account_holder_type",
+              "value": {
+                "value": "consumer",
+                "type": "enum"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "incoming": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": "transfer from investment app",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer from stock broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer from crypto broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "chargeback",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "freelance income",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "rideshare or delivery income",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "paycheck",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "benefits",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "interest earned",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "stock dividend",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "outgoing": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": "digital content and streaming",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "vending machine",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "reversal",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer to investment app",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer to stock broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer to crypto broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "adjustment",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "intra account transfer",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "inter account transfer",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "peer to peer transfer",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "funeral service",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "ATM withdrawal",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "teller withdrawal",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/categories/consumer\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.categories.get(\"consumer\")\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Set a custom set of categories",
+      "audiences": [],
+      "operationId": "custom_categories_post_v3_categories__account_holder_type__post",
+      "tags": [
+        "Categories"
+      ],
+      "pathParameters": [
+        {
+          "name": "account_holder_type",
+          "schema": {
+            "generatedName": "CustomCategoriesPostV3CategoriesAccountHolderTypePostRequestAccountHolderType",
+            "schema": "AccountHolderType",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "CustomCategoriesPostV3CategoriesAccountHolderTypePostRequest",
+      "request": {
+        "schema": {
+          "generatedName": "CustomCategoriesPostV3CategoriesAccountHolderTypePostRequest",
+          "schema": "CustomCategorySet",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "contentType": "application/json",
+        "fullExamples": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "response": {
+        "description": "Custom categories successfully set.",
+        "schema": {
+          "generatedName": "CustomCategoriesPostV3CategoriesAccountHolderTypePostResponse",
+          "schema": "CustomCategorySet",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Sets a custom set of categories. Transactions that don't match a category will be categorized `not enough information` regardless of whether it is present in the set.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/categories/{account_holder_type}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "account_holder_type",
+              "value": {
+                "value": "consumer",
+                "type": "enum"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "request": {
+            "properties": {
+              "incoming": {
+                "value": [
+                  {
+                    "value": {
+                      "value": "salary",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  },
+                  {
+                    "value": {
+                      "value": "investment income",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  },
+                  {
+                    "value": {
+                      "value": "other income",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  }
+                ],
+                "type": "array"
+              },
+              "outgoing": {
+                "value": [
+                  {
+                    "value": {
+                      "value": "rent",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  },
+                  {
+                    "value": {
+                      "value": "utilities",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  },
+                  {
+                    "value": {
+                      "value": "groceries",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  },
+                  {
+                    "value": {
+                      "value": "entertainment",
+                      "type": "string"
+                    },
+                    "type": "primitive"
+                  }
+                ],
+                "type": "array"
+              }
+            },
+            "type": "object"
+          },
+          "response": {
+            "value": {
+              "properties": {
+                "incoming": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": "salary",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "investment income",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "other income",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "outgoing": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": "rent",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "utilities",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "groceries",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "entertainment",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/categories/consumer\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n        \"incoming\": [\n            \"salary\",\n            \"investment income\",\n            \"other income\"\n        ],\n        \"outgoing\": [\n            \"rent\",\n            \"utilities\",\n            \"groceries\",\n            \"entertainment\"\n        ]\n    }]'\n ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.categories.set(\"consumer\", {\n    \"incoming\": [\n        \"transfer from investment app\",\n        \"transfer from stock broker\",\n        \"transfer from crypto broker\",\n        \"chargeback\",\n        \"freelance income\",\n        \"rideshare or delivery income\",\n        \"paycheck\",\n        \"benefits\",\n        \"interest earned\",\n        \"stock dividend\"\n    ],\n    \"outgoing\": [\n        \"digital content and streaming\",\n        \"vending machine\",\n        \"reversal\",\n        \"transfer to investment app\",\n        \"transfer to stock broker\",\n        \"transfer to crypto broker\",\n        \"adjustment\",\n        \"intra account transfer\",\n        \"inter account transfer\",\n        \"peer to peer transfer\",\n        \"funeral service\",\n        \"ATM withdrawal\",\n        \"teller withdrawal\"\n    ]\n})\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Reset category set to original values",
+      "audiences": [],
+      "operationId": "delete_custom_category_set_v3_categories__account_holder_type__reset_post",
+      "tags": [
+        "Categories"
+      ],
+      "pathParameters": [
+        {
+          "name": "account_holder_type",
+          "schema": {
+            "generatedName": "DeleteCustomCategorySetV3CategoriesAccountHolderTypeResetPostRequestAccountHolderType",
+            "schema": "AccountHolderType",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "DeleteCustomCategorySetV3CategoriesAccountHolderTypeResetPostRequest",
+      "response": {
+        "description": "Successful Response",
+        "schema": {
+          "generatedName": "DeleteCustomCategorySetV3CategoriesAccountHolderTypeResetPostResponse",
+          "schema": "CategorySet",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Resets the set of categories of the specified account holder type to the original values.",
+      "authed": true,
+      "method": "POST",
+      "path": "/v3/categories/{account_holder_type}/reset",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "account_holder_type",
+              "value": {
+                "value": "consumer",
+                "type": "enum"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "incoming": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": "transfer from investment app",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer from stock broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer from crypto broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "chargeback",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "freelance income",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "rideshare or delivery income",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "paycheck",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "benefits",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "interest earned",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "stock dividend",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                },
+                "outgoing": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": "digital content and streaming",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "vending machine",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "reversal",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer to investment app",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer to stock broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "transfer to crypto broker",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "adjustment",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "intra account transfer",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "inter account transfer",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "peer to peer transfer",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "funeral service",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "ATM withdrawal",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    },
+                    {
+                      "value": {
+                        "value": "teller withdrawal",
+                        "type": "string"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/categories/consumer/reset\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.categories.reset(\"consumer\")\n",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Searches for an entity",
+      "audiences": [],
+      "operationId": "search_entity_v3_entities_lookup_get",
+      "tags": [
+        "Entities"
+      ],
+      "pathParameters": [],
+      "queryParameters": [
+        {
+          "description": "The name of the entity to resolve",
+          "name": "name",
+          "schema": {
+            "generatedName": "SearchEntityV3EntitiesLookupGetRequestName",
+            "nameOverride": "Name",
+            "title": "Name",
+            "description": "The name of the entity to resolve",
+            "value": {
+              "description": "The name of the entity to resolve",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "SearchEntityV3EntitiesLookupGetRequestName",
+              "nameOverride": "Name",
+              "title": "Name",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "The website of the entity to resolve",
+          "name": "website",
+          "schema": {
+            "generatedName": "SearchEntityV3EntitiesLookupGetRequestWebsite",
+            "nameOverride": "Website",
+            "title": "Website",
+            "description": "The website of the entity to resolve",
+            "value": {
+              "description": "The website of the entity to resolve",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "SearchEntityV3EntitiesLookupGetRequestWebsite",
+              "nameOverride": "Website",
+              "title": "Website",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        {
+          "description": "An unstructured location string of the entity to resolve",
+          "name": "location",
+          "schema": {
+            "generatedName": "SearchEntityV3EntitiesLookupGetRequestLocation",
+            "nameOverride": "Location",
+            "title": "Location",
+            "description": "An unstructured location string of the entity to resolve",
+            "value": {
+              "description": "An unstructured location string of the entity to resolve",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "SearchEntityV3EntitiesLookupGetRequestLocation",
+              "nameOverride": "Location",
+              "title": "Location",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "groupName": [],
+            "type": "nullable"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "headers": [],
+      "generatedRequestName": "SearchEntityV3EntitiesLookupGetRequest",
+      "response": {
+        "description": "Entity",
+        "schema": {
+          "generatedName": "SearchEntityV3EntitiesLookupGetResponse",
+          "schema": "Entity",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "400": {
+          "generatedName": "BadRequestError",
+          "schema": {
+            "generatedName": "BadRequestErrorBody",
+            "type": "unknown"
+          },
+          "description": "Bad request.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        },
+        "423": {
+          "generatedName": "LockedError",
+          "schema": {
+            "generatedName": "LockedErrorBody",
+            "type": "unknown"
+          },
+          "description": "Not enough credits.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      },
+      "server": [],
+      "description": "Resolves a query into an entity by querying our entity resolution system. \n    The parameters `name` and `website` are mutually exclusive. Calls to this endpoint using \n    the `name` parameter are billed the same way transactions are.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/entities/lookup",
+      "examples": [
+        {
+          "pathParameters": [],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "name": {
+                  "value": {
+                    "value": "Starbucks",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "website": {
+                  "value": {
+                    "value": "starbucks.com",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "logo": {
+                  "value": {
+                    "value": "https://logos.ntropy.com/starbucks.com",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "mccs": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": 5814,
+                        "type": "int"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/entities?name=Starbucks\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.entities.lookup(name=\"Starbucks\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    },
+    {
+      "summary": "Retrieve an entity",
+      "audiences": [],
+      "operationId": "get_entity_by_id_v3_entities__id__get",
+      "tags": [
+        "Entities"
+      ],
+      "pathParameters": [
+        {
+          "description": "The unique ID of the entity",
+          "name": "id",
+          "schema": {
+            "description": "The unique ID of the entity",
+            "schema": {
+              "type": "string"
+            },
+            "generatedName": "GetEntityByIdV3EntitiesIdGetRequestId",
+            "nameOverride": "Id",
+            "title": "Id",
+            "groupName": [],
+            "type": "primitive"
+          },
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        }
+      ],
+      "queryParameters": [],
+      "headers": [],
+      "generatedRequestName": "GetEntityByIdV3EntitiesIdGetRequest",
+      "response": {
+        "description": "Entity",
+        "schema": {
+          "generatedName": "GetEntityByIdV3EntitiesIdGetResponse",
+          "schema": "Entity",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "fullExamples": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "json"
+      },
+      "errors": {
+        "400": {
+          "generatedName": "BadRequestError",
+          "schema": {
+            "generatedName": "BadRequestErrorBody",
+            "type": "unknown"
+          },
+          "description": "Bad request.",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "404": {
+          "generatedName": "NotFoundError",
+          "schema": {
+            "generatedName": "NotFoundErrorBody",
+            "type": "unknown"
+          },
+          "description": "Entity does not exist for ID",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          }
+        },
+        "422": {
+          "generatedName": "UnprocessableEntityError",
+          "schema": {
+            "generatedName": "UnprocessableEntityErrorBody",
+            "schema": "HTTPValidationError",
+            "source": {
+              "file": "../openapi.yml",
+              "type": "openapi"
+            },
+            "type": "reference"
+          },
+          "description": "Validation Error",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "examples": [
+            {
+              "example": {
+                "properties": {},
+                "type": "object"
+              }
+            }
+          ]
+        }
+      },
+      "server": [],
+      "description": "Retrieve more information about an entity by using its unique ID.",
+      "authed": true,
+      "method": "GET",
+      "path": "/v3/entities/{id}",
+      "examples": [
+        {
+          "pathParameters": [
+            {
+              "name": "id",
+              "value": {
+                "value": {
+                  "value": "id",
+                  "type": "string"
+                },
+                "type": "primitive"
+              }
+            }
+          ],
+          "queryParameters": [],
+          "headers": [],
+          "response": {
+            "value": {
+              "properties": {
+                "id": {
+                  "value": {
+                    "value": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "name": {
+                  "value": {
+                    "value": "Starbucks",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "website": {
+                  "value": {
+                    "value": "starbucks.com",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "logo": {
+                  "value": {
+                    "value": "https://logos.ntropy.com/starbucks.com",
+                    "type": "string"
+                  },
+                  "type": "primitive"
+                },
+                "mccs": {
+                  "value": [
+                    {
+                      "value": {
+                        "value": 5814,
+                        "type": "int"
+                      },
+                      "type": "primitive"
+                    }
+                  ],
+                  "type": "array"
+                }
+              },
+              "type": "object"
+            },
+            "type": "withoutStreaming"
+          },
+          "codeSamples": [
+            {
+              "name": "cURL",
+              "language": "cURL",
+              "code": "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/entities/d4bc3c80-ec1a-3da2-836e-2a4ca4758be5\" \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"  ",
+              "type": "language"
+            },
+            {
+              "name": "Python SDK",
+              "language": "python",
+              "code": "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.entities.lookup(\"d4bc3c80-ec1a-3da2-836e-2a4ca4758be5\") ",
+              "type": "language"
+            }
+          ],
+          "type": "full"
+        }
+      ],
+      "source": {
+        "file": "../openapi.yml",
+        "type": "openapi"
+      }
+    }
+  ],
+  "webhooks": [],
+  "channel": [],
+  "groupedSchemas": {
+    "rootSchemas": {
+      "Account": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "accountType",
+            "key": "type",
+            "schema": {
+              "generatedName": "accountType",
+              "nameOverride": "Account",
+              "title": "Account",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AccountType",
+                "nameOverride": "Type",
+                "title": "Type",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountNumber",
+            "key": "number",
+            "schema": {
+              "generatedName": "accountNumber",
+              "nameOverride": "Account",
+              "title": "Account",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AccountNumber",
+                "nameOverride": "Number",
+                "title": "Number",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountOpeningBalance",
+            "key": "opening_balance",
+            "schema": {
+              "generatedName": "accountOpeningBalance",
+              "nameOverride": "Account",
+              "title": "Account",
+              "value": {
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "AccountOpeningBalance",
+                "title": "Opening Balance",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountClosingBalance",
+            "key": "closing_balance",
+            "schema": {
+              "generatedName": "accountClosingBalance",
+              "nameOverride": "Account",
+              "title": "Account",
+              "value": {
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "AccountClosingBalance",
+                "title": "Closing Balance",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountIsoCurrencyCode",
+            "key": "iso_currency_code",
+            "schema": {
+              "generatedName": "accountIsoCurrencyCode",
+              "nameOverride": "Account",
+              "title": "Account",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AccountIsoCurrencyCode",
+                "title": "Iso Currency Code",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Account",
+        "nameOverride": "Account",
+        "title": "Account",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "AccountHolder": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "accountHolderType",
+            "key": "type",
+            "schema": {
+              "generatedName": "accountHolderType",
+              "nameOverride": "AccountHolder",
+              "title": "AccountHolder",
+              "value": {
+                "generatedName": "AccountHolderType",
+                "schema": "AccountType",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountHolderName",
+            "key": "name",
+            "schema": {
+              "generatedName": "accountHolderName",
+              "nameOverride": "AccountHolder",
+              "title": "AccountHolder",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AccountHolderName",
+                "nameOverride": "Name",
+                "title": "Name",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountHolderAddress",
+            "key": "address",
+            "schema": {
+              "generatedName": "accountHolderAddress",
+              "nameOverride": "AccountHolder",
+              "title": "AccountHolder",
+              "value": {
+                "generatedName": "AccountHolderAddress",
+                "schema": "Address",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "AccountHolder",
+        "nameOverride": "AccountHolder",
+        "title": "AccountHolder",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "AccountHolderCreate": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "accountHolderCreateId",
+            "key": "id",
+            "schema": {
+              "description": "The unique ID of the account holder of the transaction",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "AccountHolderCreateId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountHolderCreateType",
+            "key": "type",
+            "schema": {
+              "description": "The type of the account holder. ",
+              "generatedName": "AccountHolderCreateType",
+              "schema": "AccountHolderType",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountHolderCreateName",
+            "key": "name",
+            "schema": {
+              "generatedName": "accountHolderCreateName",
+              "nameOverride": "AccountHolderCreate",
+              "title": "AccountHolderCreate",
+              "value": {
+                "description": "The name of the account holder",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AccountHolderCreateName",
+                "nameOverride": "Name",
+                "title": "Name",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "AccountHolderCreate",
+        "nameOverride": "AccountHolderCreate",
+        "title": "AccountHolderCreate",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "AccountHolderExternal": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "accountHolderExternalId",
+            "key": "id",
+            "schema": {
+              "description": "The unique ID of the account holder of the transaction",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "AccountHolderExternalId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountHolderExternalType",
+            "key": "type",
+            "schema": {
+              "description": "The type of the account holder. ",
+              "generatedName": "AccountHolderExternalType",
+              "schema": "AccountHolderType",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountHolderExternalName",
+            "key": "name",
+            "schema": {
+              "generatedName": "accountHolderExternalName",
+              "nameOverride": "AccountHolderExternal",
+              "title": "AccountHolderExternal",
+              "value": {
+                "description": "The name of the account holder",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AccountHolderExternalName",
+                "nameOverride": "Name",
+                "title": "Name",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "accountHolderExternalCreatedAt",
+            "key": "created_at",
+            "schema": {
+              "description": "The timestamp of when the account holder was created.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "AccountHolderExternalCreatedAt",
+              "title": "Created At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "AccountHolderExternal",
+        "nameOverride": "AccountHolderExternal",
+        "title": "AccountHolderExternal",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "AccountHolderType": {
+        "description": "An enumeration.",
+        "generatedName": "AccountHolderType",
+        "nameOverride": "AccountHolderType",
+        "title": "AccountHolderType",
+        "values": [
+          {
+            "generatedName": "consumer",
+            "value": "consumer",
+            "casing": {}
+          },
+          {
+            "generatedName": "business",
+            "value": "business",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "AccountType": {
+        "description": "An enumeration.",
+        "generatedName": "AccountType",
+        "nameOverride": "AccountType",
+        "title": "AccountType",
+        "values": [
+          {
+            "generatedName": "consumer",
+            "value": "consumer",
+            "casing": {}
+          },
+          {
+            "generatedName": "business",
+            "value": "business",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "AccountingCategory": {
+        "description": "An enumeration.",
+        "generatedName": "AccountingCategory",
+        "nameOverride": "AccountingCategory",
+        "title": "AccountingCategory",
+        "values": [
+          {
+            "generatedName": "OperationalExpenses",
+            "value": "operational expenses",
+            "casing": {}
+          },
+          {
+            "generatedName": "CostOfGoodsSold",
+            "value": "cost of goods sold",
+            "casing": {}
+          },
+          {
+            "generatedName": "revenue",
+            "value": "revenue",
+            "casing": {}
+          },
+          {
+            "generatedName": "financing",
+            "value": "financing",
+            "casing": {}
+          },
+          {
+            "generatedName": "taxes",
+            "value": "taxes",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "ActionModel": {
+        "generatedName": "ActionModel",
+        "schema": "Action",
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "reference"
+      },
+      "Address": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "addressStreet",
+            "key": "street",
+            "schema": {
+              "generatedName": "addressStreet",
+              "nameOverride": "Address",
+              "title": "Address",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AddressStreet",
+                "nameOverride": "Street",
+                "title": "Street",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "addressPostcode",
+            "key": "postcode",
+            "schema": {
+              "generatedName": "addressPostcode",
+              "nameOverride": "Address",
+              "title": "Address",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AddressPostcode",
+                "nameOverride": "Postcode",
+                "title": "Postcode",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "addressCity",
+            "key": "city",
+            "schema": {
+              "generatedName": "addressCity",
+              "nameOverride": "Address",
+              "title": "Address",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AddressCity",
+                "nameOverride": "City",
+                "title": "City",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "addressState",
+            "key": "state",
+            "schema": {
+              "generatedName": "addressState",
+              "nameOverride": "Address",
+              "title": "Address",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AddressState",
+                "nameOverride": "State",
+                "title": "State",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "addressCountry",
+            "key": "country",
+            "schema": {
+              "generatedName": "addressCountry",
+              "nameOverride": "Address",
+              "title": "Address",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "AddressCountry",
+                "nameOverride": "Country",
+                "title": "Country",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Address",
+        "nameOverride": "Address",
+        "title": "Address",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "AsyncEnrichmentInput": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "asyncEnrichmentInputTransactions",
+            "key": "transactions",
+            "schema": {
+              "value": {
+                "generatedName": "AsyncEnrichmentInputTransactionsItem",
+                "schema": "TransactionInput",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "AsyncEnrichmentInputTransactions",
+              "nameOverride": "Transactions",
+              "title": "Transactions",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "AsyncEnrichmentInput",
+        "nameOverride": "AsyncEnrichmentInput",
+        "title": "AsyncEnrichmentInput",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BankStatement": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bankStatementId",
+            "key": "id",
+            "schema": {
+              "description": "A unique identifier for the bank statement job.",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "BankStatementId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementName",
+            "key": "name",
+            "schema": {
+              "generatedName": "bankStatementName",
+              "nameOverride": "BankStatement",
+              "title": "BankStatement",
+              "value": {
+                "description": "The name of the bank statement file, if available.",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "BankStatementName",
+                "nameOverride": "Name",
+                "title": "Name",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementStatus",
+            "key": "status",
+            "schema": {
+              "description": "The current status of the document.",
+              "generatedName": "BankStatementStatus",
+              "schema": "BankStatementStatus",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementCreatedAt",
+            "key": "created_at",
+            "schema": {
+              "description": "The date and time when the job was created.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "BankStatementCreatedAt",
+              "title": "Created At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementFile",
+            "key": "file",
+            "schema": {
+              "description": "Information about the bank statement file being processed.",
+              "generatedName": "BankStatementFile",
+              "schema": "BankStatementFile",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementError",
+            "key": "error",
+            "schema": {
+              "generatedName": "bankStatementError",
+              "nameOverride": "BankStatement",
+              "title": "BankStatement",
+              "value": {
+                "generatedName": "BankStatementError",
+                "schema": "BankStatementError",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "description": "Represents a bank statement with details about the file and its status.",
+        "generatedName": "BankStatement",
+        "nameOverride": "BankStatement",
+        "title": "BankStatement",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BankStatementAccount": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountNumber",
+            "key": "number",
+            "schema": {
+              "generatedName": "bankStatementAccountNumber",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "The account number, if available.",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "BankStatementAccountNumber",
+                "nameOverride": "Number",
+                "title": "Number",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountOpeningBalance",
+            "key": "opening_balance",
+            "schema": {
+              "generatedName": "bankStatementAccountOpeningBalance",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "The opening balance of the account for the statement period.",
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "BankStatementAccountOpeningBalance",
+                "title": "Opening Balance",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountClosingBalance",
+            "key": "closing_balance",
+            "schema": {
+              "generatedName": "bankStatementAccountClosingBalance",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "The closing balance of the account for the statement period.",
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "BankStatementAccountClosingBalance",
+                "title": "Closing Balance",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountStartDate",
+            "key": "start_date",
+            "schema": {
+              "generatedName": "bankStatementAccountStartDate",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "The start date of the statement period.",
+                "schema": {
+                  "format": "date",
+                  "type": "string"
+                },
+                "generatedName": "BankStatementAccountStartDate",
+                "title": "Start Date",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountEndDate",
+            "key": "end_date",
+            "schema": {
+              "generatedName": "bankStatementAccountEndDate",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "The end date of the statement period.",
+                "schema": {
+                  "format": "date",
+                  "type": "string"
+                },
+                "generatedName": "BankStatementAccountEndDate",
+                "title": "End Date",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountIsBalanceReconciled",
+            "key": "is_balance_reconciled",
+            "schema": {
+              "generatedName": "bankStatementAccountIsBalanceReconciled",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "Indicates whether the balance has been reconciled.",
+                "schema": {
+                  "type": "boolean"
+                },
+                "generatedName": "BankStatementAccountIsBalanceReconciled",
+                "title": "Is Balance Reconciled",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountTotalIncoming",
+            "key": "total_incoming",
+            "schema": {
+              "generatedName": "bankStatementAccountTotalIncoming",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "The sum of amounts of all incoming transactions.",
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "BankStatementAccountTotalIncoming",
+                "title": "Total Incoming",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountTotalOutgoing",
+            "key": "total_outgoing",
+            "schema": {
+              "generatedName": "bankStatementAccountTotalOutgoing",
+              "nameOverride": "BankStatementAccount",
+              "title": "BankStatementAccount",
+              "value": {
+                "description": "The sum of amounts of all outgoing transactions.",
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "BankStatementAccountTotalOutgoing",
+                "title": "Total Outgoing",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementAccountTransactions",
+            "key": "transactions",
+            "schema": {
+              "description": "List of transactions for this account.",
+              "value": {
+                "generatedName": "BankStatementAccountTransactionsItem",
+                "schema": "BankStatementTransaction",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "BankStatementAccountTransactions",
+              "nameOverride": "Transactions",
+              "title": "Transactions",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "BankStatementAccount",
+        "nameOverride": "BankStatementAccount",
+        "title": "BankStatementAccount",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BankStatementError": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bankStatementErrorCode",
+            "key": "code",
+            "schema": {
+              "generatedName": "BankStatementErrorCode",
+              "schema": "BankStatementErrorCode",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementErrorMessage",
+            "key": "message",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "BankStatementErrorMessage",
+              "nameOverride": "Message",
+              "title": "Message",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "BankStatementError",
+        "nameOverride": "BankStatementError",
+        "title": "BankStatementError",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BankStatementErrorCode": {
+        "description": "An enumeration.",
+        "generatedName": "BankStatementErrorCode",
+        "nameOverride": "BankStatementErrorCode",
+        "title": "BankStatementErrorCode",
+        "values": [
+          {
+            "generatedName": "invalid_bank_statement",
+            "value": "invalid_bank_statement",
+            "casing": {}
+          },
+          {
+            "generatedName": "internal_error",
+            "value": "internal_error",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "BankStatementFile": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bankStatementFileNoPages",
+            "key": "no_pages",
+            "schema": {
+              "description": "The number of pages in the bank statement file.",
+              "schema": {
+                "type": "int"
+              },
+              "generatedName": "BankStatementFileNoPages",
+              "title": "No Pages",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementFileSize",
+            "key": "size",
+            "schema": {
+              "generatedName": "bankStatementFileSize",
+              "nameOverride": "BankStatementFile",
+              "title": "BankStatementFile",
+              "value": {
+                "description": "The size of the bank statement file in bytes, if available.",
+                "schema": {
+                  "type": "int"
+                },
+                "generatedName": "BankStatementFileSize",
+                "nameOverride": "Size",
+                "title": "Size",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "BankStatementFile",
+        "nameOverride": "BankStatementFile",
+        "title": "BankStatementFile",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BankStatementResults": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bankStatementResultsAccounts",
+            "key": "accounts",
+            "schema": {
+              "description": "List of accounts in the bank statement.",
+              "value": {
+                "generatedName": "BankStatementResultsAccountsItem",
+                "schema": "BankStatementAccount",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "BankStatementResultsAccounts",
+              "nameOverride": "Accounts",
+              "title": "Accounts",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "BankStatementResults",
+        "nameOverride": "BankStatementResults",
+        "title": "BankStatementResults",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BankStatementStatus": {
+        "description": "An enumeration.",
+        "generatedName": "BankStatementStatus",
+        "nameOverride": "BankStatementStatus",
+        "title": "BankStatementStatus",
+        "values": [
+          {
+            "generatedName": "processing",
+            "value": "processing",
+            "casing": {}
+          },
+          {
+            "generatedName": "completed",
+            "value": "completed",
+            "casing": {}
+          },
+          {
+            "generatedName": "error",
+            "value": "error",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "BankStatementTransaction": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bankStatementTransactionId",
+            "key": "id",
+            "schema": {
+              "description": "A unique identifier of the transaction",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "BankStatementTransactionId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementTransactionDescription",
+            "key": "description",
+            "schema": {
+              "description": "The description string of the transaction",
+              "schema": {
+                "minLength": 0,
+                "maxLength": 1024,
+                "type": "string"
+              },
+              "generatedName": "BankStatementTransactionDescription",
+              "nameOverride": "Description",
+              "title": "Description",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementTransactionDate",
+            "key": "date",
+            "schema": {
+              "description": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+              "schema": {
+                "format": "date",
+                "type": "string"
+              },
+              "generatedName": "BankStatementTransactionDate",
+              "nameOverride": "Date",
+              "title": "Date",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementTransactionAmount",
+            "key": "amount",
+            "schema": {
+              "description": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+              "schema": {
+                "minimum": 0,
+                "type": "double"
+              },
+              "generatedName": "BankStatementTransactionAmount",
+              "nameOverride": "Amount",
+              "title": "Amount",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementTransactionEntryType",
+            "key": "entry_type",
+            "schema": {
+              "description": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+              "generatedName": "BankStatementTransactionEntryType",
+              "schema": "EntryType",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementTransactionCurrency",
+            "key": "currency",
+            "schema": {
+              "description": "The currency of the transaction in ISO 4217 format",
+              "generatedName": "BankStatementTransactionCurrency",
+              "schema": "Currency",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "bankStatementTransactionRunningBalance",
+            "key": "running_balance",
+            "schema": {
+              "generatedName": "bankStatementTransactionRunningBalance",
+              "nameOverride": "BankStatementTransaction",
+              "title": "BankStatementTransaction",
+              "value": {
+                "description": "The account's balance when this transaction was performed",
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "BankStatementTransactionRunningBalance",
+                "title": "Running Balance",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "BankStatementTransaction",
+        "nameOverride": "BankStatementTransaction",
+        "title": "BankStatementTransaction",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Batch": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "batchId",
+            "key": "id",
+            "schema": {
+              "description": "A unique identifier for the batch.",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "BatchId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchStatus",
+            "key": "status",
+            "schema": {
+              "description": "The current status of the batch. A batch will error if at least one of the transactions contains an error.",
+              "generatedName": "BatchStatus",
+              "schema": "BatchStatus",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchCreatedAt",
+            "key": "created_at",
+            "schema": {
+              "description": "The timestamp of when the batch was created.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "BatchCreatedAt",
+              "title": "Created At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchUpdatedAt",
+            "key": "updated_at",
+            "schema": {
+              "description": "The timestamp of when the batch was last updated.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "BatchUpdatedAt",
+              "title": "Updated At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchProgress",
+            "key": "progress",
+            "schema": {
+              "description": "The number of transactions processed so far.",
+              "schema": {
+                "type": "int"
+              },
+              "generatedName": "BatchProgress",
+              "nameOverride": "Progress",
+              "title": "Progress",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchTotal",
+            "key": "total",
+            "schema": {
+              "description": "The total number of transactions in the batch.",
+              "schema": {
+                "type": "int"
+              },
+              "generatedName": "BatchTotal",
+              "nameOverride": "Total",
+              "title": "Total",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "description": "The `Batch` object represents the status and progress of an asynchronous batch enrichment job.",
+        "generatedName": "Batch",
+        "nameOverride": "Batch",
+        "title": "Batch",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BatchResult": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "batchResultId",
+            "key": "id",
+            "schema": {
+              "description": "A unique identifier for the batch.",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "BatchResultId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchResultTotal",
+            "key": "total",
+            "schema": {
+              "description": "The total number of transactions in the batch result.",
+              "schema": {
+                "type": "int"
+              },
+              "generatedName": "BatchResultTotal",
+              "nameOverride": "Total",
+              "title": "Total",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchResultStatus",
+            "key": "status",
+            "schema": {
+              "description": "The current status of the batch job.",
+              "generatedName": "BatchResultStatus",
+              "schema": "BatchStatus",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "batchResultResults",
+            "key": "results",
+            "schema": {
+              "generatedName": "BatchResultResults",
+              "schema": "EnrichmentResult",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "description": "The `BatchResult` object represents the result of a batch enrichment job, including its status and\nenriched transactions.",
+        "generatedName": "BatchResult",
+        "nameOverride": "BatchResult",
+        "title": "BatchResult",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "BatchStatus": {
+        "description": "An enumeration.",
+        "generatedName": "BatchStatus",
+        "nameOverride": "BatchStatus",
+        "title": "BatchStatus",
+        "values": [
+          {
+            "generatedName": "processing",
+            "value": "processing",
+            "casing": {}
+          },
+          {
+            "generatedName": "completed",
+            "value": "completed",
+            "casing": {}
+          },
+          {
+            "generatedName": "error",
+            "value": "error",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "Body_post_bank_statement_v3_bank_statements_post": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bodyPostBankStatementV3BankStatementsPostFile",
+            "key": "file",
+            "schema": {
+              "schema": {
+                "format": "binary",
+                "type": "string"
+              },
+              "generatedName": "BodyPostBankStatementV3BankStatementsPostFile",
+              "nameOverride": "File",
+              "title": "File",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "BodyPostBankStatementV3BankStatementsPost",
+        "title": "Body_post_bank_statement_v3_bank_statements_post",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Body_set_transaction_ah_v3_transactions__id__assign_post": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "bodySetTransactionAhV3TransactionsIdAssignPostAccountHolderId",
+            "key": "account_holder_id",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "BodySetTransactionAhV3TransactionsIdAssignPostAccountHolderId",
+              "title": "Account Holder Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "BodySetTransactionAhV3TransactionsIdAssignPost",
+        "title": "Body_set_transaction_ah_v3_transactions__id__assign_post",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Categories": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "categoriesGeneral",
+            "key": "general",
+            "schema": {
+              "generatedName": "categoriesGeneral",
+              "nameOverride": "Categories",
+              "title": "Categories",
+              "value": {
+                "description": "The category of the transaction. View the valid set of categories for your key [here](./docs/v3/enrichment/entities).",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CategoriesGeneral",
+                "nameOverride": "General",
+                "title": "General",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "categoriesAccounting",
+            "key": "accounting",
+            "schema": {
+              "generatedName": "categoriesAccounting",
+              "nameOverride": "Categories",
+              "title": "Categories",
+              "value": {
+                "description": "The corresponding accounting category. Only available for `business` transactions.",
+                "generatedName": "CategoriesAccounting",
+                "schema": "AccountingCategory",
+                "groupName": [],
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Categories",
+        "nameOverride": "Categories",
+        "title": "Categories",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "CategoryConfidence": {
+        "description": "An enumeration.",
+        "generatedName": "CategoryConfidence",
+        "nameOverride": "CategoryConfidence",
+        "title": "CategoryConfidence",
+        "values": [
+          {
+            "generatedName": "high",
+            "value": "high",
+            "casing": {}
+          },
+          {
+            "generatedName": "medium",
+            "value": "medium",
+            "casing": {}
+          },
+          {
+            "generatedName": "low",
+            "value": "low",
+            "casing": {}
+          },
+          {
+            "generatedName": "unknown",
+            "value": "unknown",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "CategorySet": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "categorySetIncoming",
+            "key": "incoming",
+            "schema": {
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CategorySetIncomingItem",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "generatedName": "CategorySetIncoming",
+              "nameOverride": "Incoming",
+              "title": "Incoming",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "categorySetOutgoing",
+            "key": "outgoing",
+            "schema": {
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CategorySetOutgoingItem",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "generatedName": "CategorySetOutgoing",
+              "nameOverride": "Outgoing",
+              "title": "Outgoing",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "CategorySet",
+        "nameOverride": "CategorySet",
+        "title": "CategorySet",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Counterparty": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "counterpartyId",
+            "key": "id",
+            "schema": {
+              "generatedName": "counterpartyId",
+              "nameOverride": "Counterparty",
+              "title": "Counterparty",
+              "value": {
+                "description": "The unique UUID identifier of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CounterpartyId",
+                "nameOverride": "Id",
+                "title": "Id",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "counterpartyName",
+            "key": "name",
+            "schema": {
+              "generatedName": "counterpartyName",
+              "nameOverride": "Counterparty",
+              "title": "Counterparty",
+              "value": {
+                "description": "The name of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CounterpartyName",
+                "nameOverride": "Name",
+                "title": "Name",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "counterpartyWebsite",
+            "key": "website",
+            "schema": {
+              "generatedName": "counterpartyWebsite",
+              "nameOverride": "Counterparty",
+              "title": "Counterparty",
+              "value": {
+                "description": "The website URL of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CounterpartyWebsite",
+                "nameOverride": "Website",
+                "title": "Website",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "counterpartyLogo",
+            "key": "logo",
+            "schema": {
+              "generatedName": "counterpartyLogo",
+              "nameOverride": "Counterparty",
+              "title": "Counterparty",
+              "value": {
+                "description": "Logo's URL",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CounterpartyLogo",
+                "nameOverride": "Logo",
+                "title": "Logo",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "counterpartyMccs",
+            "key": "mccs",
+            "schema": {
+              "generatedName": "counterpartyMccs",
+              "nameOverride": "Counterparty",
+              "title": "Counterparty",
+              "value": {
+                "description": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "value": {
+                  "schema": {
+                    "type": "int"
+                  },
+                  "generatedName": "CounterpartyMccsItem",
+                  "groupName": [],
+                  "type": "primitive"
+                },
+                "generatedName": "CounterpartyMccs",
+                "nameOverride": "Mccs",
+                "title": "Mccs",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "counterpartyType",
+            "key": "type",
+            "schema": {
+              "generatedName": "CounterpartyType",
+              "schema": "CounterpartyType",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Counterparty",
+        "nameOverride": "Counterparty",
+        "title": "Counterparty",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "CounterpartyType": {
+        "description": "An enumeration.",
+        "generatedName": "CounterpartyType",
+        "nameOverride": "CounterpartyType",
+        "title": "CounterpartyType",
+        "values": [
+          {
+            "generatedName": "person",
+            "value": "person",
+            "casing": {}
+          },
+          {
+            "generatedName": "organization",
+            "value": "organization",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "Country": {
+        "description": "An enumeration.",
+        "generatedName": "Country",
+        "nameOverride": "Country",
+        "title": "Country",
+        "values": [
+          {
+            "generatedName": "AD",
+            "value": "AD",
+            "casing": {}
+          },
+          {
+            "generatedName": "AE",
+            "value": "AE",
+            "casing": {}
+          },
+          {
+            "generatedName": "AF",
+            "value": "AF",
+            "casing": {}
+          },
+          {
+            "generatedName": "AG",
+            "value": "AG",
+            "casing": {}
+          },
+          {
+            "generatedName": "AI",
+            "value": "AI",
+            "casing": {}
+          },
+          {
+            "generatedName": "AL",
+            "value": "AL",
+            "casing": {}
+          },
+          {
+            "generatedName": "AM",
+            "value": "AM",
+            "casing": {}
+          },
+          {
+            "generatedName": "AO",
+            "value": "AO",
+            "casing": {}
+          },
+          {
+            "generatedName": "AR",
+            "value": "AR",
+            "casing": {}
+          },
+          {
+            "generatedName": "AS",
+            "value": "AS",
+            "casing": {}
+          },
+          {
+            "generatedName": "AT",
+            "value": "AT",
+            "casing": {}
+          },
+          {
+            "generatedName": "AU",
+            "value": "AU",
+            "casing": {}
+          },
+          {
+            "generatedName": "AW",
+            "value": "AW",
+            "casing": {}
+          },
+          {
+            "generatedName": "AZ",
+            "value": "AZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "BA",
+            "value": "BA",
+            "casing": {}
+          },
+          {
+            "generatedName": "BB",
+            "value": "BB",
+            "casing": {}
+          },
+          {
+            "generatedName": "BD",
+            "value": "BD",
+            "casing": {}
+          },
+          {
+            "generatedName": "BE",
+            "value": "BE",
+            "casing": {}
+          },
+          {
+            "generatedName": "BF",
+            "value": "BF",
+            "casing": {}
+          },
+          {
+            "generatedName": "BG",
+            "value": "BG",
+            "casing": {}
+          },
+          {
+            "generatedName": "BH",
+            "value": "BH",
+            "casing": {}
+          },
+          {
+            "generatedName": "BI",
+            "value": "BI",
+            "casing": {}
+          },
+          {
+            "generatedName": "BJ",
+            "value": "BJ",
+            "casing": {}
+          },
+          {
+            "generatedName": "BL",
+            "value": "BL",
+            "casing": {}
+          },
+          {
+            "generatedName": "BM",
+            "value": "BM",
+            "casing": {}
+          },
+          {
+            "generatedName": "BN",
+            "value": "BN",
+            "casing": {}
+          },
+          {
+            "generatedName": "BO",
+            "value": "BO",
+            "casing": {}
+          },
+          {
+            "generatedName": "BQ",
+            "value": "BQ",
+            "casing": {}
+          },
+          {
+            "generatedName": "BR",
+            "value": "BR",
+            "casing": {}
+          },
+          {
+            "generatedName": "BS",
+            "value": "BS",
+            "casing": {}
+          },
+          {
+            "generatedName": "BT",
+            "value": "BT",
+            "casing": {}
+          },
+          {
+            "generatedName": "BV",
+            "value": "BV",
+            "casing": {}
+          },
+          {
+            "generatedName": "BW",
+            "value": "BW",
+            "casing": {}
+          },
+          {
+            "generatedName": "BY",
+            "value": "BY",
+            "casing": {}
+          },
+          {
+            "generatedName": "BZ",
+            "value": "BZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "CA",
+            "value": "CA",
+            "casing": {}
+          },
+          {
+            "generatedName": "CC",
+            "value": "CC",
+            "casing": {}
+          },
+          {
+            "generatedName": "CD",
+            "value": "CD",
+            "casing": {}
+          },
+          {
+            "generatedName": "CF",
+            "value": "CF",
+            "casing": {}
+          },
+          {
+            "generatedName": "CG",
+            "value": "CG",
+            "casing": {}
+          },
+          {
+            "generatedName": "CH",
+            "value": "CH",
+            "casing": {}
+          },
+          {
+            "generatedName": "CI",
+            "value": "CI",
+            "casing": {}
+          },
+          {
+            "generatedName": "CK",
+            "value": "CK",
+            "casing": {}
+          },
+          {
+            "generatedName": "CL",
+            "value": "CL",
+            "casing": {}
+          },
+          {
+            "generatedName": "CM",
+            "value": "CM",
+            "casing": {}
+          },
+          {
+            "generatedName": "CN",
+            "value": "CN",
+            "casing": {}
+          },
+          {
+            "generatedName": "CO",
+            "value": "CO",
+            "casing": {}
+          },
+          {
+            "generatedName": "CR",
+            "value": "CR",
+            "casing": {}
+          },
+          {
+            "generatedName": "CU",
+            "value": "CU",
+            "casing": {}
+          },
+          {
+            "generatedName": "CV",
+            "value": "CV",
+            "casing": {}
+          },
+          {
+            "generatedName": "CW",
+            "value": "CW",
+            "casing": {}
+          },
+          {
+            "generatedName": "CX",
+            "value": "CX",
+            "casing": {}
+          },
+          {
+            "generatedName": "CY",
+            "value": "CY",
+            "casing": {}
+          },
+          {
+            "generatedName": "CZ",
+            "value": "CZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "DE",
+            "value": "DE",
+            "casing": {}
+          },
+          {
+            "generatedName": "DJ",
+            "value": "DJ",
+            "casing": {}
+          },
+          {
+            "generatedName": "DK",
+            "value": "DK",
+            "casing": {}
+          },
+          {
+            "generatedName": "DM",
+            "value": "DM",
+            "casing": {}
+          },
+          {
+            "generatedName": "DO",
+            "value": "DO",
+            "casing": {}
+          },
+          {
+            "generatedName": "DZ",
+            "value": "DZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "EC",
+            "value": "EC",
+            "casing": {}
+          },
+          {
+            "generatedName": "EE",
+            "value": "EE",
+            "casing": {}
+          },
+          {
+            "generatedName": "EG",
+            "value": "EG",
+            "casing": {}
+          },
+          {
+            "generatedName": "EH",
+            "value": "EH",
+            "casing": {}
+          },
+          {
+            "generatedName": "ER",
+            "value": "ER",
+            "casing": {}
+          },
+          {
+            "generatedName": "ES",
+            "value": "ES",
+            "casing": {}
+          },
+          {
+            "generatedName": "ET",
+            "value": "ET",
+            "casing": {}
+          },
+          {
+            "generatedName": "FI",
+            "value": "FI",
+            "casing": {}
+          },
+          {
+            "generatedName": "FJ",
+            "value": "FJ",
+            "casing": {}
+          },
+          {
+            "generatedName": "FK",
+            "value": "FK",
+            "casing": {}
+          },
+          {
+            "generatedName": "FM",
+            "value": "FM",
+            "casing": {}
+          },
+          {
+            "generatedName": "FR",
+            "value": "FR",
+            "casing": {}
+          },
+          {
+            "generatedName": "GA",
+            "value": "GA",
+            "casing": {}
+          },
+          {
+            "generatedName": "GB",
+            "value": "GB",
+            "casing": {}
+          },
+          {
+            "generatedName": "GD",
+            "value": "GD",
+            "casing": {}
+          },
+          {
+            "generatedName": "GE",
+            "value": "GE",
+            "casing": {}
+          },
+          {
+            "generatedName": "GF",
+            "value": "GF",
+            "casing": {}
+          },
+          {
+            "generatedName": "GG",
+            "value": "GG",
+            "casing": {}
+          },
+          {
+            "generatedName": "GH",
+            "value": "GH",
+            "casing": {}
+          },
+          {
+            "generatedName": "GI",
+            "value": "GI",
+            "casing": {}
+          },
+          {
+            "generatedName": "GL",
+            "value": "GL",
+            "casing": {}
+          },
+          {
+            "generatedName": "GM",
+            "value": "GM",
+            "casing": {}
+          },
+          {
+            "generatedName": "GN",
+            "value": "GN",
+            "casing": {}
+          },
+          {
+            "generatedName": "GP",
+            "value": "GP",
+            "casing": {}
+          },
+          {
+            "generatedName": "GQ",
+            "value": "GQ",
+            "casing": {}
+          },
+          {
+            "generatedName": "GR",
+            "value": "GR",
+            "casing": {}
+          },
+          {
+            "generatedName": "GS",
+            "value": "GS",
+            "casing": {}
+          },
+          {
+            "generatedName": "GT",
+            "value": "GT",
+            "casing": {}
+          },
+          {
+            "generatedName": "GU",
+            "value": "GU",
+            "casing": {}
+          },
+          {
+            "generatedName": "GW",
+            "value": "GW",
+            "casing": {}
+          },
+          {
+            "generatedName": "GY",
+            "value": "GY",
+            "casing": {}
+          },
+          {
+            "generatedName": "HK",
+            "value": "HK",
+            "casing": {}
+          },
+          {
+            "generatedName": "HM",
+            "value": "HM",
+            "casing": {}
+          },
+          {
+            "generatedName": "HN",
+            "value": "HN",
+            "casing": {}
+          },
+          {
+            "generatedName": "HR",
+            "value": "HR",
+            "casing": {}
+          },
+          {
+            "generatedName": "HT",
+            "value": "HT",
+            "casing": {}
+          },
+          {
+            "generatedName": "HU",
+            "value": "HU",
+            "casing": {}
+          },
+          {
+            "generatedName": "ID",
+            "value": "ID",
+            "casing": {}
+          },
+          {
+            "generatedName": "IE",
+            "value": "IE",
+            "casing": {}
+          },
+          {
+            "generatedName": "IL",
+            "value": "IL",
+            "casing": {}
+          },
+          {
+            "generatedName": "IM",
+            "value": "IM",
+            "casing": {}
+          },
+          {
+            "generatedName": "IN",
+            "value": "IN",
+            "casing": {}
+          },
+          {
+            "generatedName": "IO",
+            "value": "IO",
+            "casing": {}
+          },
+          {
+            "generatedName": "IQ",
+            "value": "IQ",
+            "casing": {}
+          },
+          {
+            "generatedName": "IR",
+            "value": "IR",
+            "casing": {}
+          },
+          {
+            "generatedName": "IS",
+            "value": "IS",
+            "casing": {}
+          },
+          {
+            "generatedName": "IT",
+            "value": "IT",
+            "casing": {}
+          },
+          {
+            "generatedName": "JE",
+            "value": "JE",
+            "casing": {}
+          },
+          {
+            "generatedName": "JM",
+            "value": "JM",
+            "casing": {}
+          },
+          {
+            "generatedName": "JO",
+            "value": "JO",
+            "casing": {}
+          },
+          {
+            "generatedName": "JP",
+            "value": "JP",
+            "casing": {}
+          },
+          {
+            "generatedName": "KE",
+            "value": "KE",
+            "casing": {}
+          },
+          {
+            "generatedName": "KG",
+            "value": "KG",
+            "casing": {}
+          },
+          {
+            "generatedName": "KH",
+            "value": "KH",
+            "casing": {}
+          },
+          {
+            "generatedName": "KI",
+            "value": "KI",
+            "casing": {}
+          },
+          {
+            "generatedName": "KM",
+            "value": "KM",
+            "casing": {}
+          },
+          {
+            "generatedName": "KN",
+            "value": "KN",
+            "casing": {}
+          },
+          {
+            "generatedName": "KP",
+            "value": "KP",
+            "casing": {}
+          },
+          {
+            "generatedName": "KR",
+            "value": "KR",
+            "casing": {}
+          },
+          {
+            "generatedName": "KW",
+            "value": "KW",
+            "casing": {}
+          },
+          {
+            "generatedName": "KY",
+            "value": "KY",
+            "casing": {}
+          },
+          {
+            "generatedName": "KZ",
+            "value": "KZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "LA",
+            "value": "LA",
+            "casing": {}
+          },
+          {
+            "generatedName": "LB",
+            "value": "LB",
+            "casing": {}
+          },
+          {
+            "generatedName": "LC",
+            "value": "LC",
+            "casing": {}
+          },
+          {
+            "generatedName": "LI",
+            "value": "LI",
+            "casing": {}
+          },
+          {
+            "generatedName": "LK",
+            "value": "LK",
+            "casing": {}
+          },
+          {
+            "generatedName": "LR",
+            "value": "LR",
+            "casing": {}
+          },
+          {
+            "generatedName": "LS",
+            "value": "LS",
+            "casing": {}
+          },
+          {
+            "generatedName": "LT",
+            "value": "LT",
+            "casing": {}
+          },
+          {
+            "generatedName": "LU",
+            "value": "LU",
+            "casing": {}
+          },
+          {
+            "generatedName": "LV",
+            "value": "LV",
+            "casing": {}
+          },
+          {
+            "generatedName": "LY",
+            "value": "LY",
+            "casing": {}
+          },
+          {
+            "generatedName": "MA",
+            "value": "MA",
+            "casing": {}
+          },
+          {
+            "generatedName": "MC",
+            "value": "MC",
+            "casing": {}
+          },
+          {
+            "generatedName": "MD",
+            "value": "MD",
+            "casing": {}
+          },
+          {
+            "generatedName": "ME",
+            "value": "ME",
+            "casing": {}
+          },
+          {
+            "generatedName": "MF",
+            "value": "MF",
+            "casing": {}
+          },
+          {
+            "generatedName": "MG",
+            "value": "MG",
+            "casing": {}
+          },
+          {
+            "generatedName": "MH",
+            "value": "MH",
+            "casing": {}
+          },
+          {
+            "generatedName": "MK",
+            "value": "MK",
+            "casing": {}
+          },
+          {
+            "generatedName": "ML",
+            "value": "ML",
+            "casing": {}
+          },
+          {
+            "generatedName": "MM",
+            "value": "MM",
+            "casing": {}
+          },
+          {
+            "generatedName": "MN",
+            "value": "MN",
+            "casing": {}
+          },
+          {
+            "generatedName": "MO",
+            "value": "MO",
+            "casing": {}
+          },
+          {
+            "generatedName": "MP",
+            "value": "MP",
+            "casing": {}
+          },
+          {
+            "generatedName": "MQ",
+            "value": "MQ",
+            "casing": {}
+          },
+          {
+            "generatedName": "MR",
+            "value": "MR",
+            "casing": {}
+          },
+          {
+            "generatedName": "MS",
+            "value": "MS",
+            "casing": {}
+          },
+          {
+            "generatedName": "MT",
+            "value": "MT",
+            "casing": {}
+          },
+          {
+            "generatedName": "MU",
+            "value": "MU",
+            "casing": {}
+          },
+          {
+            "generatedName": "MV",
+            "value": "MV",
+            "casing": {}
+          },
+          {
+            "generatedName": "MW",
+            "value": "MW",
+            "casing": {}
+          },
+          {
+            "generatedName": "MX",
+            "value": "MX",
+            "casing": {}
+          },
+          {
+            "generatedName": "MY",
+            "value": "MY",
+            "casing": {}
+          },
+          {
+            "generatedName": "MZ",
+            "value": "MZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "NA",
+            "value": "NA",
+            "casing": {}
+          },
+          {
+            "generatedName": "NC",
+            "value": "NC",
+            "casing": {}
+          },
+          {
+            "generatedName": "NE",
+            "value": "NE",
+            "casing": {}
+          },
+          {
+            "generatedName": "NF",
+            "value": "NF",
+            "casing": {}
+          },
+          {
+            "generatedName": "NG",
+            "value": "NG",
+            "casing": {}
+          },
+          {
+            "generatedName": "NI",
+            "value": "NI",
+            "casing": {}
+          },
+          {
+            "generatedName": "NL",
+            "value": "NL",
+            "casing": {}
+          },
+          {
+            "generatedName": "NO",
+            "value": "NO",
+            "casing": {}
+          },
+          {
+            "generatedName": "NP",
+            "value": "NP",
+            "casing": {}
+          },
+          {
+            "generatedName": "NR",
+            "value": "NR",
+            "casing": {}
+          },
+          {
+            "generatedName": "NU",
+            "value": "NU",
+            "casing": {}
+          },
+          {
+            "generatedName": "NZ",
+            "value": "NZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "OM",
+            "value": "OM",
+            "casing": {}
+          },
+          {
+            "generatedName": "PA",
+            "value": "PA",
+            "casing": {}
+          },
+          {
+            "generatedName": "PE",
+            "value": "PE",
+            "casing": {}
+          },
+          {
+            "generatedName": "PF",
+            "value": "PF",
+            "casing": {}
+          },
+          {
+            "generatedName": "PG",
+            "value": "PG",
+            "casing": {}
+          },
+          {
+            "generatedName": "PH",
+            "value": "PH",
+            "casing": {}
+          },
+          {
+            "generatedName": "PK",
+            "value": "PK",
+            "casing": {}
+          },
+          {
+            "generatedName": "PL",
+            "value": "PL",
+            "casing": {}
+          },
+          {
+            "generatedName": "PM",
+            "value": "PM",
+            "casing": {}
+          },
+          {
+            "generatedName": "PN",
+            "value": "PN",
+            "casing": {}
+          },
+          {
+            "generatedName": "PR",
+            "value": "PR",
+            "casing": {}
+          },
+          {
+            "generatedName": "PS",
+            "value": "PS",
+            "casing": {}
+          },
+          {
+            "generatedName": "PT",
+            "value": "PT",
+            "casing": {}
+          },
+          {
+            "generatedName": "PW",
+            "value": "PW",
+            "casing": {}
+          },
+          {
+            "generatedName": "PY",
+            "value": "PY",
+            "casing": {}
+          },
+          {
+            "generatedName": "QA",
+            "value": "QA",
+            "casing": {}
+          },
+          {
+            "generatedName": "RE",
+            "value": "RE",
+            "casing": {}
+          },
+          {
+            "generatedName": "RO",
+            "value": "RO",
+            "casing": {}
+          },
+          {
+            "generatedName": "RS",
+            "value": "RS",
+            "casing": {}
+          },
+          {
+            "generatedName": "RU",
+            "value": "RU",
+            "casing": {}
+          },
+          {
+            "generatedName": "RW",
+            "value": "RW",
+            "casing": {}
+          },
+          {
+            "generatedName": "SA",
+            "value": "SA",
+            "casing": {}
+          },
+          {
+            "generatedName": "SB",
+            "value": "SB",
+            "casing": {}
+          },
+          {
+            "generatedName": "SC",
+            "value": "SC",
+            "casing": {}
+          },
+          {
+            "generatedName": "SD",
+            "value": "SD",
+            "casing": {}
+          },
+          {
+            "generatedName": "SE",
+            "value": "SE",
+            "casing": {}
+          },
+          {
+            "generatedName": "SG",
+            "value": "SG",
+            "casing": {}
+          },
+          {
+            "generatedName": "SH",
+            "value": "SH",
+            "casing": {}
+          },
+          {
+            "generatedName": "SI",
+            "value": "SI",
+            "casing": {}
+          },
+          {
+            "generatedName": "SJ",
+            "value": "SJ",
+            "casing": {}
+          },
+          {
+            "generatedName": "SK",
+            "value": "SK",
+            "casing": {}
+          },
+          {
+            "generatedName": "SL",
+            "value": "SL",
+            "casing": {}
+          },
+          {
+            "generatedName": "SM",
+            "value": "SM",
+            "casing": {}
+          },
+          {
+            "generatedName": "SN",
+            "value": "SN",
+            "casing": {}
+          },
+          {
+            "generatedName": "SO",
+            "value": "SO",
+            "casing": {}
+          },
+          {
+            "generatedName": "SR",
+            "value": "SR",
+            "casing": {}
+          },
+          {
+            "generatedName": "SS",
+            "value": "SS",
+            "casing": {}
+          },
+          {
+            "generatedName": "ST",
+            "value": "ST",
+            "casing": {}
+          },
+          {
+            "generatedName": "SV",
+            "value": "SV",
+            "casing": {}
+          },
+          {
+            "generatedName": "SX",
+            "value": "SX",
+            "casing": {}
+          },
+          {
+            "generatedName": "SY",
+            "value": "SY",
+            "casing": {}
+          },
+          {
+            "generatedName": "SZ",
+            "value": "SZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "TC",
+            "value": "TC",
+            "casing": {}
+          },
+          {
+            "generatedName": "TD",
+            "value": "TD",
+            "casing": {}
+          },
+          {
+            "generatedName": "TG",
+            "value": "TG",
+            "casing": {}
+          },
+          {
+            "generatedName": "TH",
+            "value": "TH",
+            "casing": {}
+          },
+          {
+            "generatedName": "TJ",
+            "value": "TJ",
+            "casing": {}
+          },
+          {
+            "generatedName": "TK",
+            "value": "TK",
+            "casing": {}
+          },
+          {
+            "generatedName": "TL",
+            "value": "TL",
+            "casing": {}
+          },
+          {
+            "generatedName": "TM",
+            "value": "TM",
+            "casing": {}
+          },
+          {
+            "generatedName": "TN",
+            "value": "TN",
+            "casing": {}
+          },
+          {
+            "generatedName": "TO",
+            "value": "TO",
+            "casing": {}
+          },
+          {
+            "generatedName": "TR",
+            "value": "TR",
+            "casing": {}
+          },
+          {
+            "generatedName": "TT",
+            "value": "TT",
+            "casing": {}
+          },
+          {
+            "generatedName": "TV",
+            "value": "TV",
+            "casing": {}
+          },
+          {
+            "generatedName": "TW",
+            "value": "TW",
+            "casing": {}
+          },
+          {
+            "generatedName": "TZ",
+            "value": "TZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "UA",
+            "value": "UA",
+            "casing": {}
+          },
+          {
+            "generatedName": "UG",
+            "value": "UG",
+            "casing": {}
+          },
+          {
+            "generatedName": "UM",
+            "value": "UM",
+            "casing": {}
+          },
+          {
+            "generatedName": "US",
+            "value": "US",
+            "casing": {}
+          },
+          {
+            "generatedName": "UY",
+            "value": "UY",
+            "casing": {}
+          },
+          {
+            "generatedName": "UZ",
+            "value": "UZ",
+            "casing": {}
+          },
+          {
+            "generatedName": "VC",
+            "value": "VC",
+            "casing": {}
+          },
+          {
+            "generatedName": "VE",
+            "value": "VE",
+            "casing": {}
+          },
+          {
+            "generatedName": "VG",
+            "value": "VG",
+            "casing": {}
+          },
+          {
+            "generatedName": "VI",
+            "value": "VI",
+            "casing": {}
+          },
+          {
+            "generatedName": "VN",
+            "value": "VN",
+            "casing": {}
+          },
+          {
+            "generatedName": "VU",
+            "value": "VU",
+            "casing": {}
+          },
+          {
+            "generatedName": "WF",
+            "value": "WF",
+            "casing": {}
+          },
+          {
+            "generatedName": "WS",
+            "value": "WS",
+            "casing": {}
+          },
+          {
+            "generatedName": "YE",
+            "value": "YE",
+            "casing": {}
+          },
+          {
+            "generatedName": "YT",
+            "value": "YT",
+            "casing": {}
+          },
+          {
+            "generatedName": "ZA",
+            "value": "ZA",
+            "casing": {}
+          },
+          {
+            "generatedName": "ZM",
+            "value": "ZM",
+            "casing": {}
+          },
+          {
+            "generatedName": "ZW",
+            "value": "ZW",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "Currency": {
+        "description": "An enumeration.",
+        "generatedName": "Currency",
+        "nameOverride": "Currency",
+        "title": "Currency",
+        "values": [
+          {
+            "generatedName": "EUR",
+            "value": "EUR",
+            "casing": {}
+          },
+          {
+            "generatedName": "AED",
+            "value": "AED",
+            "casing": {}
+          },
+          {
+            "generatedName": "AFN",
+            "value": "AFN",
+            "casing": {}
+          },
+          {
+            "generatedName": "XCD",
+            "value": "XCD",
+            "casing": {}
+          },
+          {
+            "generatedName": "ALL",
+            "value": "ALL",
+            "casing": {}
+          },
+          {
+            "generatedName": "AMD",
+            "value": "AMD",
+            "casing": {}
+          },
+          {
+            "generatedName": "AOA",
+            "value": "AOA",
+            "casing": {}
+          },
+          {
+            "generatedName": "ARS",
+            "value": "ARS",
+            "casing": {}
+          },
+          {
+            "generatedName": "USD",
+            "value": "USD",
+            "casing": {}
+          },
+          {
+            "generatedName": "AUD",
+            "value": "AUD",
+            "casing": {}
+          },
+          {
+            "generatedName": "AWG",
+            "value": "AWG",
+            "casing": {}
+          },
+          {
+            "generatedName": "AZN",
+            "value": "AZN",
+            "casing": {}
+          },
+          {
+            "generatedName": "BAM",
+            "value": "BAM",
+            "casing": {}
+          },
+          {
+            "generatedName": "BBD",
+            "value": "BBD",
+            "casing": {}
+          },
+          {
+            "generatedName": "BDT",
+            "value": "BDT",
+            "casing": {}
+          },
+          {
+            "generatedName": "XOF",
+            "value": "XOF",
+            "casing": {}
+          },
+          {
+            "generatedName": "BGN",
+            "value": "BGN",
+            "casing": {}
+          },
+          {
+            "generatedName": "BHD",
+            "value": "BHD",
+            "casing": {}
+          },
+          {
+            "generatedName": "BIF",
+            "value": "BIF",
+            "casing": {}
+          },
+          {
+            "generatedName": "BMD",
+            "value": "BMD",
+            "casing": {}
+          },
+          {
+            "generatedName": "BND",
+            "value": "BND",
+            "casing": {}
+          },
+          {
+            "generatedName": "BOB",
+            "value": "BOB",
+            "casing": {}
+          },
+          {
+            "generatedName": "BRL",
+            "value": "BRL",
+            "casing": {}
+          },
+          {
+            "generatedName": "BSD",
+            "value": "BSD",
+            "casing": {}
+          },
+          {
+            "generatedName": "INR",
+            "value": "INR",
+            "casing": {}
+          },
+          {
+            "generatedName": "NOK",
+            "value": "NOK",
+            "casing": {}
+          },
+          {
+            "generatedName": "BWP",
+            "value": "BWP",
+            "casing": {}
+          },
+          {
+            "generatedName": "BYR",
+            "value": "BYR",
+            "casing": {}
+          },
+          {
+            "generatedName": "BZD",
+            "value": "BZD",
+            "casing": {}
+          },
+          {
+            "generatedName": "CAD",
+            "value": "CAD",
+            "casing": {}
+          },
+          {
+            "generatedName": "CDF",
+            "value": "CDF",
+            "casing": {}
+          },
+          {
+            "generatedName": "XAF",
+            "value": "XAF",
+            "casing": {}
+          },
+          {
+            "generatedName": "CHF",
+            "value": "CHF",
+            "casing": {}
+          },
+          {
+            "generatedName": "NZD",
+            "value": "NZD",
+            "casing": {}
+          },
+          {
+            "generatedName": "CLP",
+            "value": "CLP",
+            "casing": {}
+          },
+          {
+            "generatedName": "CNY",
+            "value": "CNY",
+            "casing": {}
+          },
+          {
+            "generatedName": "COP",
+            "value": "COP",
+            "casing": {}
+          },
+          {
+            "generatedName": "CRC",
+            "value": "CRC",
+            "casing": {}
+          },
+          {
+            "generatedName": "CUP",
+            "value": "CUP",
+            "casing": {}
+          },
+          {
+            "generatedName": "CVE",
+            "value": "CVE",
+            "casing": {}
+          },
+          {
+            "generatedName": "ANG",
+            "value": "ANG",
+            "casing": {}
+          },
+          {
+            "generatedName": "CZK",
+            "value": "CZK",
+            "casing": {}
+          },
+          {
+            "generatedName": "DJF",
+            "value": "DJF",
+            "casing": {}
+          },
+          {
+            "generatedName": "DKK",
+            "value": "DKK",
+            "casing": {}
+          },
+          {
+            "generatedName": "DOP",
+            "value": "DOP",
+            "casing": {}
+          },
+          {
+            "generatedName": "DZD",
+            "value": "DZD",
+            "casing": {}
+          },
+          {
+            "generatedName": "EGP",
+            "value": "EGP",
+            "casing": {}
+          },
+          {
+            "generatedName": "MAD",
+            "value": "MAD",
+            "casing": {}
+          },
+          {
+            "generatedName": "ERN",
+            "value": "ERN",
+            "casing": {}
+          },
+          {
+            "generatedName": "ETB",
+            "value": "ETB",
+            "casing": {}
+          },
+          {
+            "generatedName": "FJD",
+            "value": "FJD",
+            "casing": {}
+          },
+          {
+            "generatedName": "FKP",
+            "value": "FKP",
+            "casing": {}
+          },
+          {
+            "generatedName": "GBP",
+            "value": "GBP",
+            "casing": {}
+          },
+          {
+            "generatedName": "GEL",
+            "value": "GEL",
+            "casing": {}
+          },
+          {
+            "generatedName": "GHS",
+            "value": "GHS",
+            "casing": {}
+          },
+          {
+            "generatedName": "GIP",
+            "value": "GIP",
+            "casing": {}
+          },
+          {
+            "generatedName": "GMD",
+            "value": "GMD",
+            "casing": {}
+          },
+          {
+            "generatedName": "GNF",
+            "value": "GNF",
+            "casing": {}
+          },
+          {
+            "generatedName": "GTQ",
+            "value": "GTQ",
+            "casing": {}
+          },
+          {
+            "generatedName": "GYD",
+            "value": "GYD",
+            "casing": {}
+          },
+          {
+            "generatedName": "HKD",
+            "value": "HKD",
+            "casing": {}
+          },
+          {
+            "generatedName": "HNL",
+            "value": "HNL",
+            "casing": {}
+          },
+          {
+            "generatedName": "HUF",
+            "value": "HUF",
+            "casing": {}
+          },
+          {
+            "generatedName": "IDR",
+            "value": "IDR",
+            "casing": {}
+          },
+          {
+            "generatedName": "ILS",
+            "value": "ILS",
+            "casing": {}
+          },
+          {
+            "generatedName": "IQD",
+            "value": "IQD",
+            "casing": {}
+          },
+          {
+            "generatedName": "IRR",
+            "value": "IRR",
+            "casing": {}
+          },
+          {
+            "generatedName": "ISK",
+            "value": "ISK",
+            "casing": {}
+          },
+          {
+            "generatedName": "JMD",
+            "value": "JMD",
+            "casing": {}
+          },
+          {
+            "generatedName": "JOD",
+            "value": "JOD",
+            "casing": {}
+          },
+          {
+            "generatedName": "JPY",
+            "value": "JPY",
+            "casing": {}
+          },
+          {
+            "generatedName": "KES",
+            "value": "KES",
+            "casing": {}
+          },
+          {
+            "generatedName": "KGS",
+            "value": "KGS",
+            "casing": {}
+          },
+          {
+            "generatedName": "KHR",
+            "value": "KHR",
+            "casing": {}
+          },
+          {
+            "generatedName": "KMF",
+            "value": "KMF",
+            "casing": {}
+          },
+          {
+            "generatedName": "KPW",
+            "value": "KPW",
+            "casing": {}
+          },
+          {
+            "generatedName": "KRW",
+            "value": "KRW",
+            "casing": {}
+          },
+          {
+            "generatedName": "KWD",
+            "value": "KWD",
+            "casing": {}
+          },
+          {
+            "generatedName": "KYD",
+            "value": "KYD",
+            "casing": {}
+          },
+          {
+            "generatedName": "KZT",
+            "value": "KZT",
+            "casing": {}
+          },
+          {
+            "generatedName": "LAK",
+            "value": "LAK",
+            "casing": {}
+          },
+          {
+            "generatedName": "LBP",
+            "value": "LBP",
+            "casing": {}
+          },
+          {
+            "generatedName": "LKR",
+            "value": "LKR",
+            "casing": {}
+          },
+          {
+            "generatedName": "LRD",
+            "value": "LRD",
+            "casing": {}
+          },
+          {
+            "generatedName": "ZAR",
+            "value": "ZAR",
+            "casing": {}
+          },
+          {
+            "generatedName": "LYD",
+            "value": "LYD",
+            "casing": {}
+          },
+          {
+            "generatedName": "MDL",
+            "value": "MDL",
+            "casing": {}
+          },
+          {
+            "generatedName": "MGA",
+            "value": "MGA",
+            "casing": {}
+          },
+          {
+            "generatedName": "MKD",
+            "value": "MKD",
+            "casing": {}
+          },
+          {
+            "generatedName": "MMK",
+            "value": "MMK",
+            "casing": {}
+          },
+          {
+            "generatedName": "MNT",
+            "value": "MNT",
+            "casing": {}
+          },
+          {
+            "generatedName": "MOP",
+            "value": "MOP",
+            "casing": {}
+          },
+          {
+            "generatedName": "MRO",
+            "value": "MRO",
+            "casing": {}
+          },
+          {
+            "generatedName": "MUR",
+            "value": "MUR",
+            "casing": {}
+          },
+          {
+            "generatedName": "MVR",
+            "value": "MVR",
+            "casing": {}
+          },
+          {
+            "generatedName": "MWK",
+            "value": "MWK",
+            "casing": {}
+          },
+          {
+            "generatedName": "MXN",
+            "value": "MXN",
+            "casing": {}
+          },
+          {
+            "generatedName": "MYR",
+            "value": "MYR",
+            "casing": {}
+          },
+          {
+            "generatedName": "MZN",
+            "value": "MZN",
+            "casing": {}
+          },
+          {
+            "generatedName": "XPF",
+            "value": "XPF",
+            "casing": {}
+          },
+          {
+            "generatedName": "NGN",
+            "value": "NGN",
+            "casing": {}
+          },
+          {
+            "generatedName": "NIO",
+            "value": "NIO",
+            "casing": {}
+          },
+          {
+            "generatedName": "NPR",
+            "value": "NPR",
+            "casing": {}
+          },
+          {
+            "generatedName": "OMR",
+            "value": "OMR",
+            "casing": {}
+          },
+          {
+            "generatedName": "PEN",
+            "value": "PEN",
+            "casing": {}
+          },
+          {
+            "generatedName": "PGK",
+            "value": "PGK",
+            "casing": {}
+          },
+          {
+            "generatedName": "PHP",
+            "value": "PHP",
+            "casing": {}
+          },
+          {
+            "generatedName": "PKR",
+            "value": "PKR",
+            "casing": {}
+          },
+          {
+            "generatedName": "PLN",
+            "value": "PLN",
+            "casing": {}
+          },
+          {
+            "generatedName": "PYG",
+            "value": "PYG",
+            "casing": {}
+          },
+          {
+            "generatedName": "QAR",
+            "value": "QAR",
+            "casing": {}
+          },
+          {
+            "generatedName": "RON",
+            "value": "RON",
+            "casing": {}
+          },
+          {
+            "generatedName": "RSD",
+            "value": "RSD",
+            "casing": {}
+          },
+          {
+            "generatedName": "RUB",
+            "value": "RUB",
+            "casing": {}
+          },
+          {
+            "generatedName": "RWF",
+            "value": "RWF",
+            "casing": {}
+          },
+          {
+            "generatedName": "SAR",
+            "value": "SAR",
+            "casing": {}
+          },
+          {
+            "generatedName": "SBD",
+            "value": "SBD",
+            "casing": {}
+          },
+          {
+            "generatedName": "SCR",
+            "value": "SCR",
+            "casing": {}
+          },
+          {
+            "generatedName": "SDG",
+            "value": "SDG",
+            "casing": {}
+          },
+          {
+            "generatedName": "SEK",
+            "value": "SEK",
+            "casing": {}
+          },
+          {
+            "generatedName": "SGD",
+            "value": "SGD",
+            "casing": {}
+          },
+          {
+            "generatedName": "SHP",
+            "value": "SHP",
+            "casing": {}
+          },
+          {
+            "generatedName": "SLL",
+            "value": "SLL",
+            "casing": {}
+          },
+          {
+            "generatedName": "SOS",
+            "value": "SOS",
+            "casing": {}
+          },
+          {
+            "generatedName": "SRD",
+            "value": "SRD",
+            "casing": {}
+          },
+          {
+            "generatedName": "SSP",
+            "value": "SSP",
+            "casing": {}
+          },
+          {
+            "generatedName": "STD",
+            "value": "STD",
+            "casing": {}
+          },
+          {
+            "generatedName": "SYP",
+            "value": "SYP",
+            "casing": {}
+          },
+          {
+            "generatedName": "SZL",
+            "value": "SZL",
+            "casing": {}
+          },
+          {
+            "generatedName": "THB",
+            "value": "THB",
+            "casing": {}
+          },
+          {
+            "generatedName": "TJS",
+            "value": "TJS",
+            "casing": {}
+          },
+          {
+            "generatedName": "TMT",
+            "value": "TMT",
+            "casing": {}
+          },
+          {
+            "generatedName": "TND",
+            "value": "TND",
+            "casing": {}
+          },
+          {
+            "generatedName": "TOP",
+            "value": "TOP",
+            "casing": {}
+          },
+          {
+            "generatedName": "TRY",
+            "value": "TRY",
+            "casing": {}
+          },
+          {
+            "generatedName": "TTD",
+            "value": "TTD",
+            "casing": {}
+          },
+          {
+            "generatedName": "TWD",
+            "value": "TWD",
+            "casing": {}
+          },
+          {
+            "generatedName": "TZS",
+            "value": "TZS",
+            "casing": {}
+          },
+          {
+            "generatedName": "UAH",
+            "value": "UAH",
+            "casing": {}
+          },
+          {
+            "generatedName": "UGX",
+            "value": "UGX",
+            "casing": {}
+          },
+          {
+            "generatedName": "UYU",
+            "value": "UYU",
+            "casing": {}
+          },
+          {
+            "generatedName": "UZS",
+            "value": "UZS",
+            "casing": {}
+          },
+          {
+            "generatedName": "VEF",
+            "value": "VEF",
+            "casing": {}
+          },
+          {
+            "generatedName": "VND",
+            "value": "VND",
+            "casing": {}
+          },
+          {
+            "generatedName": "VUV",
+            "value": "VUV",
+            "casing": {}
+          },
+          {
+            "generatedName": "WST",
+            "value": "WST",
+            "casing": {}
+          },
+          {
+            "generatedName": "YER",
+            "value": "YER",
+            "casing": {}
+          },
+          {
+            "generatedName": "ZMW",
+            "value": "ZMW",
+            "casing": {}
+          },
+          {
+            "generatedName": "ZWL",
+            "value": "ZWL",
+            "casing": {}
+          },
+          {
+            "generatedName": "HRK",
+            "value": "HRK",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "CustomCategorySet": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "customCategorySetIncoming",
+            "key": "incoming",
+            "schema": {
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CustomCategorySetIncomingItem",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "generatedName": "CustomCategorySetIncoming",
+              "nameOverride": "Incoming",
+              "title": "Incoming",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "customCategorySetOutgoing",
+            "key": "outgoing",
+            "schema": {
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "CustomCategorySetOutgoingItem",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "generatedName": "CustomCategorySetOutgoing",
+              "nameOverride": "Outgoing",
+              "title": "Outgoing",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "CustomCategorySet",
+        "nameOverride": "CustomCategorySet",
+        "title": "CustomCategorySet",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "DocumentStatus": {
+        "description": "An enumeration.",
+        "generatedName": "DocumentStatus",
+        "nameOverride": "DocumentStatus",
+        "title": "DocumentStatus",
+        "values": [
+          {
+            "generatedName": "queued",
+            "value": "queued",
+            "casing": {}
+          },
+          {
+            "generatedName": "processing",
+            "value": "processing",
+            "casing": {}
+          },
+          {
+            "generatedName": "processed",
+            "value": "processed",
+            "casing": {}
+          },
+          {
+            "generatedName": "failed",
+            "value": "failed",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "EnrichedTransaction": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "enrichedTransactionEntities",
+            "key": "entities",
+            "schema": {
+              "generatedName": "enrichedTransactionEntities",
+              "nameOverride": "EnrichedTransaction",
+              "title": "EnrichedTransaction",
+              "value": {
+                "generatedName": "EnrichedTransactionEntities",
+                "schema": "Entities",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "enrichedTransactionCategories",
+            "key": "categories",
+            "schema": {
+              "generatedName": "enrichedTransactionCategories",
+              "nameOverride": "EnrichedTransaction",
+              "title": "EnrichedTransaction",
+              "value": {
+                "generatedName": "EnrichedTransactionCategories",
+                "schema": "Categories",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "enrichedTransactionLocation",
+            "key": "location",
+            "schema": {
+              "generatedName": "enrichedTransactionLocation",
+              "nameOverride": "EnrichedTransaction",
+              "title": "EnrichedTransaction",
+              "value": {
+                "generatedName": "EnrichedTransactionLocation",
+                "schema": "Location",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "enrichedTransactionError",
+            "key": "error",
+            "schema": {
+              "generatedName": "enrichedTransactionError",
+              "nameOverride": "EnrichedTransaction",
+              "title": "EnrichedTransaction",
+              "value": {
+                "generatedName": "EnrichedTransactionError",
+                "schema": "TransactionError",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "enrichedTransactionCreatedAt",
+            "key": "created_at",
+            "schema": {
+              "description": "The timestamp of when the account holder was created.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "EnrichedTransactionCreatedAt",
+              "title": "Created At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "enrichedTransactionId",
+            "key": "id",
+            "schema": {
+              "description": "A unique identifier for the transaction. If two transactions are submitted with the same `id` the most recent one will replace the previous one.",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "EnrichedTransactionId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "EnrichedTransaction",
+        "nameOverride": "EnrichedTransaction",
+        "title": "EnrichedTransaction",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "EnrichmentResult": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "enrichmentResultTransactions",
+            "key": "transactions",
+            "schema": {
+              "description": "A list of enriched transactions resulting from the enrichment of this batch.",
+              "value": {
+                "generatedName": "EnrichmentResultTransactionsItem",
+                "schema": "EnrichedTransaction",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "EnrichmentResultTransactions",
+              "nameOverride": "Transactions",
+              "title": "Transactions",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "EnrichmentResult",
+        "nameOverride": "EnrichmentResult",
+        "title": "EnrichmentResult",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Entities": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "entitiesCounterparty",
+            "key": "counterparty",
+            "schema": {
+              "generatedName": "entitiesCounterparty",
+              "nameOverride": "Entities",
+              "title": "Entities",
+              "value": {
+                "generatedName": "EntitiesCounterparty",
+                "schema": "Counterparty",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "entitiesIntermediaries",
+            "key": "intermediaries",
+            "schema": {
+              "generatedName": "entitiesIntermediaries",
+              "nameOverride": "Entities",
+              "title": "Entities",
+              "value": {
+                "value": {
+                  "generatedName": "EntitiesIntermediariesItem",
+                  "schema": "Intermediary",
+                  "source": {
+                    "file": "../openapi.yml",
+                    "type": "openapi"
+                  },
+                  "type": "reference"
+                },
+                "generatedName": "EntitiesIntermediaries",
+                "nameOverride": "Intermediaries",
+                "title": "Intermediaries",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "description": "Entities found by identity identification",
+        "generatedName": "Entities",
+        "nameOverride": "Entities",
+        "title": "Entities",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Entity": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "entityId",
+            "key": "id",
+            "schema": {
+              "generatedName": "entityId",
+              "nameOverride": "Entity",
+              "title": "Entity",
+              "value": {
+                "description": "The unique UUID identifier of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "EntityId",
+                "nameOverride": "Id",
+                "title": "Id",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "entityName",
+            "key": "name",
+            "schema": {
+              "generatedName": "entityName",
+              "nameOverride": "Entity",
+              "title": "Entity",
+              "value": {
+                "description": "The name of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "EntityName",
+                "nameOverride": "Name",
+                "title": "Name",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "entityWebsite",
+            "key": "website",
+            "schema": {
+              "generatedName": "entityWebsite",
+              "nameOverride": "Entity",
+              "title": "Entity",
+              "value": {
+                "description": "The website URL of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "EntityWebsite",
+                "nameOverride": "Website",
+                "title": "Website",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "entityLogo",
+            "key": "logo",
+            "schema": {
+              "generatedName": "entityLogo",
+              "nameOverride": "Entity",
+              "title": "Entity",
+              "value": {
+                "description": "Logo's URL",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "EntityLogo",
+                "nameOverride": "Logo",
+                "title": "Logo",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "entityMccs",
+            "key": "mccs",
+            "schema": {
+              "generatedName": "entityMccs",
+              "nameOverride": "Entity",
+              "title": "Entity",
+              "value": {
+                "description": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "value": {
+                  "schema": {
+                    "type": "int"
+                  },
+                  "generatedName": "EntityMccsItem",
+                  "groupName": [],
+                  "type": "primitive"
+                },
+                "generatedName": "EntityMccs",
+                "nameOverride": "Mccs",
+                "title": "Mccs",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Entity",
+        "nameOverride": "Entity",
+        "title": "Entity",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "EntryType": {
+        "description": "An enumeration.",
+        "generatedName": "EntryType",
+        "nameOverride": "EntryType",
+        "title": "EntryType",
+        "values": [
+          {
+            "generatedName": "incoming",
+            "value": "incoming",
+            "casing": {}
+          },
+          {
+            "generatedName": "outgoing",
+            "value": "outgoing",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "FilterModel": {
+        "generatedName": "FilterModel",
+        "schema": "personalization",
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "reference"
+      },
+      "HTTPValidationError": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "httpValidationErrorDetail",
+            "key": "detail",
+            "schema": {
+              "generatedName": "httpValidationErrorDetail",
+              "nameOverride": "HTTPValidationError",
+              "title": "HTTPValidationError",
+              "value": {
+                "value": {
+                  "generatedName": "HttpValidationErrorDetailItem",
+                  "schema": "ValidationError",
+                  "source": {
+                    "file": "../openapi.yml",
+                    "type": "openapi"
+                  },
+                  "type": "reference"
+                },
+                "generatedName": "HttpValidationErrorDetail",
+                "nameOverride": "Detail",
+                "title": "Detail",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "HttpValidationError",
+        "nameOverride": "HTTPValidationError",
+        "title": "HTTPValidationError",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Intermediary": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "intermediaryId",
+            "key": "id",
+            "schema": {
+              "generatedName": "intermediaryId",
+              "nameOverride": "Intermediary",
+              "title": "Intermediary",
+              "value": {
+                "description": "The unique UUID identifier of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "IntermediaryId",
+                "nameOverride": "Id",
+                "title": "Id",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "intermediaryName",
+            "key": "name",
+            "schema": {
+              "generatedName": "intermediaryName",
+              "nameOverride": "Intermediary",
+              "title": "Intermediary",
+              "value": {
+                "description": "The name of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "IntermediaryName",
+                "nameOverride": "Name",
+                "title": "Name",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "intermediaryWebsite",
+            "key": "website",
+            "schema": {
+              "generatedName": "intermediaryWebsite",
+              "nameOverride": "Intermediary",
+              "title": "Intermediary",
+              "value": {
+                "description": "The website URL of the entity",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "IntermediaryWebsite",
+                "nameOverride": "Website",
+                "title": "Website",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "intermediaryLogo",
+            "key": "logo",
+            "schema": {
+              "generatedName": "intermediaryLogo",
+              "nameOverride": "Intermediary",
+              "title": "Intermediary",
+              "value": {
+                "description": "Logo's URL",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "IntermediaryLogo",
+                "nameOverride": "Logo",
+                "title": "Logo",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "intermediaryMccs",
+            "key": "mccs",
+            "schema": {
+              "generatedName": "intermediaryMccs",
+              "nameOverride": "Intermediary",
+              "title": "Intermediary",
+              "value": {
+                "description": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "value": {
+                  "schema": {
+                    "type": "int"
+                  },
+                  "generatedName": "IntermediaryMccsItem",
+                  "groupName": [],
+                  "type": "primitive"
+                },
+                "generatedName": "IntermediaryMccs",
+                "nameOverride": "Mccs",
+                "title": "Mccs",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "intermediaryType",
+            "key": "type",
+            "schema": {
+              "generatedName": "IntermediaryType",
+              "schema": "IntermediaryType",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Intermediary",
+        "nameOverride": "Intermediary",
+        "title": "Intermediary",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "IntermediaryType": {
+        "description": "An enumeration.",
+        "generatedName": "IntermediaryType",
+        "nameOverride": "IntermediaryType",
+        "title": "IntermediaryType",
+        "values": [
+          {
+            "generatedName": "delivery_service",
+            "value": "delivery_service",
+            "casing": {}
+          },
+          {
+            "generatedName": "payment_processor",
+            "value": "payment_processor",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "Location": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "locationRawAddress",
+            "key": "raw_address",
+            "schema": {
+              "generatedName": "locationRawAddress",
+              "nameOverride": "Location",
+              "title": "Location",
+              "value": {
+                "description": "An unstructured string containing the address",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationRawAddress",
+                "title": "Raw Address",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructured",
+            "key": "structured",
+            "schema": {
+              "generatedName": "locationStructured",
+              "nameOverride": "Location",
+              "title": "Location",
+              "value": {
+                "description": "When raw is set, a structured representation of it.",
+                "generatedName": "LocationStructured",
+                "schema": "LocationStructured",
+                "groupName": [],
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Location",
+        "nameOverride": "Location",
+        "title": "Location",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "LocationInput": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "locationInputRawAddress",
+            "key": "raw_address",
+            "schema": {
+              "generatedName": "locationInputRawAddress",
+              "nameOverride": "LocationInput",
+              "title": "LocationInput",
+              "value": {
+                "description": "An unstructured string containing the address",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationInputRawAddress",
+                "title": "Raw Address",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationInputCountry",
+            "key": "country",
+            "schema": {
+              "description": "The country where the transaction was made in ISO 3166-2 format",
+              "generatedName": "LocationInputCountry",
+              "schema": "Country",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "description": "Location of where the transaction has taken place. This can greatly improve entity identification, especially\nunder ambiguity.",
+        "generatedName": "LocationInput",
+        "nameOverride": "LocationInput",
+        "title": "LocationInput",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "LocationStructured": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredStreet",
+            "key": "street",
+            "schema": {
+              "generatedName": "locationStructuredStreet",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The street name and number of the location",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredStreet",
+                "nameOverride": "Street",
+                "title": "Street",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredCity",
+            "key": "city",
+            "schema": {
+              "generatedName": "locationStructuredCity",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The city where the location is situated",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredCity",
+                "nameOverride": "City",
+                "title": "City",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredState",
+            "key": "state",
+            "schema": {
+              "generatedName": "locationStructuredState",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The state or region of the location",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredState",
+                "nameOverride": "State",
+                "title": "State",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredPostcode",
+            "key": "postcode",
+            "schema": {
+              "generatedName": "locationStructuredPostcode",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The postal code or ZIP code of the location",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredPostcode",
+                "nameOverride": "Postcode",
+                "title": "Postcode",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredCountryCode",
+            "key": "country_code",
+            "schema": {
+              "generatedName": "locationStructuredCountryCode",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The country code of the location in ISO 3166-2 format",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredCountryCode",
+                "title": "Country Code",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredCountry",
+            "key": "country",
+            "schema": {
+              "generatedName": "locationStructuredCountry",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The full name of the country",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredCountry",
+                "nameOverride": "Country",
+                "title": "Country",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredLatitude",
+            "key": "latitude",
+            "schema": {
+              "generatedName": "locationStructuredLatitude",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The latitude coordinate of the location",
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "LocationStructuredLatitude",
+                "nameOverride": "Latitude",
+                "title": "Latitude",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredLongitude",
+            "key": "longitude",
+            "schema": {
+              "generatedName": "locationStructuredLongitude",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "The longitude coordinate of the location",
+                "schema": {
+                  "type": "double"
+                },
+                "generatedName": "LocationStructuredLongitude",
+                "nameOverride": "Longitude",
+                "title": "Longitude",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredGoogleMapsUrl",
+            "key": "google_maps_url",
+            "schema": {
+              "generatedName": "locationStructuredGoogleMapsUrl",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "A URL link to view the location on Google Maps",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredGoogleMapsUrl",
+                "title": "Google Maps Url",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredAppleMapsUrl",
+            "key": "apple_maps_url",
+            "schema": {
+              "generatedName": "locationStructuredAppleMapsUrl",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "A URL link to view the location on Apple Maps",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredAppleMapsUrl",
+                "title": "Apple Maps Url",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "locationStructuredStoreNumber",
+            "key": "store_number",
+            "schema": {
+              "generatedName": "locationStructuredStoreNumber",
+              "nameOverride": "LocationStructured",
+              "title": "LocationStructured",
+              "value": {
+                "description": "A unique identifier for a specific store or branch, if applicable",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "LocationStructuredStoreNumber",
+                "title": "Store Number",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "LocationStructured",
+        "nameOverride": "LocationStructured",
+        "title": "LocationStructured",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "PagedResponse_AccountHolderExternal": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseAccountHolderExternalNextCursor",
+            "key": "next_cursor",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "PagedResponseAccountHolderExternalNextCursor",
+              "title": "Next Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseAccountHolderExternalData",
+            "key": "data",
+            "schema": {
+              "value": {
+                "generatedName": "PagedResponseAccountHolderExternalDataItem",
+                "schema": "AccountHolderExternal",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "PagedResponseAccountHolderExternalData",
+              "nameOverride": "Data",
+              "title": "Data",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "PagedResponseAccountHolderExternal",
+        "title": "PagedResponse_AccountHolderExternal",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "PagedResponse_BankStatement": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseBankStatementNextCursor",
+            "key": "next_cursor",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "PagedResponseBankStatementNextCursor",
+              "title": "Next Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseBankStatementData",
+            "key": "data",
+            "schema": {
+              "value": {
+                "generatedName": "PagedResponseBankStatementDataItem",
+                "schema": "BankStatement",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "PagedResponseBankStatementData",
+              "nameOverride": "Data",
+              "title": "Data",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "PagedResponseBankStatement",
+        "title": "PagedResponse_BankStatement",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "PagedResponse_Batch": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseBatchNextCursor",
+            "key": "next_cursor",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "PagedResponseBatchNextCursor",
+              "title": "Next Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseBatchData",
+            "key": "data",
+            "schema": {
+              "value": {
+                "generatedName": "PagedResponseBatchDataItem",
+                "schema": "Batch",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "PagedResponseBatchData",
+              "nameOverride": "Data",
+              "title": "Data",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "PagedResponseBatch",
+        "title": "PagedResponse_Batch",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "PagedResponse_Report_": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseReportNextCursor",
+            "key": "next_cursor",
+            "schema": {
+              "generatedName": "pagedResponseReportNextCursor",
+              "title": "PagedResponse[Report]",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "PagedResponseReportNextCursor",
+                "title": "Next Cursor",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseReportData",
+            "key": "data",
+            "schema": {
+              "value": {
+                "generatedName": "PagedResponseReportDataItem",
+                "schema": "Report",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "PagedResponseReportData",
+              "nameOverride": "Data",
+              "title": "Data",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "PagedResponseReport",
+        "title": "PagedResponse[Report]",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "PagedResponse_Transaction": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseTransactionNextCursor",
+            "key": "next_cursor",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "PagedResponseTransactionNextCursor",
+              "title": "Next Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseTransactionData",
+            "key": "data",
+            "schema": {
+              "value": {
+                "generatedName": "PagedResponseTransactionDataItem",
+                "schema": "Transaction",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "PagedResponseTransactionData",
+              "nameOverride": "Data",
+              "title": "Data",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "PagedResponseTransaction",
+        "title": "PagedResponse_Transaction",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "PagedResponse_Webhook": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseWebhookNextCursor",
+            "key": "next_cursor",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "PagedResponseWebhookNextCursor",
+              "title": "Next Cursor",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "pagedResponseWebhookData",
+            "key": "data",
+            "schema": {
+              "value": {
+                "generatedName": "PagedResponseWebhookDataItem",
+                "schema": "Webhook",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "PagedResponseWebhookData",
+              "nameOverride": "Data",
+              "title": "Data",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "PagedResponseWebhook",
+        "title": "PagedResponse_Webhook",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Recurrence": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "recurrenceType",
+            "key": "type",
+            "schema": {
+              "description": "Whether the transaction is a one-time transfer `one-off`, regularly with varying pricing `recurring` or with fixed pricing `subscription`",
+              "generatedName": "RecurrenceType",
+              "schema": "RecurrenceType",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "description": "The `Recurrence` object represents the recurrence pattern of a transaction. It provides information about\nwhether a transaction is a one-time event or a part of a recurring series.",
+        "generatedName": "Recurrence",
+        "nameOverride": "Recurrence",
+        "title": "Recurrence",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "RecurrenceGroup": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupId",
+            "key": "id",
+            "schema": {
+              "description": "A unique UUID identifier for the group",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "RecurrenceGroupId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupStartDate",
+            "key": "start_date",
+            "schema": {
+              "description": "The date of the oldest transaction in the group",
+              "schema": {
+                "format": "date",
+                "type": "string"
+              },
+              "generatedName": "RecurrenceGroupStartDate",
+              "title": "Start Date",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupEndDate",
+            "key": "end_date",
+            "schema": {
+              "description": "The date of the most recent transaction in the group",
+              "schema": {
+                "format": "date",
+                "type": "string"
+              },
+              "generatedName": "RecurrenceGroupEndDate",
+              "title": "End Date",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupTotalAmount",
+            "key": "total_amount",
+            "schema": {
+              "description": "The sum of all transaction amounts in this group",
+              "schema": {
+                "type": "double"
+              },
+              "generatedName": "RecurrenceGroupTotalAmount",
+              "title": "Total Amount",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupAverageAmount",
+            "key": "average_amount",
+            "schema": {
+              "description": "The average amount per transaction in this group",
+              "schema": {
+                "type": "double"
+              },
+              "generatedName": "RecurrenceGroupAverageAmount",
+              "title": "Average Amount",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupPeriodicityInDays",
+            "key": "periodicity_in_days",
+            "schema": {
+              "description": "The estimated number of days between transactions in this group",
+              "schema": {
+                "type": "double"
+              },
+              "generatedName": "RecurrenceGroupPeriodicityInDays",
+              "title": "Periodicity In Days",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupPeriodicity",
+            "key": "periodicity",
+            "schema": {
+              "description": "A human-readable description of the transaction frequency",
+              "generatedName": "RecurrenceGroupPeriodicity",
+              "schema": "RecurrencePeriodicity",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupCounterparty",
+            "key": "counterparty",
+            "schema": {
+              "description": "Counterparty of the transactions",
+              "generatedName": "RecurrenceGroupCounterparty",
+              "schema": "Counterparty",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupCategories",
+            "key": "categories",
+            "schema": {
+              "description": "Categories of the transactions in the recurrence group",
+              "generatedName": "RecurrenceGroupCategories",
+              "schema": "Categories",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "recurrenceGroupTransactionIds",
+            "key": "transaction_ids",
+            "schema": {
+              "description": "Transactions in this recurrence group",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "RecurrenceGroupTransactionIdsItem",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "generatedName": "RecurrenceGroupTransactionIds",
+              "title": "Transaction Ids",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "RecurrenceGroup",
+        "nameOverride": "RecurrenceGroup",
+        "title": "RecurrenceGroup",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "RecurrencePeriodicity": {
+        "description": "An enumeration.",
+        "generatedName": "RecurrencePeriodicity",
+        "nameOverride": "RecurrencePeriodicity",
+        "title": "RecurrencePeriodicity",
+        "values": [
+          {
+            "generatedName": "daily",
+            "value": "daily",
+            "casing": {}
+          },
+          {
+            "generatedName": "weekly",
+            "value": "weekly",
+            "casing": {}
+          },
+          {
+            "generatedName": "bi_weekly",
+            "value": "bi_weekly",
+            "casing": {}
+          },
+          {
+            "generatedName": "monthly",
+            "value": "monthly",
+            "casing": {}
+          },
+          {
+            "generatedName": "bi_monthly",
+            "value": "bi_monthly",
+            "casing": {}
+          },
+          {
+            "generatedName": "quarterly",
+            "value": "quarterly",
+            "casing": {}
+          },
+          {
+            "generatedName": "semi_yearly",
+            "value": "semi_yearly",
+            "casing": {}
+          },
+          {
+            "generatedName": "yearly",
+            "value": "yearly",
+            "casing": {}
+          },
+          {
+            "generatedName": "other",
+            "value": "other",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "RecurrenceType": {
+        "description": "An enumeration.",
+        "generatedName": "RecurrenceType",
+        "nameOverride": "RecurrenceType",
+        "title": "RecurrenceType",
+        "values": [
+          {
+            "generatedName": "recurring",
+            "value": "recurring",
+            "casing": {}
+          },
+          {
+            "generatedName": "subscription",
+            "value": "subscription",
+            "casing": {}
+          },
+          {
+            "generatedName": "OneOff",
+            "value": "one off",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "Report": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "reportTransactionId",
+            "key": "transaction_id",
+            "schema": {
+              "description": "The unique identifier of the transaction",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "ReportTransactionId",
+              "title": "Transaction Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportDescription",
+            "key": "description",
+            "schema": {
+              "description": "A description of what is wrong in the transaction",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "ReportDescription",
+              "nameOverride": "Description",
+              "title": "Description",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportFields",
+            "key": "fields",
+            "schema": {
+              "description": "A list of the fields that are incorrect",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "ReportFieldsItem",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "generatedName": "ReportFields",
+              "nameOverride": "Fields",
+              "title": "Fields",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportId",
+            "key": "id",
+            "schema": {
+              "description": "A generated unique identifier for the report.",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "ReportId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportCreatedAt",
+            "key": "created_at",
+            "schema": {
+              "description": "The date and time when the report was created.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "ReportCreatedAt",
+              "title": "Created At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportStatus",
+            "key": "status",
+            "schema": {
+              "description": "The status of the report.\n\n* `open`: a newly created report\n* `pending`: the report is being investigated\n* `rejected`: the original enrichment output was deemed correct or we couldn't resolve it, check `rejection_reason`\n* `resolved`: the issue has been resolved",
+              "generatedName": "ReportStatus",
+              "schema": "ReportStatus",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportRejectionReason",
+            "key": "rejection_reason",
+            "schema": {
+              "generatedName": "reportRejectionReason",
+              "nameOverride": "Report",
+              "title": "Report",
+              "value": {
+                "description": "An explanation of why the report was rejected",
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "ReportRejectionReason",
+                "title": "Rejection Reason",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Report",
+        "nameOverride": "Report",
+        "title": "Report",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "ReportBase": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "reportBaseTransactionId",
+            "key": "transaction_id",
+            "schema": {
+              "description": "The unique identifier of the transaction",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "ReportBaseTransactionId",
+              "title": "Transaction Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportBaseDescription",
+            "key": "description",
+            "schema": {
+              "description": "A description of what is wrong in the transaction",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "ReportBaseDescription",
+              "nameOverride": "Description",
+              "title": "Description",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "reportBaseFields",
+            "key": "fields",
+            "schema": {
+              "description": "A list of the fields that are incorrect",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "ReportBaseFieldsItem",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "generatedName": "ReportBaseFields",
+              "nameOverride": "Fields",
+              "title": "Fields",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "ReportBase",
+        "nameOverride": "ReportBase",
+        "title": "ReportBase",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "ReportStatus": {
+        "description": "An enumeration.",
+        "generatedName": "ReportStatus",
+        "nameOverride": "ReportStatus",
+        "title": "ReportStatus",
+        "values": [
+          {
+            "generatedName": "open",
+            "value": "open",
+            "casing": {}
+          },
+          {
+            "generatedName": "pending",
+            "value": "pending",
+            "casing": {}
+          },
+          {
+            "generatedName": "resolved",
+            "value": "resolved",
+            "casing": {}
+          },
+          {
+            "generatedName": "rejected",
+            "value": "rejected",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "StatementInfo": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "statementInfoInstitution",
+            "key": "institution",
+            "schema": {
+              "generatedName": "statementInfoInstitution",
+              "nameOverride": "StatementInfo",
+              "title": "StatementInfo",
+              "value": {
+                "schema": {
+                  "type": "string"
+                },
+                "generatedName": "StatementInfoInstitution",
+                "nameOverride": "Institution",
+                "title": "Institution",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "statementInfoStartDate",
+            "key": "start_date",
+            "schema": {
+              "generatedName": "statementInfoStartDate",
+              "nameOverride": "StatementInfo",
+              "title": "StatementInfo",
+              "value": {
+                "schema": {
+                  "format": "date",
+                  "type": "string"
+                },
+                "generatedName": "StatementInfoStartDate",
+                "title": "Start Date",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "statementInfoEndDate",
+            "key": "end_date",
+            "schema": {
+              "generatedName": "statementInfoEndDate",
+              "nameOverride": "StatementInfo",
+              "title": "StatementInfo",
+              "value": {
+                "schema": {
+                  "format": "date",
+                  "type": "string"
+                },
+                "generatedName": "StatementInfoEndDate",
+                "title": "End Date",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "statementInfoAccountHolder",
+            "key": "account_holder",
+            "schema": {
+              "generatedName": "statementInfoAccountHolder",
+              "nameOverride": "StatementInfo",
+              "title": "StatementInfo",
+              "value": {
+                "generatedName": "StatementInfoAccountHolder",
+                "schema": "AccountHolder",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "statementInfoAccounts",
+            "key": "accounts",
+            "schema": {
+              "generatedName": "statementInfoAccounts",
+              "nameOverride": "StatementInfo",
+              "title": "StatementInfo",
+              "value": {
+                "value": {
+                  "generatedName": "StatementInfoAccountsItem",
+                  "schema": "Account",
+                  "source": {
+                    "file": "../openapi.yml",
+                    "type": "openapi"
+                  },
+                  "type": "reference"
+                },
+                "generatedName": "StatementInfoAccounts",
+                "nameOverride": "Accounts",
+                "title": "Accounts",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "StatementInfo",
+        "nameOverride": "StatementInfo",
+        "title": "StatementInfo",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "SyncEnrichmentInput": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "syncEnrichmentInputTransactions",
+            "key": "transactions",
+            "schema": {
+              "value": {
+                "generatedName": "SyncEnrichmentInputTransactionsItem",
+                "schema": "TransactionInput",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "SyncEnrichmentInputTransactions",
+              "nameOverride": "Transactions",
+              "title": "Transactions",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "SyncEnrichmentInput",
+        "nameOverride": "SyncEnrichmentInput",
+        "title": "SyncEnrichmentInput",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "SyncEnrichmentOutput": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "syncEnrichmentOutputTransactions",
+            "key": "transactions",
+            "schema": {
+              "description": "A list of enriched transactions resulting from the enrichment of this batch.",
+              "value": {
+                "generatedName": "SyncEnrichmentOutputTransactionsItem",
+                "schema": "EnrichedTransaction",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "generatedName": "SyncEnrichmentOutputTransactions",
+              "nameOverride": "Transactions",
+              "title": "Transactions",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "SyncEnrichmentOutput",
+        "nameOverride": "SyncEnrichmentOutput",
+        "title": "SyncEnrichmentOutput",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Transaction": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "transactionId",
+            "key": "id",
+            "schema": {
+              "description": "A unique identifier of the transaction",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "TransactionId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionDescription",
+            "key": "description",
+            "schema": {
+              "description": "The description string of the transaction",
+              "schema": {
+                "minLength": 0,
+                "maxLength": 1024,
+                "type": "string"
+              },
+              "generatedName": "TransactionDescription",
+              "nameOverride": "Description",
+              "title": "Description",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionDate",
+            "key": "date",
+            "schema": {
+              "description": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+              "schema": {
+                "format": "date",
+                "type": "string"
+              },
+              "generatedName": "TransactionDate",
+              "nameOverride": "Date",
+              "title": "Date",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionAmount",
+            "key": "amount",
+            "schema": {
+              "description": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+              "schema": {
+                "minimum": 0,
+                "type": "double"
+              },
+              "generatedName": "TransactionAmount",
+              "nameOverride": "Amount",
+              "title": "Amount",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionEntryType",
+            "key": "entry_type",
+            "schema": {
+              "description": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+              "generatedName": "TransactionEntryType",
+              "schema": "EntryType",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionCurrency",
+            "key": "currency",
+            "schema": {
+              "description": "The currency of the transaction in ISO 4217 format",
+              "generatedName": "TransactionCurrency",
+              "schema": "Currency",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionEntities",
+            "key": "entities",
+            "schema": {
+              "generatedName": "transactionEntities",
+              "nameOverride": "Transaction",
+              "title": "Transaction",
+              "value": {
+                "generatedName": "TransactionEntities",
+                "schema": "Entities",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionCategories",
+            "key": "categories",
+            "schema": {
+              "generatedName": "transactionCategories",
+              "nameOverride": "Transaction",
+              "title": "Transaction",
+              "value": {
+                "generatedName": "TransactionCategories",
+                "schema": "Categories",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionLocation",
+            "key": "location",
+            "schema": {
+              "generatedName": "transactionLocation",
+              "nameOverride": "Transaction",
+              "title": "Transaction",
+              "value": {
+                "generatedName": "TransactionLocation",
+                "schema": "Location",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionError",
+            "key": "error",
+            "schema": {
+              "generatedName": "transactionError",
+              "nameOverride": "Transaction",
+              "title": "Transaction",
+              "value": {
+                "generatedName": "TransactionError",
+                "schema": "TransactionError",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionCreatedAt",
+            "key": "created_at",
+            "schema": {
+              "description": "The timestamp of when the account holder was created.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "TransactionCreatedAt",
+              "title": "Created At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionAccountHolderId",
+            "key": "account_holder_id",
+            "schema": {
+              "generatedName": "transactionAccountHolderId",
+              "nameOverride": "Transaction",
+              "title": "Transaction",
+              "value": {
+                "description": "The unique ID of the account holder of the transaction",
+                "schema": {
+                  "minLength": 1,
+                  "type": "string"
+                },
+                "generatedName": "TransactionAccountHolderId",
+                "title": "Account Holder Id",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionRecurrence",
+            "key": "recurrence",
+            "schema": {
+              "generatedName": "transactionRecurrence",
+              "nameOverride": "Transaction",
+              "title": "Transaction",
+              "value": {
+                "generatedName": "TransactionRecurrence",
+                "schema": "Recurrence",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Transaction",
+        "nameOverride": "Transaction",
+        "title": "Transaction",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "TransactionError": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "transactionErrorCode",
+            "key": "code",
+            "schema": {
+              "generatedName": "TransactionErrorCode",
+              "schema": "TransactionErrorCode",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionErrorMessage",
+            "key": "message",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "TransactionErrorMessage",
+              "nameOverride": "Message",
+              "title": "Message",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "TransactionError",
+        "nameOverride": "TransactionError",
+        "title": "TransactionError",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "TransactionErrorCode": {
+        "description": "An enumeration.",
+        "generatedName": "TransactionErrorCode",
+        "nameOverride": "TransactionErrorCode",
+        "title": "TransactionErrorCode",
+        "values": [
+          {
+            "generatedName": "account_holder_not_found",
+            "value": "account_holder_not_found",
+            "casing": {}
+          },
+          {
+            "generatedName": "internal_error",
+            "value": "internal_error",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "TransactionInput": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "transactionInputId",
+            "key": "id",
+            "schema": {
+              "description": "A unique identifier of the transaction",
+              "schema": {
+                "minLength": 1,
+                "type": "string"
+              },
+              "generatedName": "TransactionInputId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionInputDescription",
+            "key": "description",
+            "schema": {
+              "description": "The description string of the transaction",
+              "schema": {
+                "minLength": 0,
+                "maxLength": 1024,
+                "type": "string"
+              },
+              "generatedName": "TransactionInputDescription",
+              "nameOverride": "Description",
+              "title": "Description",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionInputDate",
+            "key": "date",
+            "schema": {
+              "description": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+              "schema": {
+                "format": "date",
+                "type": "string"
+              },
+              "generatedName": "TransactionInputDate",
+              "nameOverride": "Date",
+              "title": "Date",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionInputAmount",
+            "key": "amount",
+            "schema": {
+              "description": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+              "schema": {
+                "minimum": 0,
+                "type": "double"
+              },
+              "generatedName": "TransactionInputAmount",
+              "nameOverride": "Amount",
+              "title": "Amount",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionInputEntryType",
+            "key": "entry_type",
+            "schema": {
+              "description": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+              "generatedName": "TransactionInputEntryType",
+              "schema": "EntryType",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionInputCurrency",
+            "key": "currency",
+            "schema": {
+              "description": "The currency of the transaction in ISO 4217 format",
+              "generatedName": "TransactionInputCurrency",
+              "schema": "Currency",
+              "groupName": [],
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionInputAccountHolderId",
+            "key": "account_holder_id",
+            "schema": {
+              "description": "The unique ID of the account holder. Unsetting it will disable [categorization](./docs/v3/enrichment/entities).",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "TransactionInputAccountHolderId",
+              "title": "Account Holder Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "transactionInputLocation",
+            "key": "location",
+            "schema": {
+              "generatedName": "transactionInputLocation",
+              "nameOverride": "TransactionInput",
+              "title": "TransactionInput",
+              "value": {
+                "generatedName": "TransactionInputLocation",
+                "schema": "LocationInput",
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "reference"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "TransactionInput",
+        "nameOverride": "TransactionInput",
+        "title": "TransactionInput",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "ValidationError": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "validationErrorLoc",
+            "key": "loc",
+            "schema": {
+              "value": {
+                "value": {
+                  "generatedName": "ValidationErrorLocItem",
+                  "schemas": [
+                    {
+                      "schema": {
+                        "type": "string"
+                      },
+                      "generatedName": "ValidationErrorLocItem",
+                      "groupName": [],
+                      "type": "primitive"
+                    },
+                    {
+                      "schema": {
+                        "type": "int"
+                      },
+                      "generatedName": "ValidationErrorLocItem",
+                      "groupName": [],
+                      "type": "primitive"
+                    }
+                  ],
+                  "groupName": [],
+                  "source": {
+                    "file": "../openapi.yml",
+                    "type": "openapi"
+                  },
+                  "type": "undisciminated"
+                },
+                "type": "oneOf"
+              },
+              "generatedName": "ValidationErrorLoc",
+              "nameOverride": "Location",
+              "title": "Location",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "validationErrorMsg",
+            "key": "msg",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "ValidationErrorMsg",
+              "nameOverride": "Message",
+              "title": "Message",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "validationErrorType",
+            "key": "type",
+            "schema": {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "ValidationErrorType",
+              "title": "Error Type",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "ValidationError",
+        "nameOverride": "ValidationError",
+        "title": "ValidationError",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Webhook": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "webhookUrl",
+            "key": "url",
+            "schema": {
+              "description": "The URL of the webhook",
+              "schema": {
+                "format": "uri",
+                "minLength": 1,
+                "maxLength": 1024,
+                "type": "string"
+              },
+              "generatedName": "WebhookUrl",
+              "nameOverride": "Url",
+              "title": "Url",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookEvents",
+            "key": "events",
+            "schema": {
+              "description": "A list of events that this webhook subscribes to",
+              "value": {
+                "generatedName": "WebhookEventsItem",
+                "values": [
+                  {
+                    "generatedName": "ReportsResolved",
+                    "value": "reports.resolved",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "ReportsRejected",
+                    "value": "reports.rejected",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "ReportsPending",
+                    "value": "reports.pending",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BankStatementsCompleted",
+                    "value": "bank_statements.completed",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BankStatementsError",
+                    "value": "bank_statements.error",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BatchesCompleted",
+                    "value": "batches.completed",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BatchesError",
+                    "value": "batches.error",
+                    "casing": {}
+                  }
+                ],
+                "groupName": [],
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "enum"
+              },
+              "generatedName": "WebhookEvents",
+              "nameOverride": "Events",
+              "title": "Events",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookToken",
+            "key": "token",
+            "schema": {
+              "generatedName": "webhookToken",
+              "nameOverride": "Webhook",
+              "title": "Webhook",
+              "value": {
+                "description": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                "schema": {
+                  "maxLength": 128,
+                  "type": "string"
+                },
+                "generatedName": "WebhookToken",
+                "nameOverride": "Token",
+                "title": "Token",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookId",
+            "key": "id",
+            "schema": {
+              "description": "A generated unique identifier for the webhook",
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "WebhookId",
+              "nameOverride": "Id",
+              "title": "Id",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookCreatedAt",
+            "key": "created_at",
+            "schema": {
+              "description": "The date and time when the webhook was created.",
+              "schema": {
+                "type": "datetime"
+              },
+              "generatedName": "WebhookCreatedAt",
+              "title": "Created At",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookEnabled",
+            "key": "enabled",
+            "schema": {
+              "description": "Whether the webhook is enabled or not.",
+              "schema": {
+                "type": "boolean"
+              },
+              "generatedName": "WebhookEnabled",
+              "nameOverride": "Enabled",
+              "title": "Enabled",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Webhook",
+        "nameOverride": "Webhook",
+        "title": "Webhook",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "WebhookBase": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "webhookBaseUrl",
+            "key": "url",
+            "schema": {
+              "description": "The URL of the webhook",
+              "schema": {
+                "format": "uri",
+                "minLength": 1,
+                "maxLength": 1024,
+                "type": "string"
+              },
+              "generatedName": "WebhookBaseUrl",
+              "nameOverride": "Url",
+              "title": "Url",
+              "groupName": [],
+              "type": "primitive"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookBaseEvents",
+            "key": "events",
+            "schema": {
+              "description": "A list of events that this webhook subscribes to",
+              "value": {
+                "generatedName": "WebhookBaseEventsItem",
+                "values": [
+                  {
+                    "generatedName": "ReportsResolved",
+                    "value": "reports.resolved",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "ReportsRejected",
+                    "value": "reports.rejected",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "ReportsPending",
+                    "value": "reports.pending",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BankStatementsCompleted",
+                    "value": "bank_statements.completed",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BankStatementsError",
+                    "value": "bank_statements.error",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BatchesCompleted",
+                    "value": "batches.completed",
+                    "casing": {}
+                  },
+                  {
+                    "generatedName": "BatchesError",
+                    "value": "batches.error",
+                    "casing": {}
+                  }
+                ],
+                "groupName": [],
+                "source": {
+                  "file": "../openapi.yml",
+                  "type": "openapi"
+                },
+                "type": "enum"
+              },
+              "generatedName": "WebhookBaseEvents",
+              "nameOverride": "Events",
+              "title": "Events",
+              "groupName": [],
+              "type": "array"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookBaseToken",
+            "key": "token",
+            "schema": {
+              "generatedName": "webhookBaseToken",
+              "nameOverride": "WebhookBase",
+              "title": "WebhookBase",
+              "value": {
+                "description": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                "schema": {
+                  "maxLength": 128,
+                  "type": "string"
+                },
+                "generatedName": "WebhookBaseToken",
+                "nameOverride": "Token",
+                "title": "Token",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "WebhookBase",
+        "nameOverride": "WebhookBase",
+        "title": "WebhookBase",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "WebhookPatch": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "webhookPatchUrl",
+            "key": "url",
+            "schema": {
+              "generatedName": "webhookPatchUrl",
+              "nameOverride": "WebhookPatch",
+              "title": "WebhookPatch",
+              "value": {
+                "description": "The URL of the webhook",
+                "schema": {
+                  "format": "uri",
+                  "minLength": 1,
+                  "maxLength": 1024,
+                  "type": "string"
+                },
+                "generatedName": "WebhookPatchUrl",
+                "nameOverride": "Url",
+                "title": "Url",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookPatchEvents",
+            "key": "events",
+            "schema": {
+              "generatedName": "webhookPatchEvents",
+              "nameOverride": "WebhookPatch",
+              "title": "WebhookPatch",
+              "value": {
+                "description": "A list of events that this webhook subscribes to",
+                "value": {
+                  "generatedName": "WebhookPatchEventsItem",
+                  "values": [
+                    {
+                      "generatedName": "ReportsResolved",
+                      "value": "reports.resolved",
+                      "casing": {}
+                    },
+                    {
+                      "generatedName": "ReportsRejected",
+                      "value": "reports.rejected",
+                      "casing": {}
+                    },
+                    {
+                      "generatedName": "ReportsPending",
+                      "value": "reports.pending",
+                      "casing": {}
+                    },
+                    {
+                      "generatedName": "BankStatementsCompleted",
+                      "value": "bank_statements.completed",
+                      "casing": {}
+                    },
+                    {
+                      "generatedName": "BankStatementsError",
+                      "value": "bank_statements.error",
+                      "casing": {}
+                    },
+                    {
+                      "generatedName": "BatchesCompleted",
+                      "value": "batches.completed",
+                      "casing": {}
+                    },
+                    {
+                      "generatedName": "BatchesError",
+                      "value": "batches.error",
+                      "casing": {}
+                    }
+                  ],
+                  "groupName": [],
+                  "source": {
+                    "file": "../openapi.yml",
+                    "type": "openapi"
+                  },
+                  "type": "enum"
+                },
+                "generatedName": "WebhookPatchEvents",
+                "nameOverride": "Events",
+                "title": "Events",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookPatchToken",
+            "key": "token",
+            "schema": {
+              "generatedName": "webhookPatchToken",
+              "nameOverride": "WebhookPatch",
+              "title": "WebhookPatch",
+              "value": {
+                "description": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                "schema": {
+                  "maxLength": 128,
+                  "type": "string"
+                },
+                "generatedName": "WebhookPatchToken",
+                "nameOverride": "Token",
+                "title": "Token",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "webhookPatchEnabled",
+            "key": "enabled",
+            "schema": {
+              "generatedName": "webhookPatchEnabled",
+              "nameOverride": "WebhookPatch",
+              "title": "WebhookPatch",
+              "value": {
+                "description": "Whether the webhook is enabled or not.",
+                "schema": {
+                  "type": "boolean"
+                },
+                "generatedName": "WebhookPatchEnabled",
+                "nameOverride": "Enabled",
+                "title": "Enabled",
+                "groupName": [],
+                "type": "primitive"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "WebhookPatch",
+        "nameOverride": "WebhookPatch",
+        "title": "WebhookPatch",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "Expr": {
+        "value": {
+          "generatedName": "Expr",
+          "title": "expression",
+          "nameOverride": "expression",
+          "schemas": [
+            {
+              "schema": {
+                "type": "boolean"
+              },
+              "generatedName": "Expr",
+              "nameOverride": "boolean",
+              "title": "boolean",
+              "groupName": [],
+              "type": "primitive"
+            },
+            {
+              "schema": {
+                "type": "string"
+              },
+              "generatedName": "Expr",
+              "nameOverride": "string",
+              "title": "string",
+              "groupName": [],
+              "type": "primitive"
+            },
+            {
+              "schema": {
+                "type": "double"
+              },
+              "generatedName": "Expr",
+              "nameOverride": "number",
+              "title": "number",
+              "groupName": [],
+              "type": "primitive"
+            },
+            {
+              "generatedName": "ExprThree",
+              "schema": "FnCall",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            }
+          ],
+          "groupName": [],
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "undisciminated"
+        },
+        "type": "oneOf"
+      },
+      "TxProp": {
+        "generatedName": "TxProp",
+        "nameOverride": "properties",
+        "title": "properties",
+        "values": [
+          {
+            "generatedName": "logo",
+            "value": "logo",
+            "casing": {}
+          },
+          {
+            "generatedName": "website",
+            "value": "website",
+            "casing": {}
+          },
+          {
+            "generatedName": "merchant",
+            "value": "merchant",
+            "casing": {}
+          },
+          {
+            "generatedName": "description",
+            "value": "description",
+            "casing": {}
+          },
+          {
+            "generatedName": "merchant_id",
+            "value": "merchant_id",
+            "casing": {}
+          },
+          {
+            "generatedName": "location",
+            "value": "location",
+            "casing": {}
+          },
+          {
+            "generatedName": "person",
+            "value": "person",
+            "casing": {}
+          },
+          {
+            "generatedName": "transaction_type",
+            "value": "transaction_type",
+            "casing": {}
+          },
+          {
+            "generatedName": "amount",
+            "value": "amount",
+            "casing": {}
+          },
+          {
+            "generatedName": "entry_type",
+            "value": "entry_type",
+            "casing": {}
+          },
+          {
+            "generatedName": "account_holder_type",
+            "value": "account_holder_type",
+            "casing": {}
+          },
+          {
+            "generatedName": "account_holder_id",
+            "value": "account_holder_id",
+            "casing": {}
+          },
+          {
+            "generatedName": "account_holder_name",
+            "value": "account_holder_name",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "FnCall": {
+        "value": {
+          "generatedName": "FnCall",
+          "schemas": [
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "&&",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall&&&&Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall&&&&",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall&&",
+              "title": "&&",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "||",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall||||Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall||||",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall||",
+              "title": "||",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "==",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall====Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall====",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall==",
+              "title": "==",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "+",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall++Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall++",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall+",
+              "title": "+",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "-",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall--Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall--",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall-",
+              "title": "-",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "*",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall**Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall**",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall*",
+              "title": "*",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "/",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall//Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall//",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall/",
+              "title": "/",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "//",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall////Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall////",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall//",
+              "title": "//",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "<",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall<<Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall<<",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall<",
+              "title": "<",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "<=",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall<=<=Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall<=<=",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall<=",
+              "title": "<=",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": ">",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall>>Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall>>",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall>",
+              "title": ">",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": ">=",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCall>=>=Item",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCall>=>=",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall>=",
+              "title": ">=",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCall",
+                  "key": "!",
+                  "schema": {
+                    "generatedName": "FnCall!!",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCall!",
+              "title": "!",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallIsSubstringIsSubstring",
+                  "key": "is_substring",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCallIsSubstringIsSubstringItem",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCallIsSubstringIsSubstring",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallIsSubstring",
+              "title": "is_substring",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallStartsWithStartsWith",
+                  "key": "starts_with",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCallStartsWithStartsWithItem",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCallStartsWithStartsWith",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallStartsWith",
+              "title": "starts_with",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallEndsWithEndsWith",
+                  "key": "ends_with",
+                  "schema": {
+                    "value": {
+                      "generatedName": "FnCallEndsWithEndsWithItem",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "FnCallEndsWithEndsWith",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallEndsWith",
+              "title": "ends_with",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallToLowerToLower",
+                  "key": "to_lower",
+                  "schema": {
+                    "generatedName": "FnCallToLowerToLower",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallToLower",
+              "title": "to_lower",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallToUpperToUpper",
+                  "key": "to_upper",
+                  "schema": {
+                    "generatedName": "FnCallToUpperToUpper",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallToUpper",
+              "title": "to_upper",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallHasLabelHasLabel",
+                  "key": "has_label",
+                  "schema": {
+                    "generatedName": "FnCallHasLabelHasLabel",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallHasLabel",
+              "title": "has_label",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallHasMccHasMcc",
+                  "key": "has_mcc",
+                  "schema": {
+                    "generatedName": "FnCallHasMccHasMcc",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallHasMcc",
+              "title": "has_mcc",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "fnCallGetGet",
+                  "key": "get",
+                  "schema": {
+                    "generatedName": "FnCallGetGet",
+                    "schema": "TxProp",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "FnCallGet",
+              "title": "get property",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            }
+          ],
+          "groupName": [],
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "undisciminated"
+        },
+        "type": "oneOf"
+      },
+      "Action": {
+        "value": {
+          "generatedName": "Action",
+          "title": "action",
+          "nameOverride": "action",
+          "schemas": [
+            {
+              "generatedName": "ActionZero",
+              "schema": "If",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            {
+              "generatedName": "ActionOne",
+              "schema": "ModifyLabels",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            {
+              "generatedName": "ActionTwo",
+              "schema": "Setter",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            }
+          ],
+          "groupName": [],
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "undisciminated"
+        },
+        "type": "oneOf"
+      },
+      "If": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "ifIf",
+            "key": "if",
+            "schema": {
+              "generatedName": "IfIf",
+              "schema": "Expr",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "ifThen",
+            "key": "then",
+            "schema": {
+              "generatedName": "ifThen",
+              "nameOverride": "if",
+              "title": "if",
+              "value": {
+                "value": {
+                  "generatedName": "IfThenItem",
+                  "schema": "Action",
+                  "source": {
+                    "file": "../openapi.yml",
+                    "type": "openapi"
+                  },
+                  "type": "reference"
+                },
+                "generatedName": "IfThen",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          },
+          {
+            "conflict": {},
+            "generatedName": "ifElse",
+            "key": "else",
+            "schema": {
+              "generatedName": "ifElse",
+              "nameOverride": "if",
+              "title": "if",
+              "value": {
+                "value": {
+                  "generatedName": "IfElseItem",
+                  "schema": "Action",
+                  "source": {
+                    "file": "../openapi.yml",
+                    "type": "openapi"
+                  },
+                  "type": "reference"
+                },
+                "generatedName": "IfElse",
+                "groupName": [],
+                "type": "array"
+              },
+              "groupName": [],
+              "type": "optional"
+            },
+            "audiences": []
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "If",
+        "nameOverride": "if",
+        "title": "if",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "ModifyLabels": {
+        "value": {
+          "generatedName": "ModifyLabels",
+          "title": "modify labels",
+          "schemas": [
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "modifyLabelsAddLabelAddLabel",
+                  "key": "add_label",
+                  "schema": {
+                    "generatedName": "ModifyLabelsAddLabelAddLabel",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "ModifyLabelsAddLabel",
+              "title": "add_label",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "modifyLabelsRemoveLabelRemoveLabel",
+                  "key": "remove_label",
+                  "schema": {
+                    "generatedName": "ModifyLabelsRemoveLabelRemoveLabel",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "ModifyLabelsRemoveLabel",
+              "title": "remove_label",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "modifyLabelsSetLabelsSetLabels",
+                  "key": "set_labels",
+                  "schema": {
+                    "value": {
+                      "generatedName": "ModifyLabelsSetLabelsSetLabelsItem",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "ModifyLabelsSetLabelsSetLabels",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "ModifyLabelsSetLabels",
+              "title": "set_labels",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "modifyLabelsAddMccAddMcc",
+                  "key": "add_mcc",
+                  "schema": {
+                    "generatedName": "ModifyLabelsAddMccAddMcc",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "ModifyLabelsAddMcc",
+              "title": "add_mcc",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "modifyLabelsRemoveMccRemoveMcc",
+                  "key": "remove_mcc",
+                  "schema": {
+                    "generatedName": "ModifyLabelsRemoveMccRemoveMcc",
+                    "schema": "Expr",
+                    "source": {
+                      "file": "../openapi.yml",
+                      "type": "openapi"
+                    },
+                    "type": "reference"
+                  },
+                  "audiences": [],
+                  "readonly": false
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "ModifyLabelsRemoveMcc",
+              "title": "remove_mcc",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            },
+            {
+              "allOf": [],
+              "properties": [
+                {
+                  "conflict": {},
+                  "generatedName": "modifyLabelsSetMccSetMcc",
+                  "key": "set_mcc",
+                  "schema": {
+                    "value": {
+                      "generatedName": "ModifyLabelsSetMccSetMccItem",
+                      "schema": "Expr",
+                      "source": {
+                        "file": "../openapi.yml",
+                        "type": "openapi"
+                      },
+                      "type": "reference"
+                    },
+                    "generatedName": "ModifyLabelsSetMccSetMcc",
+                    "groupName": [],
+                    "type": "array"
+                  },
+                  "audiences": []
+                }
+              ],
+              "allOfPropertyConflicts": [],
+              "generatedName": "ModifyLabelsSetMcc",
+              "title": "set_mcc",
+              "groupName": [],
+              "additionalProperties": false,
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "object"
+            }
+          ],
+          "groupName": [],
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "undisciminated"
+        },
+        "type": "oneOf"
+      },
+      "EditableTxProp": {
+        "generatedName": "EditableTxProp",
+        "title": "editable properties",
+        "values": [
+          {
+            "generatedName": "logo",
+            "value": "logo",
+            "casing": {}
+          },
+          {
+            "generatedName": "website",
+            "value": "website",
+            "casing": {}
+          },
+          {
+            "generatedName": "merchant",
+            "value": "merchant",
+            "casing": {}
+          },
+          {
+            "generatedName": "merchant_id",
+            "value": "merchant_id",
+            "casing": {}
+          },
+          {
+            "generatedName": "location",
+            "value": "location",
+            "casing": {}
+          },
+          {
+            "generatedName": "person",
+            "value": "person",
+            "casing": {}
+          },
+          {
+            "generatedName": "transaction_type",
+            "value": "transaction_type",
+            "casing": {}
+          }
+        ],
+        "groupName": [],
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "enum"
+      },
+      "Setter": {
+        "allOf": [],
+        "properties": [
+          {
+            "conflict": {},
+            "generatedName": "setterSet",
+            "key": "set",
+            "schema": {
+              "generatedName": "SetterSet",
+              "schema": "EditableTxProp",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          },
+          {
+            "conflict": {},
+            "generatedName": "setterTo",
+            "key": "to",
+            "schema": {
+              "generatedName": "SetterTo",
+              "schema": "Expr",
+              "source": {
+                "file": "../openapi.yml",
+                "type": "openapi"
+              },
+              "type": "reference"
+            },
+            "audiences": [],
+            "readonly": false
+          }
+        ],
+        "allOfPropertyConflicts": [],
+        "generatedName": "Setter",
+        "nameOverride": "set",
+        "title": "set",
+        "groupName": [],
+        "additionalProperties": false,
+        "source": {
+          "file": "../openapi.yml",
+          "type": "openapi"
+        },
+        "type": "object"
+      },
+      "personalization": {
+        "value": {
+          "generatedName": "PersonalizationItem",
+          "schema": "Action",
+          "source": {
+            "file": "../openapi.yml",
+            "type": "openapi"
+          },
+          "type": "reference"
+        },
+        "generatedName": "Personalization",
+        "nameOverride": "Filter",
+        "title": "Filter",
+        "groupName": [],
+        "type": "array"
+      }
+    },
+    "namespacedSchemas": {}
+  },
+  "variables": {},
+  "nonRequestReferencedSchemas": {},
+  "securitySchemes": {
+    "APIKeyHeader": {
+      "headerName": "X-Api-Key",
+      "type": "header"
+    }
+  },
+  "globalHeaders": [],
+  "idempotencyHeaders": [],
+  "groups": {}
+}
\ No newline at end of file
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi/ntropy.json b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi/ntropy.json
new file mode 100644
index 00000000000..0d731e2be4b
--- /dev/null
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/__snapshots__/openapi/ntropy.json
@@ -0,0 +1,10019 @@
+{
+  "absoluteFilePath": "/DUMMY_PATH",
+  "importedDefinitions": {},
+  "namedDefinitionFiles": {
+    "__package__.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "errors": {
+          "BadRequestError": {
+            "docs": "Account holder with the provided id already exists.",
+            "status-code": 400,
+            "type": "unknown",
+          },
+          "ContentTooLargeError": {
+            "docs": "Ruleset was larger than 50KiB",
+            "status-code": 413,
+            "type": "unknown",
+          },
+          "LockedError": {
+            "docs": "Not enough credits.",
+            "status-code": 423,
+            "type": "unknown",
+          },
+          "NotFoundError": {
+            "docs": "Transaction with the provided id not found.",
+            "status-code": 404,
+            "type": "unknown",
+          },
+          "UnprocessableEntityError": {
+            "docs": "Validation Error",
+            "examples": [
+              {
+                "docs": undefined,
+                "name": undefined,
+                "value": {},
+              },
+            ],
+            "status-code": 422,
+            "type": "HTTPValidationError",
+          },
+        },
+        "types": {
+          "Account": {
+            "docs": undefined,
+            "properties": {
+              "closing_balance": {
+                "type": "optional<double>",
+              },
+              "iso_currency_code": {
+                "type": "optional<string>",
+              },
+              "number": {
+                "type": "optional<string>",
+              },
+              "opening_balance": {
+                "type": "optional<double>",
+              },
+              "type": {
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountHolder": {
+            "docs": undefined,
+            "properties": {
+              "address": {
+                "type": "optional<Address>",
+              },
+              "name": {
+                "type": "optional<string>",
+              },
+              "type": {
+                "type": "optional<AccountType>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountHolderExternal": {
+            "docs": undefined,
+            "properties": {
+              "created_at": {
+                "docs": "The timestamp of when the account holder was created.",
+                "type": "datetime",
+              },
+              "id": {
+                "docs": "The unique ID of the account holder of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "name": {
+                "docs": "The name of the account holder",
+                "type": "optional<string>",
+              },
+              "type": {
+                "docs": "The type of the account holder. ",
+                "type": "AccountHolderType",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountHolderType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "consumer",
+              "business",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "consumer",
+              "business",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "AccountingCategory": {
+            "docs": "An enumeration.",
+            "enum": [
+              {
+                "name": "OperationalExpenses",
+                "value": "operational expenses",
+              },
+              {
+                "name": "CostOfGoodsSold",
+                "value": "cost of goods sold",
+              },
+              "revenue",
+              "financing",
+              "taxes",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ActionModel": {
+            "type": "action",
+          },
+          "Address": {
+            "docs": undefined,
+            "properties": {
+              "city": {
+                "type": "optional<string>",
+              },
+              "country": {
+                "type": "optional<string>",
+              },
+              "postcode": {
+                "type": "optional<string>",
+              },
+              "state": {
+                "type": "optional<string>",
+              },
+              "street": {
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatement": {
+            "docs": "Represents a bank statement with details about the file and its status.",
+            "properties": {
+              "created_at": {
+                "docs": "The date and time when the job was created.",
+                "type": "datetime",
+              },
+              "error": {
+                "type": "optional<BankStatementError>",
+              },
+              "file": {
+                "docs": "Information about the bank statement file being processed.",
+                "type": "BankStatementFile",
+              },
+              "id": {
+                "docs": "A unique identifier for the bank statement job.",
+                "type": "string",
+              },
+              "name": {
+                "docs": "The name of the bank statement file, if available.",
+                "type": "optional<string>",
+              },
+              "status": {
+                "docs": "The current status of the document.",
+                "type": "BankStatementStatus",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementAccount": {
+            "docs": undefined,
+            "properties": {
+              "closing_balance": {
+                "docs": "The closing balance of the account for the statement period.",
+                "type": "optional<double>",
+              },
+              "end_date": {
+                "docs": "The end date of the statement period.",
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "is_balance_reconciled": {
+                "docs": "Indicates whether the balance has been reconciled.",
+                "type": "optional<boolean>",
+              },
+              "number": {
+                "docs": "The account number, if available.",
+                "type": "optional<string>",
+              },
+              "opening_balance": {
+                "docs": "The opening balance of the account for the statement period.",
+                "type": "optional<double>",
+              },
+              "start_date": {
+                "docs": "The start date of the statement period.",
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "total_incoming": {
+                "docs": "The sum of amounts of all incoming transactions.",
+                "type": "optional<double>",
+              },
+              "total_outgoing": {
+                "docs": "The sum of amounts of all outgoing transactions.",
+                "type": "optional<double>",
+              },
+              "transactions": {
+                "docs": "List of transactions for this account.",
+                "type": "list<BankStatementTransaction>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementError": {
+            "docs": undefined,
+            "properties": {
+              "code": {
+                "type": "BankStatementErrorCode",
+              },
+              "message": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementErrorCode": {
+            "docs": "An enumeration.",
+            "enum": [
+              "invalid_bank_statement",
+              "internal_error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementFile": {
+            "docs": undefined,
+            "properties": {
+              "no_pages": {
+                "docs": "The number of pages in the bank statement file.",
+                "type": "integer",
+              },
+              "size": {
+                "docs": "The size of the bank statement file in bytes, if available.",
+                "type": "optional<integer>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementResults": {
+            "docs": undefined,
+            "properties": {
+              "accounts": {
+                "docs": "List of accounts in the bank statement.",
+                "type": "list<BankStatementAccount>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "processing",
+              "completed",
+              "error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BankStatementTransaction": {
+            "docs": undefined,
+            "properties": {
+              "amount": {
+                "docs": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+                "type": "double",
+                "validation": {
+                  "exclusiveMax": undefined,
+                  "exclusiveMin": undefined,
+                  "max": undefined,
+                  "min": 0,
+                  "multipleOf": undefined,
+                },
+              },
+              "currency": {
+                "docs": "The currency of the transaction in ISO 4217 format",
+                "type": "Currency",
+              },
+              "date": {
+                "docs": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "description": {
+                "docs": "The description string of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 1024,
+                  "minLength": 0,
+                  "pattern": undefined,
+                },
+              },
+              "entry_type": {
+                "docs": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+                "type": "EntryType",
+              },
+              "id": {
+                "docs": "A unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "running_balance": {
+                "docs": "The account's balance when this transaction was performed",
+                "type": "optional<double>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Batch": {
+            "docs": "The `Batch` object represents the status and progress of an asynchronous batch enrichment job.",
+            "properties": {
+              "created_at": {
+                "docs": "The timestamp of when the batch was created.",
+                "type": "datetime",
+              },
+              "id": {
+                "docs": "A unique identifier for the batch.",
+                "type": "string",
+              },
+              "progress": {
+                "docs": "The number of transactions processed so far.",
+                "type": "integer",
+              },
+              "status": {
+                "docs": "The current status of the batch. A batch will error if at least one of the transactions contains an error.",
+                "type": "BatchStatus",
+              },
+              "total": {
+                "docs": "The total number of transactions in the batch.",
+                "type": "integer",
+              },
+              "updated_at": {
+                "docs": "The timestamp of when the batch was last updated.",
+                "type": "datetime",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BatchResult": {
+            "docs": "The `BatchResult` object represents the result of a batch enrichment job, including its status and
+enriched transactions.",
+            "properties": {
+              "id": {
+                "docs": "A unique identifier for the batch.",
+                "type": "string",
+              },
+              "results": {
+                "type": "EnrichmentResult",
+              },
+              "status": {
+                "docs": "The current status of the batch job.",
+                "type": "BatchStatus",
+              },
+              "total": {
+                "docs": "The total number of transactions in the batch result.",
+                "type": "integer",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "BatchStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "processing",
+              "completed",
+              "error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Categories": {
+            "docs": undefined,
+            "properties": {
+              "accounting": {
+                "docs": "The corresponding accounting category. Only available for `business` transactions.",
+                "type": "optional<AccountingCategory>",
+              },
+              "general": {
+                "docs": "The category of the transaction. View the valid set of categories for your key [here](./docs/v3/enrichment/entities).",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CategoryConfidence": {
+            "docs": "An enumeration.",
+            "enum": [
+              "high",
+              "medium",
+              "low",
+              "unknown",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CategorySet": {
+            "docs": undefined,
+            "properties": {
+              "incoming": {
+                "type": "list<string>",
+              },
+              "outgoing": {
+                "type": "list<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Counterparty": {
+            "docs": undefined,
+            "properties": {
+              "id": {
+                "docs": "The unique UUID identifier of the entity",
+                "type": "optional<string>",
+              },
+              "logo": {
+                "docs": "Logo's URL",
+                "type": "optional<string>",
+              },
+              "mccs": {
+                "docs": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "type": "optional<list<integer>>",
+              },
+              "name": {
+                "docs": "The name of the entity",
+                "type": "optional<string>",
+              },
+              "type": {
+                "type": "CounterpartyType",
+              },
+              "website": {
+                "docs": "The website URL of the entity",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CounterpartyType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "person",
+              "organization",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Country": {
+            "docs": "An enumeration.",
+            "enum": [
+              "AD",
+              "AE",
+              "AF",
+              "AG",
+              "AI",
+              "AL",
+              "AM",
+              "AO",
+              "AR",
+              "AS",
+              "AT",
+              "AU",
+              "AW",
+              "AZ",
+              "BA",
+              "BB",
+              "BD",
+              "BE",
+              "BF",
+              "BG",
+              "BH",
+              "BI",
+              "BJ",
+              "BL",
+              "BM",
+              "BN",
+              "BO",
+              "BQ",
+              "BR",
+              "BS",
+              "BT",
+              "BV",
+              "BW",
+              "BY",
+              "BZ",
+              "CA",
+              "CC",
+              "CD",
+              "CF",
+              "CG",
+              "CH",
+              "CI",
+              "CK",
+              "CL",
+              "CM",
+              "CN",
+              "CO",
+              "CR",
+              "CU",
+              "CV",
+              "CW",
+              "CX",
+              "CY",
+              "CZ",
+              "DE",
+              "DJ",
+              "DK",
+              "DM",
+              "DO",
+              "DZ",
+              "EC",
+              "EE",
+              "EG",
+              "EH",
+              "ER",
+              "ES",
+              "ET",
+              "FI",
+              "FJ",
+              "FK",
+              "FM",
+              "FR",
+              "GA",
+              "GB",
+              "GD",
+              "GE",
+              "GF",
+              "GG",
+              "GH",
+              "GI",
+              "GL",
+              "GM",
+              "GN",
+              "GP",
+              "GQ",
+              "GR",
+              "GS",
+              "GT",
+              "GU",
+              "GW",
+              "GY",
+              "HK",
+              "HM",
+              "HN",
+              "HR",
+              "HT",
+              "HU",
+              "ID",
+              "IE",
+              "IL",
+              "IM",
+              "IN",
+              "IO",
+              "IQ",
+              "IR",
+              "IS",
+              "IT",
+              "JE",
+              "JM",
+              "JO",
+              "JP",
+              "KE",
+              "KG",
+              "KH",
+              "KI",
+              "KM",
+              "KN",
+              "KP",
+              "KR",
+              "KW",
+              "KY",
+              "KZ",
+              "LA",
+              "LB",
+              "LC",
+              "LI",
+              "LK",
+              "LR",
+              "LS",
+              "LT",
+              "LU",
+              "LV",
+              "LY",
+              "MA",
+              "MC",
+              "MD",
+              "ME",
+              "MF",
+              "MG",
+              "MH",
+              "MK",
+              "ML",
+              "MM",
+              "MN",
+              "MO",
+              "MP",
+              "MQ",
+              "MR",
+              "MS",
+              "MT",
+              "MU",
+              "MV",
+              "MW",
+              "MX",
+              "MY",
+              "MZ",
+              "NA",
+              "NC",
+              "NE",
+              "NF",
+              "NG",
+              "NI",
+              "NL",
+              "NO",
+              "NP",
+              "NR",
+              "NU",
+              "NZ",
+              "OM",
+              "PA",
+              "PE",
+              "PF",
+              "PG",
+              "PH",
+              "PK",
+              "PL",
+              "PM",
+              "PN",
+              "PR",
+              "PS",
+              "PT",
+              "PW",
+              "PY",
+              "QA",
+              "RE",
+              "RO",
+              "RS",
+              "RU",
+              "RW",
+              "SA",
+              "SB",
+              "SC",
+              "SD",
+              "SE",
+              "SG",
+              "SH",
+              "SI",
+              "SJ",
+              "SK",
+              "SL",
+              "SM",
+              "SN",
+              "SO",
+              "SR",
+              "SS",
+              "ST",
+              "SV",
+              "SX",
+              "SY",
+              "SZ",
+              "TC",
+              "TD",
+              "TG",
+              "TH",
+              "TJ",
+              "TK",
+              "TL",
+              "TM",
+              "TN",
+              "TO",
+              "TR",
+              "TT",
+              "TV",
+              "TW",
+              "TZ",
+              "UA",
+              "UG",
+              "UM",
+              "US",
+              "UY",
+              "UZ",
+              "VC",
+              "VE",
+              "VG",
+              "VI",
+              "VN",
+              "VU",
+              "WF",
+              "WS",
+              "YE",
+              "YT",
+              "ZA",
+              "ZM",
+              "ZW",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Currency": {
+            "docs": "An enumeration.",
+            "enum": [
+              "EUR",
+              "AED",
+              "AFN",
+              "XCD",
+              "ALL",
+              "AMD",
+              "AOA",
+              "ARS",
+              "USD",
+              "AUD",
+              "AWG",
+              "AZN",
+              "BAM",
+              "BBD",
+              "BDT",
+              "XOF",
+              "BGN",
+              "BHD",
+              "BIF",
+              "BMD",
+              "BND",
+              "BOB",
+              "BRL",
+              "BSD",
+              "INR",
+              "NOK",
+              "BWP",
+              "BYR",
+              "BZD",
+              "CAD",
+              "CDF",
+              "XAF",
+              "CHF",
+              "NZD",
+              "CLP",
+              "CNY",
+              "COP",
+              "CRC",
+              "CUP",
+              "CVE",
+              "ANG",
+              "CZK",
+              "DJF",
+              "DKK",
+              "DOP",
+              "DZD",
+              "EGP",
+              "MAD",
+              "ERN",
+              "ETB",
+              "FJD",
+              "FKP",
+              "GBP",
+              "GEL",
+              "GHS",
+              "GIP",
+              "GMD",
+              "GNF",
+              "GTQ",
+              "GYD",
+              "HKD",
+              "HNL",
+              "HUF",
+              "IDR",
+              "ILS",
+              "IQD",
+              "IRR",
+              "ISK",
+              "JMD",
+              "JOD",
+              "JPY",
+              "KES",
+              "KGS",
+              "KHR",
+              "KMF",
+              "KPW",
+              "KRW",
+              "KWD",
+              "KYD",
+              "KZT",
+              "LAK",
+              "LBP",
+              "LKR",
+              "LRD",
+              "ZAR",
+              "LYD",
+              "MDL",
+              "MGA",
+              "MKD",
+              "MMK",
+              "MNT",
+              "MOP",
+              "MRO",
+              "MUR",
+              "MVR",
+              "MWK",
+              "MXN",
+              "MYR",
+              "MZN",
+              "XPF",
+              "NGN",
+              "NIO",
+              "NPR",
+              "OMR",
+              "PEN",
+              "PGK",
+              "PHP",
+              "PKR",
+              "PLN",
+              "PYG",
+              "QAR",
+              "RON",
+              "RSD",
+              "RUB",
+              "RWF",
+              "SAR",
+              "SBD",
+              "SCR",
+              "SDG",
+              "SEK",
+              "SGD",
+              "SHP",
+              "SLL",
+              "SOS",
+              "SRD",
+              "SSP",
+              "STD",
+              "SYP",
+              "SZL",
+              "THB",
+              "TJS",
+              "TMT",
+              "TND",
+              "TOP",
+              "TRY",
+              "TTD",
+              "TWD",
+              "TZS",
+              "UAH",
+              "UGX",
+              "UYU",
+              "UZS",
+              "VEF",
+              "VND",
+              "VUV",
+              "WST",
+              "YER",
+              "ZMW",
+              "ZWL",
+              "HRK",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "CustomCategorySet": {
+            "docs": undefined,
+            "properties": {
+              "incoming": {
+                "type": "list<string>",
+              },
+              "outgoing": {
+                "type": "list<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "DocumentStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "queued",
+              "processing",
+              "processed",
+              "failed",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EditableTxProp": {
+            "enum": [
+              "logo",
+              "website",
+              "merchant",
+              "merchant_id",
+              "location",
+              "person",
+              "transaction_type",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EnrichedTransaction": {
+            "docs": undefined,
+            "properties": {
+              "categories": {
+                "type": "optional<Categories>",
+              },
+              "created_at": {
+                "docs": "The timestamp of when the account holder was created.",
+                "type": "datetime",
+              },
+              "entities": {
+                "type": "optional<Entities>",
+              },
+              "error": {
+                "type": "optional<TransactionError>",
+              },
+              "id": {
+                "docs": "A unique identifier for the transaction. If two transactions are submitted with the same `id` the most recent one will replace the previous one.",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "location": {
+                "type": "optional<Location>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EnrichmentResult": {
+            "docs": undefined,
+            "properties": {
+              "transactions": {
+                "docs": "A list of enriched transactions resulting from the enrichment of this batch.",
+                "type": "list<EnrichedTransaction>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Entities": {
+            "docs": "Entities found by identity identification",
+            "properties": {
+              "counterparty": {
+                "type": "optional<Counterparty>",
+              },
+              "intermediaries": {
+                "type": "optional<list<Intermediary>>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Entity": {
+            "docs": undefined,
+            "properties": {
+              "id": {
+                "docs": "The unique UUID identifier of the entity",
+                "type": "optional<string>",
+              },
+              "logo": {
+                "docs": "Logo's URL",
+                "type": "optional<string>",
+              },
+              "mccs": {
+                "docs": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "type": "optional<list<integer>>",
+              },
+              "name": {
+                "docs": "The name of the entity",
+                "type": "optional<string>",
+              },
+              "website": {
+                "docs": "The website URL of the entity",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "EntryType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "incoming",
+              "outgoing",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Filter": {
+            "type": "list<action>",
+          },
+          "FilterModel": {
+            "type": "Filter",
+          },
+          "FnCall": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              {
+                "type": "FnCall&&",
+              },
+              {
+                "type": "FnCall||",
+              },
+              {
+                "type": "FnCall==",
+              },
+              {
+                "type": "FnCall+",
+              },
+              {
+                "type": "FnCall-",
+              },
+              {
+                "type": "FnCall*",
+              },
+              {
+                "type": "FnCall/",
+              },
+              {
+                "type": "FnCall//",
+              },
+              {
+                "type": "FnCall<",
+              },
+              {
+                "type": "FnCall<=",
+              },
+              {
+                "type": "FnCall>",
+              },
+              {
+                "type": "FnCall>=",
+              },
+              {
+                "type": "FnCall!",
+              },
+              {
+                "type": "FnCallIsSubstring",
+              },
+              {
+                "type": "FnCallStartsWith",
+              },
+              {
+                "type": "FnCallEndsWith",
+              },
+              {
+                "type": "FnCallToLower",
+              },
+              {
+                "type": "FnCallToUpper",
+              },
+              {
+                "type": "FnCallHasLabel",
+              },
+              {
+                "type": "FnCallHasMcc",
+              },
+              {
+                "type": "FnCallGet",
+              },
+            ],
+          },
+          "FnCall!": {
+            "docs": undefined,
+            "properties": {
+              "!": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall&&": {
+            "docs": undefined,
+            "properties": {
+              "&&": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall*": {
+            "docs": undefined,
+            "properties": {
+              "*": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall+": {
+            "docs": undefined,
+            "properties": {
+              "+": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall-": {
+            "docs": undefined,
+            "properties": {
+              "-": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall/": {
+            "docs": undefined,
+            "properties": {
+              "/": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall//": {
+            "docs": undefined,
+            "properties": {
+              "//": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall<": {
+            "docs": undefined,
+            "properties": {
+              "<": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall<=": {
+            "docs": undefined,
+            "properties": {
+              "<=": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall==": {
+            "docs": undefined,
+            "properties": {
+              "==": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall>": {
+            "docs": undefined,
+            "properties": {
+              ">": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall>=": {
+            "docs": undefined,
+            "properties": {
+              ">=": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallEndsWith": {
+            "docs": undefined,
+            "properties": {
+              "ends_with": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallGet": {
+            "docs": undefined,
+            "properties": {
+              "get": {
+                "type": "properties",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallHasLabel": {
+            "docs": undefined,
+            "properties": {
+              "has_label": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallHasMcc": {
+            "docs": undefined,
+            "properties": {
+              "has_mcc": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallIsSubstring": {
+            "docs": undefined,
+            "properties": {
+              "is_substring": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallStartsWith": {
+            "docs": undefined,
+            "properties": {
+              "starts_with": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallToLower": {
+            "docs": undefined,
+            "properties": {
+              "to_lower": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCallToUpper": {
+            "docs": undefined,
+            "properties": {
+              "to_upper": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "FnCall||": {
+            "docs": undefined,
+            "properties": {
+              "||": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "HTTPValidationError": {
+            "docs": undefined,
+            "properties": {
+              "detail": {
+                "type": "optional<list<ValidationError>>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Intermediary": {
+            "docs": undefined,
+            "properties": {
+              "id": {
+                "docs": "The unique UUID identifier of the entity",
+                "type": "optional<string>",
+              },
+              "logo": {
+                "docs": "Logo's URL",
+                "type": "optional<string>",
+              },
+              "mccs": {
+                "docs": "A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)",
+                "type": "optional<list<integer>>",
+              },
+              "name": {
+                "docs": "The name of the entity",
+                "type": "optional<string>",
+              },
+              "type": {
+                "type": "IntermediaryType",
+              },
+              "website": {
+                "docs": "The website URL of the entity",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "IntermediaryType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "delivery_service",
+              "payment_processor",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Location": {
+            "docs": undefined,
+            "properties": {
+              "raw_address": {
+                "docs": "An unstructured string containing the address",
+                "type": "optional<string>",
+              },
+              "structured": {
+                "docs": "When raw is set, a structured representation of it.",
+                "type": "optional<LocationStructured>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "LocationInput": {
+            "docs": "Location of where the transaction has taken place. This can greatly improve entity identification, especially
+under ambiguity.",
+            "properties": {
+              "country": {
+                "docs": "The country where the transaction was made in ISO 3166-2 format",
+                "type": "Country",
+              },
+              "raw_address": {
+                "docs": "An unstructured string containing the address",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "LocationStructured": {
+            "docs": undefined,
+            "properties": {
+              "apple_maps_url": {
+                "docs": "A URL link to view the location on Apple Maps",
+                "type": "optional<string>",
+              },
+              "city": {
+                "docs": "The city where the location is situated",
+                "type": "optional<string>",
+              },
+              "country": {
+                "docs": "The full name of the country",
+                "type": "optional<string>",
+              },
+              "country_code": {
+                "docs": "The country code of the location in ISO 3166-2 format",
+                "type": "optional<string>",
+              },
+              "google_maps_url": {
+                "docs": "A URL link to view the location on Google Maps",
+                "type": "optional<string>",
+              },
+              "latitude": {
+                "docs": "The latitude coordinate of the location",
+                "type": "optional<double>",
+              },
+              "longitude": {
+                "docs": "The longitude coordinate of the location",
+                "type": "optional<double>",
+              },
+              "postcode": {
+                "docs": "The postal code or ZIP code of the location",
+                "type": "optional<string>",
+              },
+              "state": {
+                "docs": "The state or region of the location",
+                "type": "optional<string>",
+              },
+              "store_number": {
+                "docs": "A unique identifier for a specific store or branch, if applicable",
+                "type": "optional<string>",
+              },
+              "street": {
+                "docs": "The street name and number of the location",
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabels": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              {
+                "type": "ModifyLabelsAddLabel",
+              },
+              {
+                "type": "ModifyLabelsRemoveLabel",
+              },
+              {
+                "type": "ModifyLabelsSetLabels",
+              },
+              {
+                "type": "ModifyLabelsAddMcc",
+              },
+              {
+                "type": "ModifyLabelsRemoveMcc",
+              },
+              {
+                "type": "ModifyLabelsSetMcc",
+              },
+            ],
+          },
+          "ModifyLabelsAddLabel": {
+            "docs": undefined,
+            "properties": {
+              "add_label": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsAddMcc": {
+            "docs": undefined,
+            "properties": {
+              "add_mcc": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsRemoveLabel": {
+            "docs": undefined,
+            "properties": {
+              "remove_label": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsRemoveMcc": {
+            "docs": undefined,
+            "properties": {
+              "remove_mcc": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsSetLabels": {
+            "docs": undefined,
+            "properties": {
+              "set_labels": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ModifyLabelsSetMcc": {
+            "docs": undefined,
+            "properties": {
+              "set_mcc": "list<expression>",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseAccountHolderExternal": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<AccountHolderExternal>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseBankStatement": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<BankStatement>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseBatch": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Batch>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseReport": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Report>",
+              },
+              "next_cursor": {
+                "type": "optional<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseTransaction": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Transaction>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "PagedResponseWebhook": {
+            "docs": undefined,
+            "properties": {
+              "data": {
+                "type": "list<Webhook>",
+              },
+              "next_cursor": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Recurrence": {
+            "docs": "The `Recurrence` object represents the recurrence pattern of a transaction. It provides information about
+whether a transaction is a one-time event or a part of a recurring series.",
+            "properties": {
+              "type": {
+                "docs": "Whether the transaction is a one-time transfer `one-off`, regularly with varying pricing `recurring` or with fixed pricing `subscription`",
+                "type": "RecurrenceType",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "RecurrenceGroup": {
+            "docs": undefined,
+            "properties": {
+              "average_amount": {
+                "docs": "The average amount per transaction in this group",
+                "type": "double",
+              },
+              "categories": {
+                "docs": "Categories of the transactions in the recurrence group",
+                "type": "Categories",
+              },
+              "counterparty": {
+                "docs": "Counterparty of the transactions",
+                "type": "Counterparty",
+              },
+              "end_date": {
+                "docs": "The date of the most recent transaction in the group",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "id": {
+                "docs": "A unique UUID identifier for the group",
+                "type": "string",
+              },
+              "periodicity": {
+                "docs": "A human-readable description of the transaction frequency",
+                "type": "RecurrencePeriodicity",
+              },
+              "periodicity_in_days": {
+                "docs": "The estimated number of days between transactions in this group",
+                "type": "double",
+              },
+              "start_date": {
+                "docs": "The date of the oldest transaction in the group",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "total_amount": {
+                "docs": "The sum of all transaction amounts in this group",
+                "type": "double",
+              },
+              "transaction_ids": {
+                "docs": "Transactions in this recurrence group",
+                "type": "list<string>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "RecurrencePeriodicity": {
+            "docs": "An enumeration.",
+            "enum": [
+              "daily",
+              "weekly",
+              "bi_weekly",
+              "monthly",
+              "bi_monthly",
+              "quarterly",
+              "semi_yearly",
+              "yearly",
+              "other",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "RecurrenceType": {
+            "docs": "An enumeration.",
+            "enum": [
+              "recurring",
+              "subscription",
+              {
+                "name": "OneOff",
+                "value": "one off",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Report": {
+            "docs": undefined,
+            "properties": {
+              "created_at": {
+                "docs": "The date and time when the report was created.",
+                "type": "datetime",
+              },
+              "description": {
+                "docs": "A description of what is wrong in the transaction",
+                "type": "string",
+              },
+              "fields": {
+                "docs": "A list of the fields that are incorrect",
+                "type": "list<string>",
+              },
+              "id": {
+                "docs": "A generated unique identifier for the report.",
+                "type": "string",
+              },
+              "rejection_reason": {
+                "docs": "An explanation of why the report was rejected",
+                "type": "optional<string>",
+              },
+              "status": {
+                "docs": "The status of the report.
+
+* `open`: a newly created report
+* `pending`: the report is being investigated
+* `rejected`: the original enrichment output was deemed correct or we couldn't resolve it, check `rejection_reason`
+* `resolved`: the issue has been resolved",
+                "type": "ReportStatus",
+              },
+              "transaction_id": {
+                "docs": "The unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ReportStatus": {
+            "docs": "An enumeration.",
+            "enum": [
+              "open",
+              "pending",
+              "resolved",
+              "rejected",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "StatementInfo": {
+            "docs": undefined,
+            "properties": {
+              "account_holder": {
+                "type": "optional<AccountHolder>",
+              },
+              "accounts": {
+                "type": "optional<list<Account>>",
+              },
+              "end_date": {
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "institution": {
+                "type": "optional<string>",
+              },
+              "start_date": {
+                "type": "optional<string>",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "SyncEnrichmentOutput": {
+            "docs": undefined,
+            "properties": {
+              "transactions": {
+                "docs": "A list of enriched transactions resulting from the enrichment of this batch.",
+                "type": "list<EnrichedTransaction>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "Transaction": {
+            "docs": undefined,
+            "properties": {
+              "account_holder_id": {
+                "docs": "The unique ID of the account holder of the transaction",
+                "type": "optional<string>",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "amount": {
+                "docs": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+                "type": "double",
+                "validation": {
+                  "exclusiveMax": undefined,
+                  "exclusiveMin": undefined,
+                  "max": undefined,
+                  "min": 0,
+                  "multipleOf": undefined,
+                },
+              },
+              "categories": {
+                "type": "optional<Categories>",
+              },
+              "created_at": {
+                "docs": "The timestamp of when the account holder was created.",
+                "type": "datetime",
+              },
+              "currency": {
+                "docs": "The currency of the transaction in ISO 4217 format",
+                "type": "Currency",
+              },
+              "date": {
+                "docs": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "description": {
+                "docs": "The description string of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 1024,
+                  "minLength": 0,
+                  "pattern": undefined,
+                },
+              },
+              "entities": {
+                "type": "optional<Entities>",
+              },
+              "entry_type": {
+                "docs": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+                "type": "EntryType",
+              },
+              "error": {
+                "type": "optional<TransactionError>",
+              },
+              "id": {
+                "docs": "A unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "location": {
+                "type": "optional<Location>",
+              },
+              "recurrence": {
+                "type": "optional<Recurrence>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "TransactionError": {
+            "docs": undefined,
+            "properties": {
+              "code": {
+                "type": "TransactionErrorCode",
+              },
+              "message": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "TransactionErrorCode": {
+            "docs": "An enumeration.",
+            "enum": [
+              "account_holder_not_found",
+              "internal_error",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "TransactionInput": {
+            "docs": undefined,
+            "properties": {
+              "account_holder_id": {
+                "docs": "The unique ID of the account holder. Unsetting it will disable [categorization](./docs/v3/enrichment/entities).",
+                "type": "string",
+              },
+              "amount": {
+                "docs": "The amount of the transaction in the `currency`. Must be a positive value. For example, if the `currency` is USD, then it's the amount in dollars.",
+                "type": "double",
+                "validation": {
+                  "exclusiveMax": undefined,
+                  "exclusiveMin": undefined,
+                  "max": undefined,
+                  "min": 0,
+                  "multipleOf": undefined,
+                },
+              },
+              "currency": {
+                "docs": "The currency of the transaction in ISO 4217 format",
+                "type": "Currency",
+              },
+              "date": {
+                "docs": "The date that the transaction was posted. Uses ISO 8601 format (YYYY-MM-DD)",
+                "type": "string",
+                "validation": {
+                  "format": "date",
+                  "maxLength": undefined,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "description": {
+                "docs": "The description string of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 1024,
+                  "minLength": 0,
+                  "pattern": undefined,
+                },
+              },
+              "entry_type": {
+                "docs": "The direction of the flow of the money from the perspective of the account holder. `outgoing` to represent money leaving the account, such as purchases or fees, while `incoming` represents money entering the account, such as income or refunds.",
+                "type": "EntryType",
+              },
+              "id": {
+                "docs": "A unique identifier of the transaction",
+                "type": "string",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": undefined,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+              "location": {
+                "type": "optional<LocationInput>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ValidationError": {
+            "docs": undefined,
+            "properties": {
+              "loc": {
+                "type": "list<ValidationErrorLocItem>",
+              },
+              "msg": "string",
+              "type": "string",
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "ValidationErrorLocItem": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              "string",
+              "integer",
+            ],
+          },
+          "Webhook": {
+            "docs": undefined,
+            "properties": {
+              "created_at": {
+                "docs": "The date and time when the webhook was created.",
+                "type": "datetime",
+              },
+              "enabled": {
+                "docs": "Whether the webhook is enabled or not.",
+                "type": "boolean",
+              },
+              "events": {
+                "docs": "A list of events that this webhook subscribes to",
+                "type": "list<WebhookEventsItem>",
+              },
+              "id": {
+                "docs": "A generated unique identifier for the webhook",
+                "type": "string",
+              },
+              "token": {
+                "docs": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                "type": "optional<string>",
+                "validation": {
+                  "format": undefined,
+                  "maxLength": 128,
+                  "minLength": undefined,
+                  "pattern": undefined,
+                },
+              },
+              "url": {
+                "docs": "The URL of the webhook",
+                "type": "string",
+                "validation": {
+                  "format": "uri",
+                  "maxLength": 1024,
+                  "minLength": 1,
+                  "pattern": undefined,
+                },
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "WebhookEventsItem": {
+            "enum": [
+              {
+                "name": "ReportsResolved",
+                "value": "reports.resolved",
+              },
+              {
+                "name": "ReportsRejected",
+                "value": "reports.rejected",
+              },
+              {
+                "name": "ReportsPending",
+                "value": "reports.pending",
+              },
+              {
+                "name": "BankStatementsCompleted",
+                "value": "bank_statements.completed",
+              },
+              {
+                "name": "BankStatementsError",
+                "value": "bank_statements.error",
+              },
+              {
+                "name": "BatchesCompleted",
+                "value": "batches.completed",
+              },
+              {
+                "name": "BatchesError",
+                "value": "batches.error",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "action": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              {
+                "type": "if",
+              },
+              {
+                "type": "ModifyLabels",
+              },
+              {
+                "type": "set",
+              },
+            ],
+          },
+          "expression": {
+            "discriminated": false,
+            "docs": undefined,
+            "encoding": undefined,
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+            "union": [
+              "boolean",
+              "string",
+              "double",
+              "FnCall",
+            ],
+          },
+          "if": {
+            "docs": undefined,
+            "properties": {
+              "else": {
+                "type": "optional<list<action>>",
+              },
+              "if": {
+                "type": "expression",
+              },
+              "then": {
+                "type": "optional<list<action>>",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "properties": {
+            "enum": [
+              "logo",
+              "website",
+              "merchant",
+              "description",
+              "merchant_id",
+              "location",
+              "person",
+              "transaction_type",
+              "amount",
+              "entry_type",
+              "account_holder_type",
+              "account_holder_id",
+              "account_holder_name",
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "set": {
+            "docs": undefined,
+            "properties": {
+              "set": {
+                "type": "EditableTxProp",
+              },
+              "to": {
+                "type": "expression",
+              },
+            },
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+        },
+      },
+      "rawContents": "errors:
+  NotFoundError:
+    status-code: 404
+    type: unknown
+    docs: Transaction with the provided id not found.
+  UnprocessableEntityError:
+    status-code: 422
+    type: HTTPValidationError
+    docs: Validation Error
+    examples:
+      - value: {}
+  BadRequestError:
+    status-code: 400
+    type: unknown
+    docs: Account holder with the provided id already exists.
+  ContentTooLargeError:
+    status-code: 413
+    type: unknown
+    docs: Ruleset was larger than 50KiB
+  LockedError:
+    status-code: 423
+    type: unknown
+    docs: Not enough credits.
+types:
+  Account:
+    properties:
+      type:
+        type: optional<string>
+      number:
+        type: optional<string>
+      opening_balance:
+        type: optional<double>
+      closing_balance:
+        type: optional<double>
+      iso_currency_code:
+        type: optional<string>
+    source:
+      openapi: ../openapi.yml
+  AccountHolder:
+    properties:
+      type:
+        type: optional<AccountType>
+      name:
+        type: optional<string>
+      address:
+        type: optional<Address>
+    source:
+      openapi: ../openapi.yml
+  AccountHolderExternal:
+    properties:
+      id:
+        type: string
+        docs: The unique ID of the account holder of the transaction
+        validation:
+          minLength: 1
+      type:
+        type: AccountHolderType
+        docs: 'The type of the account holder. '
+      name:
+        type: optional<string>
+        docs: The name of the account holder
+      created_at:
+        type: datetime
+        docs: The timestamp of when the account holder was created.
+    source:
+      openapi: ../openapi.yml
+  AccountHolderType:
+    enum:
+      - consumer
+      - business
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  AccountType:
+    enum:
+      - consumer
+      - business
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  AccountingCategory:
+    enum:
+      - value: operational expenses
+        name: OperationalExpenses
+      - value: cost of goods sold
+        name: CostOfGoodsSold
+      - revenue
+      - financing
+      - taxes
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  ActionModel:
+    type: action
+  Address:
+    properties:
+      street:
+        type: optional<string>
+      postcode:
+        type: optional<string>
+      city:
+        type: optional<string>
+      state:
+        type: optional<string>
+      country:
+        type: optional<string>
+    source:
+      openapi: ../openapi.yml
+  BankStatement:
+    docs: Represents a bank statement with details about the file and its status.
+    properties:
+      id:
+        type: string
+        docs: A unique identifier for the bank statement job.
+      name:
+        type: optional<string>
+        docs: The name of the bank statement file, if available.
+      status:
+        type: BankStatementStatus
+        docs: The current status of the document.
+      created_at:
+        type: datetime
+        docs: The date and time when the job was created.
+      file:
+        type: BankStatementFile
+        docs: Information about the bank statement file being processed.
+      error:
+        type: optional<BankStatementError>
+    source:
+      openapi: ../openapi.yml
+  BankStatementAccount:
+    properties:
+      number:
+        type: optional<string>
+        docs: The account number, if available.
+      opening_balance:
+        type: optional<double>
+        docs: The opening balance of the account for the statement period.
+      closing_balance:
+        type: optional<double>
+        docs: The closing balance of the account for the statement period.
+      start_date:
+        type: optional<string>
+        docs: The start date of the statement period.
+        validation:
+          format: date
+      end_date:
+        type: optional<string>
+        docs: The end date of the statement period.
+        validation:
+          format: date
+      is_balance_reconciled:
+        type: optional<boolean>
+        docs: Indicates whether the balance has been reconciled.
+      total_incoming:
+        type: optional<double>
+        docs: The sum of amounts of all incoming transactions.
+      total_outgoing:
+        type: optional<double>
+        docs: The sum of amounts of all outgoing transactions.
+      transactions:
+        docs: List of transactions for this account.
+        type: list<BankStatementTransaction>
+    source:
+      openapi: ../openapi.yml
+  BankStatementError:
+    properties:
+      code:
+        type: BankStatementErrorCode
+      message: string
+    source:
+      openapi: ../openapi.yml
+  BankStatementErrorCode:
+    enum:
+      - invalid_bank_statement
+      - internal_error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  BankStatementFile:
+    properties:
+      no_pages:
+        type: integer
+        docs: The number of pages in the bank statement file.
+      size:
+        type: optional<integer>
+        docs: The size of the bank statement file in bytes, if available.
+    source:
+      openapi: ../openapi.yml
+  BankStatementResults:
+    properties:
+      accounts:
+        docs: List of accounts in the bank statement.
+        type: list<BankStatementAccount>
+    source:
+      openapi: ../openapi.yml
+  BankStatementStatus:
+    enum:
+      - processing
+      - completed
+      - error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  BankStatementTransaction:
+    properties:
+      id:
+        type: string
+        docs: A unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: The description string of the transaction
+        validation:
+          minLength: 0
+          maxLength: 1024
+      date:
+        type: string
+        docs: >-
+          The date that the transaction was posted. Uses ISO 8601 format
+          (YYYY-MM-DD)
+        validation:
+          format: date
+      amount:
+        type: double
+        docs: >-
+          The amount of the transaction in the `currency`. Must be a positive
+          value. For example, if the `currency` is USD, then it's the amount in
+          dollars.
+        validation:
+          min: 0
+      entry_type:
+        type: EntryType
+        docs: >-
+          The direction of the flow of the money from the perspective of the
+          account holder. `outgoing` to represent money leaving the account,
+          such as purchases or fees, while `incoming` represents money entering
+          the account, such as income or refunds.
+      currency:
+        type: Currency
+        docs: The currency of the transaction in ISO 4217 format
+      running_balance:
+        type: optional<double>
+        docs: The account's balance when this transaction was performed
+    source:
+      openapi: ../openapi.yml
+  Batch:
+    docs: >-
+      The `Batch` object represents the status and progress of an asynchronous
+      batch enrichment job.
+    properties:
+      id:
+        type: string
+        docs: A unique identifier for the batch.
+      status:
+        type: BatchStatus
+        docs: >-
+          The current status of the batch. A batch will error if at least one of
+          the transactions contains an error.
+      created_at:
+        type: datetime
+        docs: The timestamp of when the batch was created.
+      updated_at:
+        type: datetime
+        docs: The timestamp of when the batch was last updated.
+      progress:
+        type: integer
+        docs: The number of transactions processed so far.
+      total:
+        type: integer
+        docs: The total number of transactions in the batch.
+    source:
+      openapi: ../openapi.yml
+  BatchResult:
+    docs: >-
+      The `BatchResult` object represents the result of a batch enrichment job,
+      including its status and
+
+      enriched transactions.
+    properties:
+      id:
+        type: string
+        docs: A unique identifier for the batch.
+      total:
+        type: integer
+        docs: The total number of transactions in the batch result.
+      status:
+        type: BatchStatus
+        docs: The current status of the batch job.
+      results:
+        type: EnrichmentResult
+    source:
+      openapi: ../openapi.yml
+  BatchStatus:
+    enum:
+      - processing
+      - completed
+      - error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Categories:
+    properties:
+      general:
+        type: optional<string>
+        docs: >-
+          The category of the transaction. View the valid set of categories for
+          your key [here](./docs/v3/enrichment/entities).
+      accounting:
+        type: optional<AccountingCategory>
+        docs: >-
+          The corresponding accounting category. Only available for `business`
+          transactions.
+    source:
+      openapi: ../openapi.yml
+  CategoryConfidence:
+    enum:
+      - high
+      - medium
+      - low
+      - unknown
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  CategorySet:
+    properties:
+      incoming:
+        type: list<string>
+      outgoing:
+        type: list<string>
+    source:
+      openapi: ../openapi.yml
+  Counterparty:
+    properties:
+      id:
+        type: optional<string>
+        docs: The unique UUID identifier of the entity
+      name:
+        type: optional<string>
+        docs: The name of the entity
+      website:
+        type: optional<string>
+        docs: The website URL of the entity
+      logo:
+        type: optional<string>
+        docs: Logo's URL
+      mccs:
+        type: optional<list<integer>>
+        docs: >-
+          A list of [Merchant Category
+          Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+      type:
+        type: CounterpartyType
+    source:
+      openapi: ../openapi.yml
+  CounterpartyType:
+    enum:
+      - person
+      - organization
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Country:
+    enum:
+      - AD
+      - AE
+      - AF
+      - AG
+      - AI
+      - AL
+      - AM
+      - AO
+      - AR
+      - AS
+      - AT
+      - AU
+      - AW
+      - AZ
+      - BA
+      - BB
+      - BD
+      - BE
+      - BF
+      - BG
+      - BH
+      - BI
+      - BJ
+      - BL
+      - BM
+      - BN
+      - BO
+      - BQ
+      - BR
+      - BS
+      - BT
+      - BV
+      - BW
+      - BY
+      - BZ
+      - CA
+      - CC
+      - CD
+      - CF
+      - CG
+      - CH
+      - CI
+      - CK
+      - CL
+      - CM
+      - CN
+      - CO
+      - CR
+      - CU
+      - CV
+      - CW
+      - CX
+      - CY
+      - CZ
+      - DE
+      - DJ
+      - DK
+      - DM
+      - DO
+      - DZ
+      - EC
+      - EE
+      - EG
+      - EH
+      - ER
+      - ES
+      - ET
+      - FI
+      - FJ
+      - FK
+      - FM
+      - FR
+      - GA
+      - GB
+      - GD
+      - GE
+      - GF
+      - GG
+      - GH
+      - GI
+      - GL
+      - GM
+      - GN
+      - GP
+      - GQ
+      - GR
+      - GS
+      - GT
+      - GU
+      - GW
+      - GY
+      - HK
+      - HM
+      - HN
+      - HR
+      - HT
+      - HU
+      - ID
+      - IE
+      - IL
+      - IM
+      - IN
+      - IO
+      - IQ
+      - IR
+      - IS
+      - IT
+      - JE
+      - JM
+      - JO
+      - JP
+      - KE
+      - KG
+      - KH
+      - KI
+      - KM
+      - KN
+      - KP
+      - KR
+      - KW
+      - KY
+      - KZ
+      - LA
+      - LB
+      - LC
+      - LI
+      - LK
+      - LR
+      - LS
+      - LT
+      - LU
+      - LV
+      - LY
+      - MA
+      - MC
+      - MD
+      - ME
+      - MF
+      - MG
+      - MH
+      - MK
+      - ML
+      - MM
+      - MN
+      - MO
+      - MP
+      - MQ
+      - MR
+      - MS
+      - MT
+      - MU
+      - MV
+      - MW
+      - MX
+      - MY
+      - MZ
+      - NA
+      - NC
+      - NE
+      - NF
+      - NG
+      - NI
+      - NL
+      - 'NO'
+      - NP
+      - NR
+      - NU
+      - NZ
+      - OM
+      - PA
+      - PE
+      - PF
+      - PG
+      - PH
+      - PK
+      - PL
+      - PM
+      - PN
+      - PR
+      - PS
+      - PT
+      - PW
+      - PY
+      - QA
+      - RE
+      - RO
+      - RS
+      - RU
+      - RW
+      - SA
+      - SB
+      - SC
+      - SD
+      - SE
+      - SG
+      - SH
+      - SI
+      - SJ
+      - SK
+      - SL
+      - SM
+      - SN
+      - SO
+      - SR
+      - SS
+      - ST
+      - SV
+      - SX
+      - SY
+      - SZ
+      - TC
+      - TD
+      - TG
+      - TH
+      - TJ
+      - TK
+      - TL
+      - TM
+      - TN
+      - TO
+      - TR
+      - TT
+      - TV
+      - TW
+      - TZ
+      - UA
+      - UG
+      - UM
+      - US
+      - UY
+      - UZ
+      - VC
+      - VE
+      - VG
+      - VI
+      - VN
+      - VU
+      - WF
+      - WS
+      - YE
+      - YT
+      - ZA
+      - ZM
+      - ZW
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Currency:
+    enum:
+      - EUR
+      - AED
+      - AFN
+      - XCD
+      - ALL
+      - AMD
+      - AOA
+      - ARS
+      - USD
+      - AUD
+      - AWG
+      - AZN
+      - BAM
+      - BBD
+      - BDT
+      - XOF
+      - BGN
+      - BHD
+      - BIF
+      - BMD
+      - BND
+      - BOB
+      - BRL
+      - BSD
+      - INR
+      - NOK
+      - BWP
+      - BYR
+      - BZD
+      - CAD
+      - CDF
+      - XAF
+      - CHF
+      - NZD
+      - CLP
+      - CNY
+      - COP
+      - CRC
+      - CUP
+      - CVE
+      - ANG
+      - CZK
+      - DJF
+      - DKK
+      - DOP
+      - DZD
+      - EGP
+      - MAD
+      - ERN
+      - ETB
+      - FJD
+      - FKP
+      - GBP
+      - GEL
+      - GHS
+      - GIP
+      - GMD
+      - GNF
+      - GTQ
+      - GYD
+      - HKD
+      - HNL
+      - HUF
+      - IDR
+      - ILS
+      - IQD
+      - IRR
+      - ISK
+      - JMD
+      - JOD
+      - JPY
+      - KES
+      - KGS
+      - KHR
+      - KMF
+      - KPW
+      - KRW
+      - KWD
+      - KYD
+      - KZT
+      - LAK
+      - LBP
+      - LKR
+      - LRD
+      - ZAR
+      - LYD
+      - MDL
+      - MGA
+      - MKD
+      - MMK
+      - MNT
+      - MOP
+      - MRO
+      - MUR
+      - MVR
+      - MWK
+      - MXN
+      - MYR
+      - MZN
+      - XPF
+      - NGN
+      - NIO
+      - NPR
+      - OMR
+      - PEN
+      - PGK
+      - PHP
+      - PKR
+      - PLN
+      - PYG
+      - QAR
+      - RON
+      - RSD
+      - RUB
+      - RWF
+      - SAR
+      - SBD
+      - SCR
+      - SDG
+      - SEK
+      - SGD
+      - SHP
+      - SLL
+      - SOS
+      - SRD
+      - SSP
+      - STD
+      - SYP
+      - SZL
+      - THB
+      - TJS
+      - TMT
+      - TND
+      - TOP
+      - TRY
+      - TTD
+      - TWD
+      - TZS
+      - UAH
+      - UGX
+      - UYU
+      - UZS
+      - VEF
+      - VND
+      - VUV
+      - WST
+      - YER
+      - ZMW
+      - ZWL
+      - HRK
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  CustomCategorySet:
+    properties:
+      incoming:
+        type: list<string>
+      outgoing:
+        type: list<string>
+    source:
+      openapi: ../openapi.yml
+  DocumentStatus:
+    enum:
+      - queued
+      - processing
+      - processed
+      - failed
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  EnrichedTransaction:
+    properties:
+      entities:
+        type: optional<Entities>
+      categories:
+        type: optional<Categories>
+      location:
+        type: optional<Location>
+      error:
+        type: optional<TransactionError>
+      created_at:
+        type: datetime
+        docs: The timestamp of when the account holder was created.
+      id:
+        type: string
+        docs: >-
+          A unique identifier for the transaction. If two transactions are
+          submitted with the same `id` the most recent one will replace the
+          previous one.
+        validation:
+          minLength: 1
+    source:
+      openapi: ../openapi.yml
+  EnrichmentResult:
+    properties:
+      transactions:
+        docs: >-
+          A list of enriched transactions resulting from the enrichment of this
+          batch.
+        type: list<EnrichedTransaction>
+    source:
+      openapi: ../openapi.yml
+  Entities:
+    docs: Entities found by identity identification
+    properties:
+      counterparty:
+        type: optional<Counterparty>
+      intermediaries:
+        type: optional<list<Intermediary>>
+    source:
+      openapi: ../openapi.yml
+  Entity:
+    properties:
+      id:
+        type: optional<string>
+        docs: The unique UUID identifier of the entity
+      name:
+        type: optional<string>
+        docs: The name of the entity
+      website:
+        type: optional<string>
+        docs: The website URL of the entity
+      logo:
+        type: optional<string>
+        docs: Logo's URL
+      mccs:
+        type: optional<list<integer>>
+        docs: >-
+          A list of [Merchant Category
+          Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+    source:
+      openapi: ../openapi.yml
+  EntryType:
+    enum:
+      - incoming
+      - outgoing
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  FilterModel:
+    type: Filter
+  HTTPValidationError:
+    properties:
+      detail:
+        type: optional<list<ValidationError>>
+    source:
+      openapi: ../openapi.yml
+  Intermediary:
+    properties:
+      id:
+        type: optional<string>
+        docs: The unique UUID identifier of the entity
+      name:
+        type: optional<string>
+        docs: The name of the entity
+      website:
+        type: optional<string>
+        docs: The website URL of the entity
+      logo:
+        type: optional<string>
+        docs: Logo's URL
+      mccs:
+        type: optional<list<integer>>
+        docs: >-
+          A list of [Merchant Category
+          Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+      type:
+        type: IntermediaryType
+    source:
+      openapi: ../openapi.yml
+  IntermediaryType:
+    enum:
+      - delivery_service
+      - payment_processor
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Location:
+    properties:
+      raw_address:
+        type: optional<string>
+        docs: An unstructured string containing the address
+      structured:
+        type: optional<LocationStructured>
+        docs: When raw is set, a structured representation of it.
+    source:
+      openapi: ../openapi.yml
+  LocationInput:
+    docs: >-
+      Location of where the transaction has taken place. This can greatly
+      improve entity identification, especially
+
+      under ambiguity.
+    properties:
+      raw_address:
+        type: optional<string>
+        docs: An unstructured string containing the address
+      country:
+        type: Country
+        docs: The country where the transaction was made in ISO 3166-2 format
+    source:
+      openapi: ../openapi.yml
+  LocationStructured:
+    properties:
+      street:
+        type: optional<string>
+        docs: The street name and number of the location
+      city:
+        type: optional<string>
+        docs: The city where the location is situated
+      state:
+        type: optional<string>
+        docs: The state or region of the location
+      postcode:
+        type: optional<string>
+        docs: The postal code or ZIP code of the location
+      country_code:
+        type: optional<string>
+        docs: The country code of the location in ISO 3166-2 format
+      country:
+        type: optional<string>
+        docs: The full name of the country
+      latitude:
+        type: optional<double>
+        docs: The latitude coordinate of the location
+      longitude:
+        type: optional<double>
+        docs: The longitude coordinate of the location
+      google_maps_url:
+        type: optional<string>
+        docs: A URL link to view the location on Google Maps
+      apple_maps_url:
+        type: optional<string>
+        docs: A URL link to view the location on Apple Maps
+      store_number:
+        type: optional<string>
+        docs: A unique identifier for a specific store or branch, if applicable
+    source:
+      openapi: ../openapi.yml
+  PagedResponseAccountHolderExternal:
+    properties:
+      next_cursor: string
+      data:
+        type: list<AccountHolderExternal>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseBankStatement:
+    properties:
+      next_cursor: string
+      data:
+        type: list<BankStatement>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseBatch:
+    properties:
+      next_cursor: string
+      data:
+        type: list<Batch>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseReport:
+    properties:
+      next_cursor:
+        type: optional<string>
+      data:
+        type: list<Report>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseTransaction:
+    properties:
+      next_cursor: string
+      data:
+        type: list<Transaction>
+    source:
+      openapi: ../openapi.yml
+  PagedResponseWebhook:
+    properties:
+      next_cursor: string
+      data:
+        type: list<Webhook>
+    source:
+      openapi: ../openapi.yml
+  Recurrence:
+    docs: >-
+      The `Recurrence` object represents the recurrence pattern of a
+      transaction. It provides information about
+
+      whether a transaction is a one-time event or a part of a recurring series.
+    properties:
+      type:
+        type: RecurrenceType
+        docs: >-
+          Whether the transaction is a one-time transfer `one-off`, regularly
+          with varying pricing `recurring` or with fixed pricing `subscription`
+    source:
+      openapi: ../openapi.yml
+  RecurrenceGroup:
+    properties:
+      id:
+        type: string
+        docs: A unique UUID identifier for the group
+      start_date:
+        type: string
+        docs: The date of the oldest transaction in the group
+        validation:
+          format: date
+      end_date:
+        type: string
+        docs: The date of the most recent transaction in the group
+        validation:
+          format: date
+      total_amount:
+        type: double
+        docs: The sum of all transaction amounts in this group
+      average_amount:
+        type: double
+        docs: The average amount per transaction in this group
+      periodicity_in_days:
+        type: double
+        docs: The estimated number of days between transactions in this group
+      periodicity:
+        type: RecurrencePeriodicity
+        docs: A human-readable description of the transaction frequency
+      counterparty:
+        type: Counterparty
+        docs: Counterparty of the transactions
+      categories:
+        type: Categories
+        docs: Categories of the transactions in the recurrence group
+      transaction_ids:
+        docs: Transactions in this recurrence group
+        type: list<string>
+    source:
+      openapi: ../openapi.yml
+  RecurrencePeriodicity:
+    enum:
+      - daily
+      - weekly
+      - bi_weekly
+      - monthly
+      - bi_monthly
+      - quarterly
+      - semi_yearly
+      - yearly
+      - other
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  RecurrenceType:
+    enum:
+      - recurring
+      - subscription
+      - value: one off
+        name: OneOff
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  Report:
+    properties:
+      transaction_id:
+        type: string
+        docs: The unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: A description of what is wrong in the transaction
+      fields:
+        docs: A list of the fields that are incorrect
+        type: list<string>
+      id:
+        type: string
+        docs: A generated unique identifier for the report.
+      created_at:
+        type: datetime
+        docs: The date and time when the report was created.
+      status:
+        type: ReportStatus
+        docs: >-
+          The status of the report.
+
+
+          * `open`: a newly created report
+
+          * `pending`: the report is being investigated
+
+          * `rejected`: the original enrichment output was deemed correct or we
+          couldn't resolve it, check `rejection_reason`
+
+          * `resolved`: the issue has been resolved
+      rejection_reason:
+        type: optional<string>
+        docs: An explanation of why the report was rejected
+    source:
+      openapi: ../openapi.yml
+  ReportStatus:
+    enum:
+      - open
+      - pending
+      - resolved
+      - rejected
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  StatementInfo:
+    properties:
+      institution:
+        type: optional<string>
+      start_date:
+        type: optional<string>
+        validation:
+          format: date
+      end_date:
+        type: optional<string>
+        validation:
+          format: date
+      account_holder:
+        type: optional<AccountHolder>
+      accounts:
+        type: optional<list<Account>>
+    source:
+      openapi: ../openapi.yml
+  SyncEnrichmentOutput:
+    properties:
+      transactions:
+        docs: >-
+          A list of enriched transactions resulting from the enrichment of this
+          batch.
+        type: list<EnrichedTransaction>
+    source:
+      openapi: ../openapi.yml
+  Transaction:
+    properties:
+      id:
+        type: string
+        docs: A unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: The description string of the transaction
+        validation:
+          minLength: 0
+          maxLength: 1024
+      date:
+        type: string
+        docs: >-
+          The date that the transaction was posted. Uses ISO 8601 format
+          (YYYY-MM-DD)
+        validation:
+          format: date
+      amount:
+        type: double
+        docs: >-
+          The amount of the transaction in the `currency`. Must be a positive
+          value. For example, if the `currency` is USD, then it's the amount in
+          dollars.
+        validation:
+          min: 0
+      entry_type:
+        type: EntryType
+        docs: >-
+          The direction of the flow of the money from the perspective of the
+          account holder. `outgoing` to represent money leaving the account,
+          such as purchases or fees, while `incoming` represents money entering
+          the account, such as income or refunds.
+      currency:
+        type: Currency
+        docs: The currency of the transaction in ISO 4217 format
+      entities:
+        type: optional<Entities>
+      categories:
+        type: optional<Categories>
+      location:
+        type: optional<Location>
+      error:
+        type: optional<TransactionError>
+      created_at:
+        type: datetime
+        docs: The timestamp of when the account holder was created.
+      account_holder_id:
+        type: optional<string>
+        docs: The unique ID of the account holder of the transaction
+        validation:
+          minLength: 1
+      recurrence:
+        type: optional<Recurrence>
+    source:
+      openapi: ../openapi.yml
+  TransactionError:
+    properties:
+      code:
+        type: TransactionErrorCode
+      message: string
+    source:
+      openapi: ../openapi.yml
+  TransactionErrorCode:
+    enum:
+      - account_holder_not_found
+      - internal_error
+    docs: An enumeration.
+    source:
+      openapi: ../openapi.yml
+  TransactionInput:
+    properties:
+      id:
+        type: string
+        docs: A unique identifier of the transaction
+        validation:
+          minLength: 1
+      description:
+        type: string
+        docs: The description string of the transaction
+        validation:
+          minLength: 0
+          maxLength: 1024
+      date:
+        type: string
+        docs: >-
+          The date that the transaction was posted. Uses ISO 8601 format
+          (YYYY-MM-DD)
+        validation:
+          format: date
+      amount:
+        type: double
+        docs: >-
+          The amount of the transaction in the `currency`. Must be a positive
+          value. For example, if the `currency` is USD, then it's the amount in
+          dollars.
+        validation:
+          min: 0
+      entry_type:
+        type: EntryType
+        docs: >-
+          The direction of the flow of the money from the perspective of the
+          account holder. `outgoing` to represent money leaving the account,
+          such as purchases or fees, while `incoming` represents money entering
+          the account, such as income or refunds.
+      currency:
+        type: Currency
+        docs: The currency of the transaction in ISO 4217 format
+      account_holder_id:
+        type: string
+        docs: >-
+          The unique ID of the account holder. Unsetting it will disable
+          [categorization](./docs/v3/enrichment/entities).
+      location:
+        type: optional<LocationInput>
+    source:
+      openapi: ../openapi.yml
+  ValidationErrorLocItem:
+    discriminated: false
+    union:
+      - string
+      - integer
+    source:
+      openapi: ../openapi.yml
+  ValidationError:
+    properties:
+      loc:
+        type: list<ValidationErrorLocItem>
+      msg: string
+      type: string
+    source:
+      openapi: ../openapi.yml
+  WebhookEventsItem:
+    enum:
+      - value: reports.resolved
+        name: ReportsResolved
+      - value: reports.rejected
+        name: ReportsRejected
+      - value: reports.pending
+        name: ReportsPending
+      - value: bank_statements.completed
+        name: BankStatementsCompleted
+      - value: bank_statements.error
+        name: BankStatementsError
+      - value: batches.completed
+        name: BatchesCompleted
+      - value: batches.error
+        name: BatchesError
+    source:
+      openapi: ../openapi.yml
+  Webhook:
+    properties:
+      url:
+        type: string
+        docs: The URL of the webhook
+        validation:
+          format: uri
+          minLength: 1
+          maxLength: 1024
+      events:
+        docs: A list of events that this webhook subscribes to
+        type: list<WebhookEventsItem>
+      token:
+        type: optional<string>
+        docs: >-
+          A secret string used to authenticate the webhook. This value will be
+          included in the `X-Ntropy-Token` header when sending requests to the
+          webhook
+        validation:
+          maxLength: 128
+      id:
+        type: string
+        docs: A generated unique identifier for the webhook
+      created_at:
+        type: datetime
+        docs: The date and time when the webhook was created.
+      enabled:
+        type: boolean
+        docs: Whether the webhook is enabled or not.
+    source:
+      openapi: ../openapi.yml
+  expression:
+    discriminated: false
+    union:
+      - boolean
+      - string
+      - double
+      - FnCall
+    source:
+      openapi: ../openapi.yml
+  properties:
+    enum:
+      - logo
+      - website
+      - merchant
+      - description
+      - merchant_id
+      - location
+      - person
+      - transaction_type
+      - amount
+      - entry_type
+      - account_holder_type
+      - account_holder_id
+      - account_holder_name
+    source:
+      openapi: ../openapi.yml
+  FnCall&&:
+    properties:
+      '&&': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall||:
+    properties:
+      '||': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall==:
+    properties:
+      '==': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall+:
+    properties:
+      +: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall-:
+    properties:
+      '-': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall*:
+    properties:
+      '*': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall/:
+    properties:
+      /: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall//:
+    properties:
+      //: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall<:
+    properties:
+      <: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall<=:
+    properties:
+      <=: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall>:
+    properties:
+      '>': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall>=:
+    properties:
+      '>=': list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCall!:
+    properties:
+      '!':
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallIsSubstring:
+    properties:
+      is_substring: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCallStartsWith:
+    properties:
+      starts_with: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCallEndsWith:
+    properties:
+      ends_with: list<expression>
+    source:
+      openapi: ../openapi.yml
+  FnCallToLower:
+    properties:
+      to_lower:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallToUpper:
+    properties:
+      to_upper:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallHasLabel:
+    properties:
+      has_label:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallHasMcc:
+    properties:
+      has_mcc:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  FnCallGet:
+    properties:
+      get:
+        type: properties
+    source:
+      openapi: ../openapi.yml
+  FnCall:
+    discriminated: false
+    union:
+      - type: FnCall&&
+      - type: FnCall||
+      - type: FnCall==
+      - type: FnCall+
+      - type: FnCall-
+      - type: FnCall*
+      - type: FnCall/
+      - type: FnCall//
+      - type: FnCall<
+      - type: FnCall<=
+      - type: FnCall>
+      - type: FnCall>=
+      - type: FnCall!
+      - type: FnCallIsSubstring
+      - type: FnCallStartsWith
+      - type: FnCallEndsWith
+      - type: FnCallToLower
+      - type: FnCallToUpper
+      - type: FnCallHasLabel
+      - type: FnCallHasMcc
+      - type: FnCallGet
+    source:
+      openapi: ../openapi.yml
+  action:
+    discriminated: false
+    union:
+      - type: if
+      - type: ModifyLabels
+      - type: set
+    source:
+      openapi: ../openapi.yml
+  if:
+    properties:
+      if:
+        type: expression
+      then:
+        type: optional<list<action>>
+      else:
+        type: optional<list<action>>
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsAddLabel:
+    properties:
+      add_label:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsRemoveLabel:
+    properties:
+      remove_label:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsSetLabels:
+    properties:
+      set_labels: list<expression>
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsAddMcc:
+    properties:
+      add_mcc:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsRemoveMcc:
+    properties:
+      remove_mcc:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  ModifyLabelsSetMcc:
+    properties:
+      set_mcc: list<expression>
+    source:
+      openapi: ../openapi.yml
+  ModifyLabels:
+    discriminated: false
+    union:
+      - type: ModifyLabelsAddLabel
+      - type: ModifyLabelsRemoveLabel
+      - type: ModifyLabelsSetLabels
+      - type: ModifyLabelsAddMcc
+      - type: ModifyLabelsRemoveMcc
+      - type: ModifyLabelsSetMcc
+    source:
+      openapi: ../openapi.yml
+  EditableTxProp:
+    enum:
+      - logo
+      - website
+      - merchant
+      - merchant_id
+      - location
+      - person
+      - transaction_type
+    source:
+      openapi: ../openapi.yml
+  set:
+    properties:
+      set:
+        type: EditableTxProp
+      to:
+        type: expression
+    source:
+      openapi: ../openapi.yml
+  Filter:
+    type: list<action>
+",
+    },
+    "accountHolders.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Account Holder API allows you to retrieve, create and modify account holders. An account holder represents an
+entity that holds an account associated with transactions. An account holder can either be a business or an individual
+person - consumer.
+
+The fields chosen for an account holder are used by our enrichment process and can dramatically improve the accuracy
+of the results. 
+
+Complete guide: [Account Holders](../../../account-holders).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Account Holders",
+          "endpoints": {
+            "createAccountHolder": {
+              "auth": true,
+              "display-name": "Create an account holder.",
+              "docs": undefined,
+              "errors": [
+                "root.BadRequestError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/account_holders" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        "type": "consumer",
+        "name": "John Doe"
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.create(
+    id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+    type="consumer",
+    name="John Doe",
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "id": "id",
+                    "type": "consumer",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "name": "John Doe",
+                      "type": "consumer",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/account_holders",
+              "request": {
+                "body": {
+                  "properties": {
+                    "id": {
+                      "docs": "The unique ID of the account holder of the transaction",
+                      "type": "string",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": undefined,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                    "name": {
+                      "docs": "The name of the account holder",
+                      "type": "optional<string>",
+                    },
+                    "type": {
+                      "docs": "The type of the account holder. ",
+                      "type": "root.AccountHolderType",
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "AccountHolderCreate",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.AccountHolderExternal",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "deleteAccountHolder": {
+              "auth": true,
+              "display-name": "Deletes an account holder and their transactions",
+              "docs": "Deletes all of the transactions in the account holder's history. This operation is permanent and irreversible",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.delete("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/account_holders/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getAccountHolder": {
+              "auth": true,
+              "display-name": "Retrieve an account holder.",
+              "docs": undefined,
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "name": "John Doe",
+                      "type": "consumer",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/account_holders/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.AccountHolderExternal",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getAccountHolders": {
+              "auth": true,
+              "display-name": "List all account holders.",
+              "docs": undefined,
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+ah = sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-03-30T00:00:00Z",
+                          "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                          "name": "John Doe",
+                          "type": "consumer",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/account_holders",
+              "request": {
+                "name": "GetAccountHoldersV3AccountHoldersGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return account holders older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return account holders newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of account holders",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of account holders to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseAccountHolderExternal",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getAccountHolder:
+      path: /v3/account_holders/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve an account holder.
+      response:
+        docs: Successful Response
+        type: root.AccountHolderExternal
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              type: consumer
+              name: John Doe
+              created_at: '2024-03-30T00:00:00Z'
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                ah =
+                sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") 
+    deleteAccountHolder:
+      path: /v3/account_holders/{id}
+      method: DELETE
+      auth: true
+      docs: >-
+        Deletes all of the transactions in the account holder's history. This
+        operation is permanent and irreversible
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Deletes an account holder and their transactions
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                ah =
+                sdk.account_holders.delete("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") 
+    getAccountHolders:
+      path: /v3/account_holders
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      display-name: List all account holders.
+      request:
+        name: GetAccountHoldersV3AccountHoldersGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return account holders older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return account holders newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of account holders
+          limit:
+            type: optional<integer>
+            docs: The limit of account holders to be returned
+            validation:
+              min: 1
+              max: 50
+      response:
+        docs: Successful Response
+        type: root.PagedResponseAccountHolderExternal
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                  type: consumer
+                  name: John Doe
+                  created_at: '2024-03-30T00:00:00Z'
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                ah =
+                sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") 
+    createAccountHolder:
+      path: /v3/account_holders
+      method: POST
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      display-name: Create an account holder.
+      request:
+        name: AccountHolderCreate
+        body:
+          properties:
+            id:
+              type: string
+              docs: The unique ID of the account holder of the transaction
+              validation:
+                minLength: 1
+            type:
+              type: root.AccountHolderType
+              docs: 'The type of the account holder. '
+            name:
+              type: optional<string>
+              docs: The name of the account holder
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.AccountHolderExternal
+      errors:
+        - root.BadRequestError
+        - root.UnprocessableEntityError
+      examples:
+        - request:
+            id: id
+            type: consumer
+          response:
+            body:
+              id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              type: consumer
+              name: John Doe
+              created_at: '2024-03-30T00:00:00Z'
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/account_holders" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "type": "consumer",
+                        "name": "John Doe"
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                ah = sdk.account_holders.create(
+                    id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                    type="consumer",
+                    name="John Doe",
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Account Holders
+docs: >
+
+  The Account Holder API allows you to retrieve, create and modify account
+  holders. An account holder represents an
+
+  entity that holds an account associated with transactions. An account holder
+  can either be a business or an individual
+
+  person - consumer.
+
+
+  The fields chosen for an account holder are used by our enrichment process and
+  can dramatically improve the accuracy
+
+  of the results. 
+
+
+  Complete guide: [Account Holders](../../../account-holders).
+",
+    },
+    "bankStatements.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Bank Statements API allows you to manage and extract information from bank statements. We support extraction of
+account holder information, account information and transaction records. Files should be uploaded in PDF format.
+
+During the extraction process, the bank statements undergo several status changes:
+|  Status  |                              Description                               |
+|----------|------------------------------------------------------------------------|
+|processing|The upload was successful. Extraction is in progress.                   |
+|completed |The extraction was successful. Results are available.                   |
+|error     |An error occurred during extraction. Check `error` for more information.|
+
+
+A list of error codes for the `error` status can be found below:
+|         Code         |                Description                |
+|----------------------|-------------------------------------------|
+|invalid_bank_statement|Failed to process file as a bank statement.|
+|internal_error        |Internal error. Please contact support.    |
+
+
+Complete guide: [Bank Statements](../../../bank-statements).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Bank statements",
+          "endpoints": {
+            "deleteBankStatement": {
+              "auth": true,
+              "display-name": "Deletes a bank statement",
+              "docs": undefined,
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatement": {
+              "auth": true,
+              "display-name": "Retrieve a bank statement",
+              "docs": undefined,
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+bs = sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "error": {
+                        "code": "invalid_bank_statement",
+                        "message": "message",
+                      },
+                      "file": {
+                        "no_pages": 1,
+                        "size": 4096,
+                      },
+                      "id": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                      "name": "2014-01-01_2014-02-01_statement.pdf",
+                      "status": "processing",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.BankStatement",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatementResult": {
+              "auth": true,
+              "display-name": "Retrieve the extraction results",
+              "docs": "Return the extracted account information and associated transactions from a bank statement PDF. The results are accessible once the statement's status is `completed`.",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/results" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+bs = sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b")
+results = sdk.bank_statements.wait_for_results(
+    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "accounts": [
+                        {
+                          "closing_balance": 200,
+                          "end_date": "2024-02-01",
+                          "is_balance_reconciled": true,
+                          "number": "972913289",
+                          "opening_balance": 400,
+                          "start_date": "2024-01-01",
+                          "total_incoming": 0,
+                          "total_outgoing": 200,
+                          "transactions": [
+                            {
+                              "amount": 200,
+                              "currency": "USD",
+                              "date": "2024-03-30",
+                              "description": "SQ* STARBUCKS NW 43RD",
+                              "entry_type": "outgoing",
+                              "id": "xbx8YP14g565Xk",
+                              "running_balance": 400,
+                            },
+                          ],
+                        },
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}/results",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.BankStatementResults",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatementStatementInfo": {
+              "auth": true,
+              "display-name": "Quickly extract account holder, institution and first account",
+              "docs": "Extracts account holder, bank and account information extracted from the first page of the bank statement, which is typically available before the full results. This is a synchronous call.
+
+Complete guide: [Overview](../../../bank-statements)",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/overview" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+overview = sdk.bank_statements.overview(
+    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "account_holder": {
+                        "address": {
+                          "city": "Victoria",
+                          "country": "United States",
+                          "postcode": "77901",
+                          "state": "Texas",
+                          "street": "601 Rosebud Avenue",
+                        },
+                        "name": "John Doe",
+                        "type": "consumer",
+                      },
+                      "accounts": [
+                        {
+                          "closing_balance": 1500,
+                          "iso_currency_code": "USD",
+                          "number": "83721",
+                          "opening_balance": 1000,
+                          "type": "checking",
+                        },
+                      ],
+                      "end_date": "2024-02-01",
+                      "institution": "Well's Fargo",
+                      "start_date": "2024-01-01",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/bank_statements/{id}/overview",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.StatementInfo",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBankStatements": {
+              "auth": true,
+              "display-name": "List all bank statements",
+              "docs": "Return a list of submitted bank statements starting with the most recent one.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/bank_statements" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+for bs in sdk.bank_statements.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-01-01T00:00:00Z",
+                          "error": {
+                            "code": "invalid_bank_statement",
+                            "message": "message",
+                          },
+                          "file": {
+                            "no_pages": 1,
+                            "size": 4096,
+                          },
+                          "id": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                          "name": "2014-01-01_2014-02-01_statement.pdf",
+                          "status": "processing",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/bank_statements",
+              "request": {
+                "name": "GetBankStatementsV3BankStatementsGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return bank statements older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return bank statements newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of bank statements",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of bank statements to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                  "status": {
+                    "docs": "If specified, only return bank statements with this status",
+                    "type": "optional<root.DocumentStatus>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseBankStatement",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postBankStatement": {
+              "auth": true,
+              "display-name": "Submit a bank statement PDF",
+              "docs": "Upload a PDF file and queue it for extraction.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+        "https://api.ntropy.com/v3/bank_statements" \
+        -H "Accept: application/json" \
+        -H "X-API-KEY: cd1H...Wmhl" \
+        --form file=@bank_statement.pdf
+    ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+with open('bank_statement.pdf', 'rb') as fh:
+    bank_statement = sdk.bank_statements.create(fh)
+    results = sdk.bank_statement.wait_for_results(bank_statement.id) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {},
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "error": {
+                        "code": "invalid_bank_statement",
+                        "message": "message",
+                      },
+                      "file": {
+                        "no_pages": 1,
+                        "size": 4096,
+                      },
+                      "id": "7f8dceac-2848-472d-b5c3-55cdbaf35a9b",
+                      "name": "2014-01-01_2014-02-01_statement.pdf",
+                      "status": "processing",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/bank_statements",
+              "request": {
+                "body": {
+                  "properties": {
+                    "file": "file",
+                  },
+                },
+                "content-type": "multipart/form-data",
+                "headers": undefined,
+                "name": "Body_post_bank_statement_v3_bank_statements_post",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.BankStatement",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getBankStatements:
+      path: /v3/bank_statements
+      method: GET
+      auth: true
+      docs: >-
+        Return a list of submitted bank statements starting with the most recent
+        one.
+      source:
+        openapi: ../openapi.yml
+      display-name: List all bank statements
+      request:
+        name: GetBankStatementsV3BankStatementsGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return bank statements older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return bank statements newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of bank statements
+          limit:
+            type: optional<integer>
+            docs: The limit of bank statements to be returned
+            validation:
+              min: 1
+              max: 50
+          status:
+            type: optional<root.DocumentStatus>
+            docs: If specified, only return bank statements with this status
+      response:
+        docs: Successful Response
+        type: root.PagedResponseBankStatement
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+                  name: 2014-01-01_2014-02-01_statement.pdf
+                  status: processing
+                  created_at: '2024-01-01T00:00:00Z'
+                  file:
+                    no_pages: 1
+                    size: 4096
+                  error:
+                    code: invalid_bank_statement
+                    message: message
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/bank_statements" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                for bs in sdk.bank_statements.list().auto_paginate():
+                    ... 
+    postBankStatement:
+      path: /v3/bank_statements
+      method: POST
+      auth: true
+      docs: Upload a PDF file and queue it for extraction.
+      source:
+        openapi: ../openapi.yml
+      display-name: Submit a bank statement PDF
+      request:
+        name: Body_post_bank_statement_v3_bank_statements_post
+        body:
+          properties:
+            file: file
+        content-type: multipart/form-data
+      response:
+        docs: Successful Response
+        type: root.BankStatement
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - request: {}
+          response:
+            body:
+              id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+              name: 2014-01-01_2014-02-01_statement.pdf
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              file:
+                no_pages: 1
+                size: 4096
+              error:
+                code: invalid_bank_statement
+                message: message
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                        "https://api.ntropy.com/v3/bank_statements" \
+                        -H "Accept: application/json" \
+                        -H "X-API-KEY: cd1H...Wmhl" \
+                        --form file=@bank_statement.pdf
+                    
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                with open('bank_statement.pdf', 'rb') as fh:
+                    bank_statement = sdk.bank_statements.create(fh)
+                    results = sdk.bank_statement.wait_for_results(bank_statement.id) 
+    getBankStatement:
+      path: /v3/bank_statements/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a bank statement
+      response:
+        docs: Successful Response
+        type: root.BankStatement
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+              name: 2014-01-01_2014-02-01_statement.pdf
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              file:
+                no_pages: 1
+                size: 4096
+              error:
+                code: invalid_bank_statement
+                message: message
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                bs =
+                sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b") 
+    deleteBankStatement:
+      path: /v3/bank_statements/{id}
+      method: DELETE
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Deletes a bank statement
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+    getBankStatementStatementInfo:
+      path: /v3/bank_statements/{id}/overview
+      method: POST
+      auth: true
+      docs: >-
+        Extracts account holder, bank and account information extracted from the
+        first page of the bank statement, which is typically available before
+        the full results. This is a synchronous call.
+
+
+        Complete guide: [Overview](../../../bank-statements)
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Quickly extract account holder, institution and first account
+      response:
+        docs: Successful Response
+        type: root.StatementInfo
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              institution: Well's Fargo
+              start_date: '2024-01-01'
+              end_date: '2024-02-01'
+              account_holder:
+                type: consumer
+                name: John Doe
+                address:
+                  street: 601 Rosebud Avenue
+                  postcode: '77901'
+                  city: Victoria
+                  state: Texas
+                  country: United States
+              accounts:
+                - type: checking
+                  number: '83721'
+                  opening_balance: 1000
+                  closing_balance: 1500
+                  iso_currency_code: USD
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/overview" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                overview = sdk.bank_statements.overview(
+                    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+                ) 
+    getBankStatementResult:
+      path: /v3/bank_statements/{id}/results
+      method: GET
+      auth: true
+      docs: >-
+        Return the extracted account information and associated transactions
+        from a bank statement PDF. The results are accessible once the
+        statement's status is `completed`.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve the extraction results
+      response:
+        docs: Successful Response
+        type: root.BankStatementResults
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              accounts:
+                - number: '972913289'
+                  opening_balance: 400
+                  closing_balance: 200
+                  start_date: '2024-01-01'
+                  end_date: '2024-02-01'
+                  is_balance_reconciled: true
+                  total_incoming: 0
+                  total_outgoing: 200
+                  transactions:
+                    - id: xbx8YP14g565Xk
+                      description: SQ* STARBUCKS NW 43RD
+                      date: '2024-03-30'
+                      amount: 200
+                      entry_type: outgoing
+                      currency: USD
+                      running_balance: 400
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/results" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                bs =
+                sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b")
+
+                results = sdk.bank_statements.wait_for_results(
+                    "7f8dceac-2848-472d-b5c3-55cdbaf35a9b"
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Bank statements
+docs: >
+
+  The Bank Statements API allows you to manage and extract information from bank
+  statements. We support extraction of
+
+  account holder information, account information and transaction records. Files
+  should be uploaded in PDF format.
+
+
+  During the extraction process, the bank statements undergo several status
+  changes:
+
+  |  Status  |                             
+  Description                               |
+
+  |----------|------------------------------------------------------------------------|
+
+  |processing|The upload was successful. Extraction is in
+  progress.                   |
+
+  |completed |The extraction was successful. Results are
+  available.                   |
+
+  |error     |An error occurred during extraction. Check `error` for more
+  information.|
+
+
+
+  A list of error codes for the `error` status can be found below:
+
+  |         Code         |                Description                |
+
+  |----------------------|-------------------------------------------|
+
+  |invalid_bank_statement|Failed to process file as a bank statement.|
+
+  |internal_error        |Internal error. Please contact support.    |
+
+
+
+  Complete guide: [Bank Statements](../../../bank-statements).
+",
+    },
+    "batches.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "endpoints": {
+            "getBatchResults": {
+              "auth": true,
+              "display-name": "Retrieve the results of a batch",
+              "docs": "Returns the results of the enrichment request. The resulting enriched transactions are returned in the same order they were submitted. Results are available after the batch has finished processing.",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20/results" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+results = sdk.batches.wait_for_results("f203613d2-83c8-4130-8809-d14206eeec20")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "id": "id",
+                      "results": {
+                        "transactions": [
+                          {
+                            "categories": {
+                              "general": "outgoing - coffee shops",
+                            },
+                            "created_at": "2024-03-30T00:00:00Z",
+                            "entities": {
+                              "counterparty": {
+                                "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                                "logo": "https://logos.ntropy.com/starbucks.com",
+                                "mccs": [
+                                  5814,
+                                ],
+                                "name": "Starbucks",
+                                "type": "organization",
+                                "website": "starbucks.com",
+                              },
+                              "intermediaries": [
+                                {
+                                  "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                  "logo": "https://logos.ntropy.com/squareup.com",
+                                  "mccs": [
+                                    1,
+                                  ],
+                                  "name": "Square",
+                                  "type": "payment_processor",
+                                  "website": "squareup.com",
+                                },
+                              ],
+                            },
+                            "id": "xbx8YP14g565Xk",
+                            "location": {
+                              "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                              "structured": {
+                                "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                                "city": "Gainesville",
+                                "country": "United States",
+                                "country_code": "US",
+                                "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                                "latitude": 29.704558,
+                                "longitude": -82.389277,
+                                "postcode": "32653",
+                                "state": "Florida",
+                                "street": "Nw 43rd Street 5480",
+                              },
+                            },
+                          },
+                        ],
+                      },
+                      "status": "processing",
+                      "total": 1,
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/batches/{id}/results",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Returned batch of transaction enrichment results.",
+                "type": "root.BatchResult",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getBatches": {
+              "auth": true,
+              "display-name": "List all batches",
+              "docs": "Returns a list of submitted batches starting with the most recent one.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/batches" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+for batch in sdk.batches.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-01-01T00:00:00Z",
+                          "id": "203613d2-83c8-4130-8809-d14206eeec20",
+                          "progress": 0,
+                          "status": "processing",
+                          "total": 4000,
+                          "updated_at": "2024-01-01T00:00:30Z",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/batches",
+              "request": {
+                "name": "GetBatchesV3BatchesGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return batches older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return batches newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of batches",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of batches to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                  "status": {
+                    "docs": "If specified, only return batches with this status",
+                    "type": "optional<root.BatchStatus>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseBatch",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getSingleBatch": {
+              "auth": true,
+              "display-name": "Retrieve a batch",
+              "docs": undefined,
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+batch = sdk.batches.get("f203613d2-83c8-4130-8809-d14206eeec20") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "id": "203613d2-83c8-4130-8809-d14206eeec20",
+                      "progress": 0,
+                      "status": "processing",
+                      "total": 4000,
+                      "updated_at": "2024-01-01T00:00:30Z",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/batches/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Batch",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postBatch": {
+              "auth": true,
+              "display-name": "Submit a batch of transactions",
+              "docs": "Creates a batch of transactions and enriches it in an asynchronous fashion. A batch, representing the status of the 
+enrichment progress is returned as a result of the submission. 
+
+In order to be notified on the status of the batch, you can setup [webhooks](../../../webhooks) and receive 
+the respective notifications. Alternatively, you can 
+[poll](../../../enrichment/introduction/#viewing-the-progress-of-a-batch) for the status of the batch using its id.
+
+This endpoints supports up to 24960 transactions.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/batches/" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '[{
+        "id": "xbx8YP14g565Xk",
+        "description": "SQ* STARBUCKS NW 43RD",
+        "date": "2024-03-30",
+        "amount": 10.0,
+        "entry_type": "outgoing",
+        "currency": "USD",
+        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        "location": {
+            "country": "US"
+        }
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+sdk = SDK("cd1H...Wmhl")
+batch = sdk.batches.create([
+    TransactionInput(
+        id="xbx8YP14g565Xk",
+        description="SQ* STARBUCKS NW 43RD",
+        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        amount=10.0,
+        entry_type="outgoing",
+        date="2024-03-30",
+        currency="USD",
+        location=LocationInput(
+          country="US",
+        )
+    )
+]) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "transactions": [
+                      {
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "amount": 10,
+                        "currency": "USD",
+                        "date": "2024-03-30",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "entry_type": "outgoing",
+                        "id": "xbx8YP14g565Xk",
+                        "location": {
+                          "country": "US",
+                        },
+                      },
+                    ],
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-01-01T00:00:00Z",
+                      "id": "203613d2-83c8-4130-8809-d14206eeec20",
+                      "progress": 0,
+                      "status": "processing",
+                      "total": 4000,
+                      "updated_at": "2024-01-01T00:00:30Z",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/batches",
+              "request": {
+                "body": {
+                  "properties": {
+                    "transactions": {
+                      "type": "list<root.TransactionInput>",
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "AsyncEnrichmentInput",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Batch",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getBatches:
+      path: /v3/batches
+      method: GET
+      auth: true
+      docs: Returns a list of submitted batches starting with the most recent one.
+      source:
+        openapi: ../openapi.yml
+      display-name: List all batches
+      request:
+        name: GetBatchesV3BatchesGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return batches older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return batches newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of batches
+          limit:
+            type: optional<integer>
+            docs: The limit of batches to be returned
+            validation:
+              min: 1
+              max: 50
+          status:
+            type: optional<root.BatchStatus>
+            docs: If specified, only return batches with this status
+      response:
+        docs: Successful Response
+        type: root.PagedResponseBatch
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: 203613d2-83c8-4130-8809-d14206eeec20
+                  status: processing
+                  created_at: '2024-01-01T00:00:00Z'
+                  updated_at: '2024-01-01T00:00:30Z'
+                  progress: 0
+                  total: 4000
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/batches" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                for batch in sdk.batches.list().auto_paginate():
+                    ... 
+    postBatch:
+      path: /v3/batches
+      method: POST
+      auth: true
+      docs: >-
+        Creates a batch of transactions and enriches it in an asynchronous
+        fashion. A batch, representing the status of the 
+
+        enrichment progress is returned as a result of the submission. 
+
+
+        In order to be notified on the status of the batch, you can setup
+        [webhooks](../../../webhooks) and receive 
+
+        the respective notifications. Alternatively, you can 
+
+        [poll](../../../enrichment/introduction/#viewing-the-progress-of-a-batch)
+        for the status of the batch using its id.
+
+
+        This endpoints supports up to 24960 transactions.
+      source:
+        openapi: ../openapi.yml
+      display-name: Submit a batch of transactions
+      request:
+        name: AsyncEnrichmentInput
+        body:
+          properties:
+            transactions:
+              type: list<root.TransactionInput>
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Batch
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - request:
+            transactions:
+              - id: xbx8YP14g565Xk
+                description: SQ* STARBUCKS NW 43RD
+                date: '2024-03-30'
+                amount: 10
+                entry_type: outgoing
+                currency: USD
+                account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                location:
+                  country: US
+          response:
+            body:
+              id: 203613d2-83c8-4130-8809-d14206eeec20
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              updated_at: '2024-01-01T00:00:30Z'
+              progress: 0
+              total: 4000
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/batches/" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '[{
+                        "id": "xbx8YP14g565Xk",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "date": "2024-03-30",
+                        "amount": 10.0,
+                        "entry_type": "outgoing",
+                        "currency": "USD",
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "location": {
+                            "country": "US"
+                        }
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+                sdk = SDK("cd1H...Wmhl")
+                batch = sdk.batches.create([
+                    TransactionInput(
+                        id="xbx8YP14g565Xk",
+                        description="SQ* STARBUCKS NW 43RD",
+                        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        amount=10.0,
+                        entry_type="outgoing",
+                        date="2024-03-30",
+                        currency="USD",
+                        location=LocationInput(
+                          country="US",
+                        )
+                    )
+                ]) 
+    getSingleBatch:
+      path: /v3/batches/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a batch
+      response:
+        docs: Successful Response
+        type: root.Batch
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: 203613d2-83c8-4130-8809-d14206eeec20
+              status: processing
+              created_at: '2024-01-01T00:00:00Z'
+              updated_at: '2024-01-01T00:00:30Z'
+              progress: 0
+              total: 4000
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >-
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                batch =
+                sdk.batches.get("f203613d2-83c8-4130-8809-d14206eeec20") 
+    getBatchResults:
+      path: /v3/batches/{id}/results
+      method: GET
+      auth: true
+      docs: >-
+        Returns the results of the enrichment request. The resulting enriched
+        transactions are returned in the same order they were submitted. Results
+        are available after the batch has finished processing.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve the results of a batch
+      response:
+        docs: Returned batch of transaction enrichment results.
+        type: root.BatchResult
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: id
+              total: 1
+              status: processing
+              results:
+                transactions:
+                  - entities:
+                      counterparty:
+                        id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                        name: Starbucks
+                        website: starbucks.com
+                        logo: https://logos.ntropy.com/starbucks.com
+                        mccs:
+                          - 5814
+                        type: organization
+                      intermediaries:
+                        - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                          name: Square
+                          website: squareup.com
+                          logo: https://logos.ntropy.com/squareup.com
+                          mccs:
+                            - 1
+                          type: payment_processor
+                    categories:
+                      general: outgoing - coffee shops
+                    location:
+                      raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                      structured:
+                        street: Nw 43rd Street 5480
+                        city: Gainesville
+                        state: Florida
+                        postcode: '32653'
+                        country_code: US
+                        country: United States
+                        latitude: 29.704558
+                        longitude: -82.389277
+                        google_maps_url: >-
+                          https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                        apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                    created_at: '2024-03-30T00:00:00Z'
+                    id: xbx8YP14g565Xk
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20/results" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                results =
+                sdk.batches.wait_for_results("f203613d2-83c8-4130-8809-d14206eeec20")
+  source:
+    openapi: ../openapi.yml
+",
+    },
+    "categories.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "endpoints": {
+            "customCategoriesPost": {
+              "auth": true,
+              "display-name": "Set a custom set of categories",
+              "docs": "Sets a custom set of categories. Transactions that don't match a category will be categorized `not enough information` regardless of whether it is present in the set.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/categories/consumer" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "incoming": [
+            "salary",
+            "investment income",
+            "other income"
+        ],
+        "outgoing": [
+            "rent",
+            "utilities",
+            "groceries",
+            "entertainment"
+        ]
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.categories.set("consumer", {
+    "incoming": [
+        "transfer from investment app",
+        "transfer from stock broker",
+        "transfer from crypto broker",
+        "chargeback",
+        "freelance income",
+        "rideshare or delivery income",
+        "paycheck",
+        "benefits",
+        "interest earned",
+        "stock dividend"
+    ],
+    "outgoing": [
+        "digital content and streaming",
+        "vending machine",
+        "reversal",
+        "transfer to investment app",
+        "transfer to stock broker",
+        "transfer to crypto broker",
+        "adjustment",
+        "intra account transfer",
+        "inter account transfer",
+        "peer to peer transfer",
+        "funeral service",
+        "ATM withdrawal",
+        "teller withdrawal"
+    ]
+})
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "account_holder_type": "consumer",
+                  },
+                  "request": {
+                    "incoming": [
+                      "salary",
+                      "investment income",
+                      "other income",
+                    ],
+                    "outgoing": [
+                      "rent",
+                      "utilities",
+                      "groceries",
+                      "entertainment",
+                    ],
+                  },
+                  "response": {
+                    "body": {
+                      "incoming": [
+                        "salary",
+                        "investment income",
+                        "other income",
+                      ],
+                      "outgoing": [
+                        "rent",
+                        "utilities",
+                        "groceries",
+                        "entertainment",
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/categories/{account_holder_type}",
+              "path-parameters": {
+                "account_holder_type": "root.AccountHolderType",
+              },
+              "request": {
+                "body": {
+                  "type": "root.CustomCategorySet",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Custom categories successfully set.",
+                "type": "root.CustomCategorySet",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "deleteCustomCategorySet": {
+              "auth": true,
+              "display-name": "Reset category set to original values",
+              "docs": "Resets the set of categories of the specified account holder type to the original values.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/categories/consumer/reset" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.categories.reset("consumer")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "account_holder_type": "consumer",
+                  },
+                  "response": {
+                    "body": {
+                      "incoming": [
+                        "transfer from investment app",
+                        "transfer from stock broker",
+                        "transfer from crypto broker",
+                        "chargeback",
+                        "freelance income",
+                        "rideshare or delivery income",
+                        "paycheck",
+                        "benefits",
+                        "interest earned",
+                        "stock dividend",
+                      ],
+                      "outgoing": [
+                        "digital content and streaming",
+                        "vending machine",
+                        "reversal",
+                        "transfer to investment app",
+                        "transfer to stock broker",
+                        "transfer to crypto broker",
+                        "adjustment",
+                        "intra account transfer",
+                        "inter account transfer",
+                        "peer to peer transfer",
+                        "funeral service",
+                        "ATM withdrawal",
+                        "teller withdrawal",
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/categories/{account_holder_type}/reset",
+              "path-parameters": {
+                "account_holder_type": "root.AccountHolderType",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.CategorySet",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getCategorySet": {
+              "auth": true,
+              "display-name": "Retrieve category set",
+              "docs": "Retrieves the set of categories. Category sets are different per account holder type.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/categories/consumer" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.categories.get("consumer")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "account_holder_type": "consumer",
+                  },
+                  "response": {
+                    "body": {
+                      "incoming": [
+                        "transfer from investment app",
+                        "transfer from stock broker",
+                        "transfer from crypto broker",
+                        "chargeback",
+                        "freelance income",
+                        "rideshare or delivery income",
+                        "paycheck",
+                        "benefits",
+                        "interest earned",
+                        "stock dividend",
+                      ],
+                      "outgoing": [
+                        "digital content and streaming",
+                        "vending machine",
+                        "reversal",
+                        "transfer to investment app",
+                        "transfer to stock broker",
+                        "transfer to crypto broker",
+                        "adjustment",
+                        "intra account transfer",
+                        "inter account transfer",
+                        "peer to peer transfer",
+                        "funeral service",
+                        "ATM withdrawal",
+                        "teller withdrawal",
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/categories/{account_holder_type}",
+              "path-parameters": {
+                "account_holder_type": "root.AccountHolderType",
+              },
+              "response": {
+                "docs": "Category set for the selected type of account holder",
+                "type": "root.CategorySet",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getCategorySet:
+      path: /v3/categories/{account_holder_type}
+      method: GET
+      auth: true
+      docs: >-
+        Retrieves the set of categories. Category sets are different per account
+        holder type.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        account_holder_type: root.AccountHolderType
+      display-name: Retrieve category set
+      response:
+        docs: Category set for the selected type of account holder
+        type: root.CategorySet
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            account_holder_type: consumer
+          response:
+            body:
+              incoming:
+                - transfer from investment app
+                - transfer from stock broker
+                - transfer from crypto broker
+                - chargeback
+                - freelance income
+                - rideshare or delivery income
+                - paycheck
+                - benefits
+                - interest earned
+                - stock dividend
+              outgoing:
+                - digital content and streaming
+                - vending machine
+                - reversal
+                - transfer to investment app
+                - transfer to stock broker
+                - transfer to crypto broker
+                - adjustment
+                - intra account transfer
+                - inter account transfer
+                - peer to peer transfer
+                - funeral service
+                - ATM withdrawal
+                - teller withdrawal
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/categories/consumer" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.categories.get("consumer")
+    customCategoriesPost:
+      path: /v3/categories/{account_holder_type}
+      method: POST
+      auth: true
+      docs: >-
+        Sets a custom set of categories. Transactions that don't match a
+        category will be categorized `not enough information` regardless of
+        whether it is present in the set.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        account_holder_type: root.AccountHolderType
+      display-name: Set a custom set of categories
+      request:
+        body:
+          type: root.CustomCategorySet
+        content-type: application/json
+      response:
+        docs: Custom categories successfully set.
+        type: root.CustomCategorySet
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            account_holder_type: consumer
+          request:
+            incoming:
+              - salary
+              - investment income
+              - other income
+            outgoing:
+              - rent
+              - utilities
+              - groceries
+              - entertainment
+          response:
+            body:
+              incoming:
+                - salary
+                - investment income
+                - other income
+              outgoing:
+                - rent
+                - utilities
+                - groceries
+                - entertainment
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/categories/consumer" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "incoming": [
+                            "salary",
+                            "investment income",
+                            "other income"
+                        ],
+                        "outgoing": [
+                            "rent",
+                            "utilities",
+                            "groceries",
+                            "entertainment"
+                        ]
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.categories.set("consumer", {
+                    "incoming": [
+                        "transfer from investment app",
+                        "transfer from stock broker",
+                        "transfer from crypto broker",
+                        "chargeback",
+                        "freelance income",
+                        "rideshare or delivery income",
+                        "paycheck",
+                        "benefits",
+                        "interest earned",
+                        "stock dividend"
+                    ],
+                    "outgoing": [
+                        "digital content and streaming",
+                        "vending machine",
+                        "reversal",
+                        "transfer to investment app",
+                        "transfer to stock broker",
+                        "transfer to crypto broker",
+                        "adjustment",
+                        "intra account transfer",
+                        "inter account transfer",
+                        "peer to peer transfer",
+                        "funeral service",
+                        "ATM withdrawal",
+                        "teller withdrawal"
+                    ]
+                })
+    deleteCustomCategorySet:
+      path: /v3/categories/{account_holder_type}/reset
+      method: POST
+      auth: true
+      docs: >-
+        Resets the set of categories of the specified account holder type to the
+        original values.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        account_holder_type: root.AccountHolderType
+      display-name: Reset category set to original values
+      response:
+        docs: Successful Response
+        type: root.CategorySet
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            account_holder_type: consumer
+          response:
+            body:
+              incoming:
+                - transfer from investment app
+                - transfer from stock broker
+                - transfer from crypto broker
+                - chargeback
+                - freelance income
+                - rideshare or delivery income
+                - paycheck
+                - benefits
+                - interest earned
+                - stock dividend
+              outgoing:
+                - digital content and streaming
+                - vending machine
+                - reversal
+                - transfer to investment app
+                - transfer to stock broker
+                - transfer to crypto broker
+                - adjustment
+                - intra account transfer
+                - inter account transfer
+                - peer to peer transfer
+                - funeral service
+                - ATM withdrawal
+                - teller withdrawal
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/categories/consumer/reset" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.categories.reset("consumer")
+  source:
+    openapi: ../openapi.yml
+",
+    },
+    "entities.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "endpoints": {
+            "getEntityById": {
+              "auth": true,
+              "display-name": "Retrieve an entity",
+              "docs": "Retrieve more information about an entity by using its unique ID.",
+              "errors": [
+                "root.BadRequestError",
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/entities/d4bc3c80-ec1a-3da2-836e-2a4ca4758be5" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.entities.lookup("d4bc3c80-ec1a-3da2-836e-2a4ca4758be5") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                      "logo": "https://logos.ntropy.com/starbucks.com",
+                      "mccs": [
+                        5814,
+                      ],
+                      "name": "Starbucks",
+                      "website": "starbucks.com",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/entities/{id}",
+              "path-parameters": {
+                "id": {
+                  "docs": "The unique ID of the entity",
+                  "type": "string",
+                },
+              },
+              "response": {
+                "docs": "Entity",
+                "type": "root.Entity",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "searchEntity": {
+              "auth": true,
+              "display-name": "Searches for an entity",
+              "docs": "Resolves a query into an entity by querying our entity resolution system. 
+    The parameters `name` and `website` are mutually exclusive. Calls to this endpoint using 
+    the `name` parameter are billed the same way transactions are.",
+              "errors": [
+                "root.BadRequestError",
+                "root.UnprocessableEntityError",
+                "root.LockedError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/entities?name=Starbucks" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.entities.lookup(name="Starbucks") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                      "logo": "https://logos.ntropy.com/starbucks.com",
+                      "mccs": [
+                        5814,
+                      ],
+                      "name": "Starbucks",
+                      "website": "starbucks.com",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/entities/lookup",
+              "request": {
+                "name": "SearchEntityV3EntitiesLookupGetRequest",
+                "query-parameters": {
+                  "location": {
+                    "docs": "An unstructured location string of the entity to resolve",
+                    "type": "optional<string>",
+                  },
+                  "name": {
+                    "docs": "The name of the entity to resolve",
+                    "type": "optional<string>",
+                  },
+                  "website": {
+                    "docs": "The website of the entity to resolve",
+                    "type": "optional<string>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Entity",
+                "type": "root.Entity",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    searchEntity:
+      path: /v3/entities/lookup
+      method: GET
+      auth: true
+      docs: >-
+        Resolves a query into an entity by querying our entity resolution
+        system. 
+            The parameters `name` and `website` are mutually exclusive. Calls to this endpoint using 
+            the `name` parameter are billed the same way transactions are.
+      source:
+        openapi: ../openapi.yml
+      display-name: Searches for an entity
+      request:
+        name: SearchEntityV3EntitiesLookupGetRequest
+        query-parameters:
+          name:
+            type: optional<string>
+            docs: The name of the entity to resolve
+          website:
+            type: optional<string>
+            docs: The website of the entity to resolve
+          location:
+            type: optional<string>
+            docs: An unstructured location string of the entity to resolve
+      response:
+        docs: Entity
+        type: root.Entity
+      errors:
+        - root.BadRequestError
+        - root.UnprocessableEntityError
+        - root.LockedError
+      examples:
+        - response:
+            body:
+              id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+              name: Starbucks
+              website: starbucks.com
+              logo: https://logos.ntropy.com/starbucks.com
+              mccs:
+                - 5814
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/entities?name=Starbucks" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.entities.lookup(name="Starbucks") 
+    getEntityById:
+      path: /v3/entities/{id}
+      method: GET
+      auth: true
+      docs: Retrieve more information about an entity by using its unique ID.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id:
+          type: string
+          docs: The unique ID of the entity
+      display-name: Retrieve an entity
+      response:
+        docs: Entity
+        type: root.Entity
+      errors:
+        - root.BadRequestError
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+              name: Starbucks
+              website: starbucks.com
+              logo: https://logos.ntropy.com/starbucks.com
+              mccs:
+                - 5814
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/entities/d4bc3c80-ec1a-3da2-836e-2a4ca4758be5" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.entities.lookup("d4bc3c80-ec1a-3da2-836e-2a4ca4758be5") 
+  source:
+    openapi: ../openapi.yml
+",
+    },
+    "personalization.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Personalization API allows you to customize the output of enrichment by
+uploading a set of rules. For more information, see our documentation on
+[Personalization](None).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Personalization",
+          "endpoints": {
+            "filterAppend": {
+              "auth": true,
+              "display-name": "Append a rule.",
+              "docs": "Append a rule to the personalization ruleset.",
+              "errors": [
+                "root.BadRequestError",
+                "root.ContentTooLargeError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/rules/append" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl" \
+    -H "Content-Type: application/json" \
+    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.append({"set": "logo", "to": "http://example.com/favicon.ico"})
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "if": true,
+                  },
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/rules/append",
+              "request": {
+                "body": {
+                  "type": "root.action",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterDelete": {
+              "auth": true,
+              "display-name": "Delete a rule.",
+              "docs": "Delete the rule at the specified index from the personalization ruleset.",
+              "errors": [
+                "root.BadRequestError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/rules/0" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.delete(0)
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "index": 1,
+                  },
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/rules/{index}",
+              "path-parameters": {
+                "index": "integer",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterGet": {
+              "auth": true,
+              "display-name": "Get the current personalization ruleset.",
+              "docs": "Get the current personalization ruleset.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/rules" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+rules = sdk.rules.get()
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": [
+                      {
+                        "if": {
+                          "is_substring": [],
+                        },
+                      },
+                    ],
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/rules",
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Filter",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterPatch": {
+              "auth": true,
+              "display-name": "Modify an existing rule.",
+              "docs": "Modify an existing rule at the specified index on the ruleset.",
+              "errors": [
+                "root.BadRequestError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "PATCH" \
+    "https://api.ntropy.com/v3/rules/0" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl" \
+    -H "Content-Type: application/json" \
+    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.patch(0, {"set": "logo", "to": "http://example.com/favicon.ico"})
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "index": 1,
+                  },
+                  "request": {
+                    "if": true,
+                  },
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "PATCH",
+              "pagination": undefined,
+              "path": "/v3/rules/{index}",
+              "path-parameters": {
+                "index": "integer",
+              },
+              "request": {
+                "body": {
+                  "type": "root.action",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "filterPost": {
+              "auth": true,
+              "display-name": "Set the personalization ruleset.",
+              "docs": "Set the personalization ruleset.",
+              "errors": [
+                "root.BadRequestError",
+                "root.ContentTooLargeError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/rules" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl" \
+    -H "Content-Type: application/json" \
+    -d '[{
+        "if": {
+            "is_substring": [
+                {"get": "website"},
+                "ntropy"
+            ]
+        },
+        "then": [
+            {"set": "logo", "to": "http://example.com/favicon.ico"}
+        ],
+        "else": [
+            {"remove_label": "example label"}
+        ]
+    }]'
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.rules.set([{
+    "if": {
+        "is_substring": [
+            {"get": "website"},
+            "ntropy"
+        ]
+    },
+    "then": [
+        {"set": "logo", "to": "http://example.com/favicon.ico"}
+    ],
+    "else": [
+        {"remove_label": "example label"}
+    ]
+}])
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": [
+                    {
+                      "if": {
+                        "is_substring": [],
+                      },
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "key": "value",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/rules",
+              "request": {
+                "body": {
+                  "type": "root.Filter",
+                },
+                "content-type": "application/json",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "unknown",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    filterGet:
+      path: /v3/rules
+      method: GET
+      auth: true
+      docs: Get the current personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      display-name: Get the current personalization ruleset.
+      response:
+        docs: Successful Response
+        type: root.Filter
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - response:
+            body:
+              - if:
+                  is_substring: []
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/rules" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                rules = sdk.rules.get()
+    filterPost:
+      path: /v3/rules
+      method: POST
+      auth: true
+      docs: Set the personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      display-name: Set the personalization ruleset.
+      request:
+        body:
+          type: root.Filter
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.BadRequestError
+        - root.ContentTooLargeError
+        - root.UnprocessableEntityError
+      examples:
+        - request:
+            - if:
+                is_substring: []
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/rules" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl" \
+                    -H "Content-Type: application/json" \
+                    -d '[{
+                        "if": {
+                            "is_substring": [
+                                {"get": "website"},
+                                "ntropy"
+                            ]
+                        },
+                        "then": [
+                            {"set": "logo", "to": "http://example.com/favicon.ico"}
+                        ],
+                        "else": [
+                            {"remove_label": "example label"}
+                        ]
+                    }]'
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.rules.set([{
+                    "if": {
+                        "is_substring": [
+                            {"get": "website"},
+                            "ntropy"
+                        ]
+                    },
+                    "then": [
+                        {"set": "logo", "to": "http://example.com/favicon.ico"}
+                    ],
+                    "else": [
+                        {"remove_label": "example label"}
+                    ]
+                }])
+    filterAppend:
+      path: /v3/rules/append
+      method: POST
+      auth: true
+      docs: Append a rule to the personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      display-name: Append a rule.
+      request:
+        body:
+          type: root.action
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.BadRequestError
+        - root.ContentTooLargeError
+        - root.UnprocessableEntityError
+      examples:
+        - request:
+            if: true
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/rules/append" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl" \
+                    -H "Content-Type: application/json" \
+                    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                sdk.rules.append({"set": "logo", "to":
+                "http://example.com/favicon.ico"})
+    filterDelete:
+      path: /v3/rules/{index}
+      method: DELETE
+      auth: true
+      docs: Delete the rule at the specified index from the personalization ruleset.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        index: integer
+      display-name: Delete a rule.
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.BadRequestError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            index: 1
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/rules/0" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.rules.delete(0)
+    filterPatch:
+      path: /v3/rules/{index}
+      method: PATCH
+      auth: true
+      docs: Modify an existing rule at the specified index on the ruleset.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        index: integer
+      display-name: Modify an existing rule.
+      request:
+        body:
+          type: root.action
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: unknown
+      errors:
+        - root.BadRequestError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            index: 1
+          request:
+            if: true
+          response:
+            body:
+              key: value
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |
+                curl -X "PATCH" \
+                    "https://api.ntropy.com/v3/rules/0" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl" \
+                    -H "Content-Type: application/json" \
+                    -d '{"set": "logo", "to": "http://example.com/favicon.ico"}'
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                sdk.rules.patch(0, {"set": "logo", "to":
+                "http://example.com/favicon.ico"})
+  source:
+    openapi: ../openapi.yml
+  display-name: Personalization
+docs: |
+
+  The Personalization API allows you to customize the output of enrichment by
+  uploading a set of rules. For more information, see our documentation on
+  [Personalization](None).
+",
+    },
+    "recurrence.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Recurrence API allows you to identify and categorize recurring patterns found in the transactions of an 
+[account holder](#tag/Account-Holders), such as periodic payments or subscriptions and group them 
+into recurrence groups. Each recurrence group contains detailed information about the pattern, 
+such as periodicity, amount and counterparty.
+
+Transactions can be added to an account holder via the [Enrichment API](#tag/Enrichment). 
+It is crucial that transactions are submitted with the [correct](../../../account-holders) 
+account holder information as the recurrence calculation relies heavily on it.
+
+Complete guide: [Recurrence](../../../enrichment/recurrence).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Recurrence",
+          "endpoints": {
+            "getAccountHolderRecurringPayments": {
+              "auth": true,
+              "display-name": "Find recurring groups in a transaction history",
+              "docs": "Identifies and categorizes recurring patterns found in the transaction history of the account holder, such as periodic payments or subscriptions. These patterns are called recurrence groups.",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad/recurring_groups" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+recurring_groups = sdk.account_holders.recurring_groups(
+    "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": [
+                      {
+                        "average_amount": 10,
+                        "categories": {
+                          "accounting": "operational expenses",
+                          "general": "outgoing - coffee shops",
+                        },
+                        "counterparty": {
+                          "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                          "logo": "https://logos.ntropy.com/starbucks.com",
+                          "mccs": [
+                            5814,
+                          ],
+                          "name": "Starbucks",
+                          "type": "organization",
+                          "website": "starbucks.com",
+                        },
+                        "end_date": "2024-03-30",
+                        "id": "8efbac45-9bd5-4b67-be29-334106198c40",
+                        "periodicity": "daily",
+                        "periodicity_in_days": 1,
+                        "start_date": "2024-03-01",
+                        "total_amount": 300,
+                        "transaction_ids": [
+                          "2dc6SE8A7cTQ2jUdUadCg",
+                          "tQYAhhl0XNkl1wasacpVQ",
+                          "NNJTqvockIdKnYxBqPlJw",
+                        ],
+                      },
+                    ],
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/account_holders/{id}/recurring_groups",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "list<root.RecurrenceGroup>",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getAccountHolderRecurringPayments:
+      path: /v3/account_holders/{id}/recurring_groups
+      method: POST
+      auth: true
+      docs: >-
+        Identifies and categorizes recurring patterns found in the transaction
+        history of the account holder, such as periodic payments or
+        subscriptions. These patterns are called recurrence groups.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Find recurring groups in a transaction history
+      response:
+        docs: Successful Response
+        type: list<root.RecurrenceGroup>
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              - id: 8efbac45-9bd5-4b67-be29-334106198c40
+                start_date: '2024-03-01'
+                end_date: '2024-03-30'
+                total_amount: 300
+                average_amount: 10
+                periodicity_in_days: 1
+                periodicity: daily
+                counterparty:
+                  id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                  name: Starbucks
+                  website: starbucks.com
+                  logo: https://logos.ntropy.com/starbucks.com
+                  mccs:
+                    - 5814
+                  type: organization
+                categories:
+                  general: outgoing - coffee shops
+                  accounting: operational expenses
+                transaction_ids:
+                  - 2dc6SE8A7cTQ2jUdUadCg
+                  - tQYAhhl0XNkl1wasacpVQ
+                  - NNJTqvockIdKnYxBqPlJw
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad/recurring_groups" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                recurring_groups = sdk.account_holders.recurring_groups(
+                    "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Recurrence
+docs: >
+
+  The Recurrence API allows you to identify and categorize recurring patterns
+  found in the transactions of an 
+
+  [account holder](#tag/Account-Holders), such as periodic payments or
+  subscriptions and group them 
+
+  into recurrence groups. Each recurrence group contains detailed information
+  about the pattern, 
+
+  such as periodicity, amount and counterparty.
+
+
+  Transactions can be added to an account holder via the [Enrichment
+  API](#tag/Enrichment). 
+
+  It is crucial that transactions are submitted with the
+  [correct](../../../account-holders) 
+
+  account holder information as the recurrence calculation relies heavily on it.
+
+
+  Complete guide: [Recurrence](../../../enrichment/recurrence).
+",
+    },
+    "reports.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Reports API allows you to flag transactions with incorrect fields. You can also track the progress of each
+report either through the API or using [webhooks](#tag/Webhooks).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Reports",
+          "endpoints": {
+            "deleteReport": {
+              "auth": true,
+              "display-name": "Delete a report",
+              "docs": "Delete a report",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/reports/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getReport": {
+              "auth": true,
+              "display-name": "Retrieve a report",
+              "docs": "Retrieve a report",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/reports/a652285d-de1b-4a6f-b6ce-45efa9be7952" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+report = sdk.reports.get("a652285d-de1b-4a6f-b6ce-45efa9be7952")
+    ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "description": "lorem ipsum",
+                      "fields": [
+                        ".entities.counterparty",
+                      ],
+                      "id": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                      "rejection_reason": "rejection_reason",
+                      "status": "open",
+                      "transaction_id": "xbx8YP14g565Xk",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/reports/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Report",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getReports": {
+              "auth": true,
+              "display-name": "List all reports",
+              "docs": "List all reports",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/reports" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+reports = sdk.reports.list()
+    ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-10-03T02:53:30Z",
+                          "description": "lorem ipsum",
+                          "fields": [
+                            ".entities.counterparty",
+                          ],
+                          "id": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                          "rejection_reason": "rejection_reason",
+                          "status": "open",
+                          "transaction_id": "xbx8YP14g565Xk",
+                        },
+                      ],
+                      "next_cursor": "next_cursor",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/reports",
+              "request": {
+                "name": "GetReportsV3ReportsGetRequest",
+                "query-parameters": {
+                  "created_after": {
+                    "docs": "Only return report older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return report newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of report",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of report to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 50,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                  "status": {
+                    "docs": "If specified, only return reports with this status",
+                    "type": "optional<root.ReportStatus>",
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseReport",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postReport": {
+              "auth": true,
+              "display-name": "Create a report",
+              "docs": "Report a transaction with incorrect fields.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/reports" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "transaction_id": "xbx8YP14g565Xk",
+        "description": "lorem ipsum",
+        "fields": [
+            ".entities.counterparty"
+        ]
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+report = sdk.reports.create(
+    transaction_id="xbx8YP14g565Xk",
+    description="lorem ipsum",
+    fields=['.entities.counterparty'],
+)
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "description": "lorem ipsum",
+                    "fields": [
+                      ".entities.counterparty",
+                    ],
+                    "transaction_id": "xbx8YP14g565Xk",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "description": "lorem ipsum",
+                      "fields": [
+                        ".entities.counterparty",
+                      ],
+                      "id": "a652285d-de1b-4a6f-b6ce-45efa9be7952",
+                      "rejection_reason": "rejection_reason",
+                      "status": "open",
+                      "transaction_id": "xbx8YP14g565Xk",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/reports",
+              "request": {
+                "body": {
+                  "properties": {
+                    "description": {
+                      "docs": "A description of what is wrong in the transaction",
+                      "type": "string",
+                    },
+                    "fields": {
+                      "docs": "A list of the fields that are incorrect",
+                      "type": "list<string>",
+                    },
+                    "transaction_id": {
+                      "docs": "The unique identifier of the transaction",
+                      "type": "string",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": undefined,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "ReportBase",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "The newly created report",
+                "type": "root.Report",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getReports:
+      path: /v3/reports
+      method: GET
+      auth: true
+      docs: List all reports
+      source:
+        openapi: ../openapi.yml
+      display-name: List all reports
+      request:
+        name: GetReportsV3ReportsGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return report older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return report newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of report
+          limit:
+            type: optional<integer>
+            docs: The limit of report to be returned
+            validation:
+              min: 1
+              max: 50
+          status:
+            type: optional<root.ReportStatus>
+            docs: If specified, only return reports with this status
+      response:
+        docs: Successful Response
+        type: root.PagedResponseReport
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: next_cursor
+              data:
+                - transaction_id: xbx8YP14g565Xk
+                  description: lorem ipsum
+                  fields:
+                    - .entities.counterparty
+                  id: a652285d-de1b-4a6f-b6ce-45efa9be7952
+                  created_at: '2024-10-03T02:53:30Z'
+                  status: open
+                  rejection_reason: rejection_reason
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/reports" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                reports = sdk.reports.list()
+                    
+    postReport:
+      path: /v3/reports
+      method: POST
+      auth: true
+      docs: Report a transaction with incorrect fields.
+      source:
+        openapi: ../openapi.yml
+      display-name: Create a report
+      request:
+        name: ReportBase
+        body:
+          properties:
+            transaction_id:
+              type: string
+              docs: The unique identifier of the transaction
+              validation:
+                minLength: 1
+            description:
+              type: string
+              docs: A description of what is wrong in the transaction
+            fields:
+              docs: A list of the fields that are incorrect
+              type: list<string>
+        content-type: application/json
+      response:
+        docs: The newly created report
+        type: root.Report
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - request:
+            transaction_id: xbx8YP14g565Xk
+            description: lorem ipsum
+            fields:
+              - .entities.counterparty
+          response:
+            body:
+              transaction_id: xbx8YP14g565Xk
+              description: lorem ipsum
+              fields:
+                - .entities.counterparty
+              id: a652285d-de1b-4a6f-b6ce-45efa9be7952
+              created_at: '2024-10-03T02:53:30Z'
+              status: open
+              rejection_reason: rejection_reason
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/reports" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "transaction_id": "xbx8YP14g565Xk",
+                        "description": "lorem ipsum",
+                        "fields": [
+                            ".entities.counterparty"
+                        ]
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                report = sdk.reports.create(
+                    transaction_id="xbx8YP14g565Xk",
+                    description="lorem ipsum",
+                    fields=['.entities.counterparty'],
+                )
+    getReport:
+      path: /v3/reports/{id}
+      method: GET
+      auth: true
+      docs: Retrieve a report
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a report
+      response:
+        docs: Successful Response
+        type: root.Report
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              transaction_id: xbx8YP14g565Xk
+              description: lorem ipsum
+              fields:
+                - .entities.counterparty
+              id: a652285d-de1b-4a6f-b6ce-45efa9be7952
+              created_at: '2024-10-03T02:53:30Z'
+              status: open
+              rejection_reason: rejection_reason
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/reports/a652285d-de1b-4a6f-b6ce-45efa9be7952" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                report = sdk.reports.get("a652285d-de1b-4a6f-b6ce-45efa9be7952")
+                    
+    deleteReport:
+      path: /v3/reports/{id}
+      method: DELETE
+      auth: true
+      docs: Delete a report
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Delete a report
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+  source:
+    openapi: ../openapi.yml
+  display-name: Reports
+docs: >
+
+  The Reports API allows you to flag transactions with incorrect fields. You can
+  also track the progress of each
+
+  report either through the API or using [webhooks](#tag/Webhooks).
+",
+    },
+    "transactions.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Transaction API allows you to manage, retrieve and search through enriched transactions. A transaction contains
+both the enrichment fields and the original input fields. They are made available after being 
+[enriched](#tag/Enrichment).
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Transactions",
+          "endpoints": {
+            "deleteTransaction": {
+              "auth": true,
+              "display-name": "Deletes a transaction",
+              "docs": "Deleting a transaction will also delete it from our systems. This operation is permanent.",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+tx = sdk.transactions.delete("xbx8YP14g565Xk") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/transactions/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getTransaction": {
+              "auth": true,
+              "display-name": "Retrieve a transaction",
+              "docs": undefined,
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+tx = sdk.transactions.get("xbx8YP14g565Xk") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "amount": 10,
+                      "categories": {
+                        "accounting": "operational expenses",
+                        "general": "outgoing - coffee shops",
+                      },
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "currency": "USD",
+                      "date": "2024-03-30",
+                      "description": "SQ* STARBUCKS NW 43RD",
+                      "entities": {
+                        "counterparty": {
+                          "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                          "logo": "https://logos.ntropy.com/starbucks.com",
+                          "mccs": [
+                            5814,
+                          ],
+                          "name": "Starbucks",
+                          "type": "organization",
+                          "website": "starbucks.com",
+                        },
+                        "intermediaries": [
+                          {
+                            "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                            "logo": "https://logos.ntropy.com/squareup.com",
+                            "mccs": [
+                              1,
+                            ],
+                            "name": "Square",
+                            "type": "payment_processor",
+                            "website": "squareup.com",
+                          },
+                        ],
+                      },
+                      "entry_type": "outgoing",
+                      "error": {
+                        "code": "account_holder_not_found",
+                        "message": "message",
+                      },
+                      "id": "xbx8YP14g565Xk",
+                      "location": {
+                        "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                        "structured": {
+                          "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                          "city": "Gainesville",
+                          "country": "United States",
+                          "country_code": "US",
+                          "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                          "latitude": 29.704558,
+                          "longitude": -82.389277,
+                          "postcode": "32653",
+                          "state": "Florida",
+                          "store_number": "store_number",
+                          "street": "Nw 43rd Street 5480",
+                        },
+                      },
+                      "recurrence": {
+                        "type": "recurring",
+                      },
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/transactions/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Transaction",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "listTransactions": {
+              "auth": true,
+              "display-name": "List all transactions",
+              "docs": "Return a list of enriched transactions starting with the most recent one.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/transactions" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+for tx in sdk.transactions.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                          "amount": 10,
+                          "categories": {
+                            "general": "outgoing - coffee shops",
+                          },
+                          "created_at": "2024-03-30T00:00:00Z",
+                          "currency": "USD",
+                          "date": "2024-03-30",
+                          "description": "SQ* STARBUCKS NW 43RD",
+                          "entities": {
+                            "counterparty": {
+                              "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                              "logo": "https://logos.ntropy.com/starbucks.com",
+                              "mccs": [
+                                5814,
+                              ],
+                              "name": "Starbucks",
+                              "type": "organization",
+                              "website": "starbucks.com",
+                            },
+                            "intermediaries": [
+                              {
+                                "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                "logo": "https://logos.ntropy.com/squareup.com",
+                                "mccs": [
+                                  1,
+                                ],
+                                "name": "Square",
+                                "type": "payment_processor",
+                                "website": "squareup.com",
+                              },
+                            ],
+                          },
+                          "entry_type": "outgoing",
+                          "error": {
+                            "code": "account_holder_not_found",
+                            "message": "message",
+                          },
+                          "id": "xbx8YP14g565Xk",
+                          "location": {
+                            "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                            "structured": {
+                              "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                              "city": "Gainesville",
+                              "country": "United States",
+                              "country_code": "US",
+                              "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                              "latitude": 29.704558,
+                              "longitude": -82.389277,
+                              "postcode": "32653",
+                              "state": "Florida",
+                              "street": "Nw 43rd Street 5480",
+                            },
+                          },
+                          "recurrence": {
+                            "type": "recurring",
+                          },
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/transactions",
+              "request": {
+                "name": "ListTransactionsV3TransactionsGetRequest",
+                "query-parameters": {
+                  "account_holder_id": {
+                    "docs": "If specified, only return the transactions of this account holder",
+                    "type": "optional<string>",
+                  },
+                  "created_after": {
+                    "docs": "Only return transactions older or equal than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "created_before": {
+                    "docs": "Only return transactions newer than this date",
+                    "type": "optional<datetime>",
+                  },
+                  "cursor": {
+                    "docs": "Starting point for the set of transactions",
+                    "type": "optional<string>",
+                  },
+                  "limit": {
+                    "docs": "The limit of transactions to be returned",
+                    "type": "optional<integer>",
+                    "validation": {
+                      "exclusiveMax": undefined,
+                      "exclusiveMin": undefined,
+                      "max": 500,
+                      "min": 1,
+                      "multipleOf": undefined,
+                    },
+                  },
+                },
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseTransaction",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postTransactions": {
+              "auth": true,
+              "display-name": "Synchronously enrich transactions",
+              "docs": "Enriches a list of transactions in synchronous fashion. The enriched transactions returned in
+the order that they were submitted. Webhook events are not triggered for this operation. 
+
+This endpoint supports up to 1000 transactions. 
+
+If you want more throughput and live updates refer to the 
+[async enrichment endpoint](../batches/post-batch).",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/transactions" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '[{
+        "id": "xbx8YP14g565Xk",
+        "description": "SQ* STARBUCKS NW 43RD",
+        "date": "2024-03-30",
+        "amount": 10.0,
+        "entry_type": "outgoing",
+        "currency": "USD",
+        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        "location": {
+            "country": "US"
+        }
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+sdk = SDK("cd1H...Wmhl")
+enriched = sdk.transactions.create([
+    TransactionInput(
+        id="xbx8YP14g565Xk",
+        description="SQ* STARBUCKS NW 43RD",
+        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+        amount=10.0,
+        entry_type="outgoing",
+        date="2024-03-30",
+        currency="USD",
+        location=LocationInput(
+          country="US",
+        )
+    )
+]) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "transactions": [
+                      {
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "amount": 10,
+                        "currency": "USD",
+                        "date": "2024-03-30",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "entry_type": "outgoing",
+                        "id": "xbx8YP14g565Xk",
+                        "location": {
+                          "country": "US",
+                        },
+                      },
+                    ],
+                  },
+                  "response": {
+                    "body": {
+                      "transactions": [
+                        {
+                          "categories": {
+                            "general": "outgoing - coffee shops",
+                          },
+                          "created_at": "2024-03-30T00:00:00Z",
+                          "entities": {
+                            "counterparty": {
+                              "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                              "logo": "https://logos.ntropy.com/starbucks.com",
+                              "mccs": [
+                                5814,
+                              ],
+                              "name": "Starbucks",
+                              "type": "organization",
+                              "website": "starbucks.com",
+                            },
+                            "intermediaries": [
+                              {
+                                "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                                "logo": "https://logos.ntropy.com/squareup.com",
+                                "mccs": [
+                                  1,
+                                ],
+                                "name": "Square",
+                                "type": "payment_processor",
+                                "website": "squareup.com",
+                              },
+                            ],
+                          },
+                          "error": {
+                            "code": "account_holder_not_found",
+                            "message": "message",
+                          },
+                          "id": "xbx8YP14g565Xk",
+                          "location": {
+                            "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                            "structured": {
+                              "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                              "city": "Gainesville",
+                              "country": "United States",
+                              "country_code": "US",
+                              "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                              "latitude": 29.704558,
+                              "longitude": -82.389277,
+                              "postcode": "32653",
+                              "state": "Florida",
+                              "street": "Nw 43rd Street 5480",
+                            },
+                          },
+                        },
+                      ],
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/transactions",
+              "request": {
+                "body": {
+                  "properties": {
+                    "transactions": {
+                      "type": "list<root.TransactionInput>",
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "SyncEnrichmentInput",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Enriched transactions.",
+                "type": "root.SyncEnrichmentOutput",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "setTransactionAh": {
+              "auth": true,
+              "display-name": "Assign a transaction to an account holder",
+              "docs": "Changes the account holder associated with the transaction. The old and new account holder must share the same categories",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.transactions.assign(
+    transaction_id="xbx8YP14g565Xk", 
+    account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "request": {
+                    "account_holder_id": "account_holder_id",
+                  },
+                  "response": {
+                    "body": {
+                      "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                      "amount": 10,
+                      "categories": {
+                        "accounting": "operational expenses",
+                        "general": "outgoing - coffee shops",
+                      },
+                      "created_at": "2024-03-30T00:00:00Z",
+                      "currency": "USD",
+                      "date": "2024-03-30",
+                      "description": "SQ* STARBUCKS NW 43RD",
+                      "entities": {
+                        "counterparty": {
+                          "id": "d4bc3c80-ec1a-3da2-836e-2a4ca4758be5",
+                          "logo": "https://logos.ntropy.com/starbucks.com",
+                          "mccs": [
+                            5814,
+                          ],
+                          "name": "Starbucks",
+                          "type": "organization",
+                          "website": "starbucks.com",
+                        },
+                        "intermediaries": [
+                          {
+                            "id": "916bc837-55ef-3106-88f6-5a8269ca9f2a",
+                            "logo": "https://logos.ntropy.com/squareup.com",
+                            "mccs": [
+                              1,
+                            ],
+                            "name": "Square",
+                            "type": "payment_processor",
+                            "website": "squareup.com",
+                          },
+                        ],
+                      },
+                      "entry_type": "outgoing",
+                      "error": {
+                        "code": "account_holder_not_found",
+                        "message": "message",
+                      },
+                      "id": "xbx8YP14g565Xk",
+                      "location": {
+                        "raw_address": "Nw 43rd Street 5480, Gainesville, Florida 32653, US",
+                        "structured": {
+                          "apple_maps_url": "https://maps.apple.com/?q=29.704558,-82.389277",
+                          "city": "Gainesville",
+                          "country": "United States",
+                          "country_code": "US",
+                          "google_maps_url": "https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277",
+                          "latitude": 29.704558,
+                          "longitude": -82.389277,
+                          "postcode": "32653",
+                          "state": "Florida",
+                          "store_number": "store_number",
+                          "street": "Nw 43rd Street 5480",
+                        },
+                      },
+                      "recurrence": {
+                        "type": "recurring",
+                      },
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/transactions/{id}/assign",
+              "path-parameters": {
+                "id": "string",
+              },
+              "request": {
+                "body": {
+                  "properties": {
+                    "account_holder_id": "string",
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "BodySetTransactionAhV3TransactionsIdAssignPost",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Transaction",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getTransaction:
+      path: /v3/transactions/{id}
+      method: GET
+      auth: true
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a transaction
+      response:
+        docs: Successful Response
+        type: root.Transaction
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              id: xbx8YP14g565Xk
+              description: SQ* STARBUCKS NW 43RD
+              date: '2024-03-30'
+              amount: 10
+              entry_type: outgoing
+              currency: USD
+              entities:
+                counterparty:
+                  id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                  name: Starbucks
+                  website: starbucks.com
+                  logo: https://logos.ntropy.com/starbucks.com
+                  mccs:
+                    - 5814
+                  type: organization
+                intermediaries:
+                  - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                    name: Square
+                    website: squareup.com
+                    logo: https://logos.ntropy.com/squareup.com
+                    mccs:
+                      - 1
+                    type: payment_processor
+              categories:
+                general: outgoing - coffee shops
+                accounting: operational expenses
+              location:
+                raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                structured:
+                  street: Nw 43rd Street 5480
+                  city: Gainesville
+                  state: Florida
+                  postcode: '32653'
+                  country_code: US
+                  country: United States
+                  latitude: 29.704558
+                  longitude: -82.389277
+                  google_maps_url: >-
+                    https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                  apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  store_number: store_number
+              error:
+                code: account_holder_not_found
+                message: message
+              created_at: '2024-03-30T00:00:00Z'
+              account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              recurrence:
+                type: recurring
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                tx = sdk.transactions.get("xbx8YP14g565Xk") 
+    deleteTransaction:
+      path: /v3/transactions/{id}
+      method: DELETE
+      auth: true
+      docs: >-
+        Deleting a transaction will also delete it from our systems. This
+        operation is permanent.
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Deletes a transaction
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                tx = sdk.transactions.delete("xbx8YP14g565Xk") 
+    listTransactions:
+      path: /v3/transactions
+      method: GET
+      auth: true
+      docs: >-
+        Return a list of enriched transactions starting with the most recent
+        one.
+      source:
+        openapi: ../openapi.yml
+      display-name: List all transactions
+      request:
+        name: ListTransactionsV3TransactionsGetRequest
+        query-parameters:
+          created_after:
+            type: optional<datetime>
+            docs: Only return transactions older or equal than this date
+          created_before:
+            type: optional<datetime>
+            docs: Only return transactions newer than this date
+          cursor:
+            type: optional<string>
+            docs: Starting point for the set of transactions
+          limit:
+            type: optional<integer>
+            docs: The limit of transactions to be returned
+            validation:
+              min: 1
+              max: 500
+          account_holder_id:
+            type: optional<string>
+            docs: If specified, only return the transactions of this account holder
+      response:
+        docs: Successful Response
+        type: root.PagedResponseTransaction
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - id: xbx8YP14g565Xk
+                  description: SQ* STARBUCKS NW 43RD
+                  date: '2024-03-30'
+                  amount: 10
+                  entry_type: outgoing
+                  currency: USD
+                  entities:
+                    counterparty:
+                      id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                      name: Starbucks
+                      website: starbucks.com
+                      logo: https://logos.ntropy.com/starbucks.com
+                      mccs:
+                        - 5814
+                      type: organization
+                    intermediaries:
+                      - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                        name: Square
+                        website: squareup.com
+                        logo: https://logos.ntropy.com/squareup.com
+                        mccs:
+                          - 1
+                        type: payment_processor
+                  categories:
+                    general: outgoing - coffee shops
+                  location:
+                    raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                    structured:
+                      street: Nw 43rd Street 5480
+                      city: Gainesville
+                      state: Florida
+                      postcode: '32653'
+                      country_code: US
+                      country: United States
+                      latitude: 29.704558
+                      longitude: -82.389277
+                      google_maps_url: >-
+                        https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                      apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  error:
+                    code: account_holder_not_found
+                    message: message
+                  created_at: '2024-03-30T00:00:00Z'
+                  account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                  recurrence:
+                    type: recurring
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/transactions" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                for tx in sdk.transactions.list().auto_paginate():
+                    ... 
+    postTransactions:
+      path: /v3/transactions
+      method: POST
+      auth: true
+      docs: >-
+        Enriches a list of transactions in synchronous fashion. The enriched
+        transactions returned in
+
+        the order that they were submitted. Webhook events are not triggered for
+        this operation. 
+
+
+        This endpoint supports up to 1000 transactions. 
+
+
+        If you want more throughput and live updates refer to the 
+
+        [async enrichment endpoint](../batches/post-batch).
+      source:
+        openapi: ../openapi.yml
+      display-name: Synchronously enrich transactions
+      request:
+        name: SyncEnrichmentInput
+        body:
+          properties:
+            transactions:
+              type: list<root.TransactionInput>
+        content-type: application/json
+      response:
+        docs: Enriched transactions.
+        type: root.SyncEnrichmentOutput
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - request:
+            transactions:
+              - id: xbx8YP14g565Xk
+                description: SQ* STARBUCKS NW 43RD
+                date: '2024-03-30'
+                amount: 10
+                entry_type: outgoing
+                currency: USD
+                account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+                location:
+                  country: US
+          response:
+            body:
+              transactions:
+                - entities:
+                    counterparty:
+                      id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                      name: Starbucks
+                      website: starbucks.com
+                      logo: https://logos.ntropy.com/starbucks.com
+                      mccs:
+                        - 5814
+                      type: organization
+                    intermediaries:
+                      - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                        name: Square
+                        website: squareup.com
+                        logo: https://logos.ntropy.com/squareup.com
+                        mccs:
+                          - 1
+                        type: payment_processor
+                  categories:
+                    general: outgoing - coffee shops
+                  location:
+                    raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                    structured:
+                      street: Nw 43rd Street 5480
+                      city: Gainesville
+                      state: Florida
+                      postcode: '32653'
+                      country_code: US
+                      country: United States
+                      latitude: 29.704558
+                      longitude: -82.389277
+                      google_maps_url: >-
+                        https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                      apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  error:
+                    code: account_holder_not_found
+                    message: message
+                  created_at: '2024-03-30T00:00:00Z'
+                  id: xbx8YP14g565Xk
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/transactions" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '[{
+                        "id": "xbx8YP14g565Xk",
+                        "description": "SQ* STARBUCKS NW 43RD",
+                        "date": "2024-03-30",
+                        "amount": 10.0,
+                        "entry_type": "outgoing",
+                        "currency": "USD",
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        "location": {
+                            "country": "US"
+                        }
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK, TransactionInput, LocationInput
+
+                sdk = SDK("cd1H...Wmhl")
+                enriched = sdk.transactions.create([
+                    TransactionInput(
+                        id="xbx8YP14g565Xk",
+                        description="SQ* STARBUCKS NW 43RD",
+                        account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad",
+                        amount=10.0,
+                        entry_type="outgoing",
+                        date="2024-03-30",
+                        currency="USD",
+                        location=LocationInput(
+                          country="US",
+                        )
+                    )
+                ]) 
+    setTransactionAh:
+      path: /v3/transactions/{id}/assign
+      method: POST
+      auth: true
+      docs: >-
+        Changes the account holder associated with the transaction. The old and
+        new account holder must share the same categories
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Assign a transaction to an account holder
+      request:
+        name: BodySetTransactionAhV3TransactionsIdAssignPost
+        body:
+          properties:
+            account_holder_id: string
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Transaction
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          request:
+            account_holder_id: account_holder_id
+          response:
+            body:
+              id: xbx8YP14g565Xk
+              description: SQ* STARBUCKS NW 43RD
+              date: '2024-03-30'
+              amount: 10
+              entry_type: outgoing
+              currency: USD
+              entities:
+                counterparty:
+                  id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+                  name: Starbucks
+                  website: starbucks.com
+                  logo: https://logos.ntropy.com/starbucks.com
+                  mccs:
+                    - 5814
+                  type: organization
+                intermediaries:
+                  - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+                    name: Square
+                    website: squareup.com
+                    logo: https://logos.ntropy.com/squareup.com
+                    mccs:
+                      - 1
+                    type: payment_processor
+              categories:
+                general: outgoing - coffee shops
+                accounting: operational expenses
+              location:
+                raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+                structured:
+                  street: Nw 43rd Street 5480
+                  city: Gainesville
+                  state: Florida
+                  postcode: '32653'
+                  country_code: US
+                  country: United States
+                  latitude: 29.704558
+                  longitude: -82.389277
+                  google_maps_url: >-
+                    https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+                  apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+                  store_number: store_number
+              error:
+                code: account_holder_not_found
+                message: message
+              created_at: '2024-03-30T00:00:00Z'
+              account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+              recurrence:
+                type: recurring
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "account_holder_id": "35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.transactions.assign(
+                    transaction_id="xbx8YP14g565Xk", 
+                    account_holder_id="35b927b6-6fda-40aa-93b8-95b47c2b2cad"
+                ) 
+  source:
+    openapi: ../openapi.yml
+  display-name: Transactions
+docs: >
+
+  The Transaction API allows you to manage, retrieve and search through enriched
+  transactions. A transaction contains
+
+  both the enrichment fields and the original input fields. They are made
+  available after being 
+
+  [enriched](#tag/Enrichment).
+",
+    },
+    "webhooks.yml": {
+      "absoluteFilepath": "/DUMMY_PATH",
+      "contents": {
+        "docs": "
+The Webhooks API allows you to receive notifications when certain events occur,
+such as when a batch or bank statement finishes processing. 
+
+When an event occurs, Ntropy will make a POST request to the `url` of the
+webhook. If you specified a `token` when creating the webhook, this string will
+be included in the `X-Ntropy-Token` header. The webhook call has a timeout limit of 10 
+seconds, so any processing of the event 
+",
+        "imports": {
+          "root": "__package__.yml",
+        },
+        "service": {
+          "auth": false,
+          "base-path": "",
+          "display-name": "Webhooks",
+          "endpoints": {
+            "deleteWebhook": {
+              "auth": true,
+              "display-name": "Delete a webhook",
+              "docs": "Delete a webhook",
+              "errors": [
+                "root.NotFoundError",
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "DELETE" \
+    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.webhooks.delete("e94a150d-40af-4e96-8aa7-2948a6b4d8d3") ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                },
+              ],
+              "method": "DELETE",
+              "pagination": undefined,
+              "path": "/v3/webhooks/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getWebhook": {
+              "auth": true,
+              "display-name": "Retrieve a webhook",
+              "docs": "Retrieve a webhook",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+webhook = sdk.webhooks.get("e94a150d-40af-4e96-8aa7-2948a6b4d8d3")
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "enabled": true,
+                      "events": [
+                        "batches.completed",
+                        "batches.error",
+                      ],
+                      "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                      "token": "hunter2",
+                      "url": "https://example.com:5689",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/webhooks/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Webhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "getWebhooks": {
+              "auth": true,
+              "display-name": "List all webhooks",
+              "docs": "List all webhooks",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "GET" \
+    "https://api.ntropy.com/v3/webhooks" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+for webhook in sdk.webhooks.list().auto_paginate():
+    ... ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "response": {
+                    "body": {
+                      "data": [
+                        {
+                          "created_at": "2024-10-03T02:53:30Z",
+                          "enabled": true,
+                          "events": [
+                            "batches.completed",
+                            "batches.error",
+                          ],
+                          "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                          "token": "hunter2",
+                          "url": "https://example.com:5689",
+                        },
+                      ],
+                      "next_cursor": "XjdHaksD",
+                    },
+                  },
+                },
+              ],
+              "method": "GET",
+              "pagination": undefined,
+              "path": "/v3/webhooks",
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.PagedResponseWebhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "patchWebhook": {
+              "auth": true,
+              "display-name": "Update a webhook",
+              "docs": "Update a webhook. Fields that aren't specified in the body will remain unchanged",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "events": [
+            "batches.completed",
+            "batches.error"
+        ],
+        "enabled": false
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+wh = sdk.webhooks.patch(
+    "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+    events=['batches.completed', 'batches.error'],
+    enabled=False,
+)
+",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "path-parameters": {
+                    "id": "id",
+                  },
+                  "request": {},
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "enabled": true,
+                      "events": [
+                        "batches.completed",
+                        "batches.error",
+                      ],
+                      "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                      "token": "hunter2",
+                      "url": "https://example.com:5689",
+                    },
+                  },
+                },
+              ],
+              "method": "PATCH",
+              "pagination": undefined,
+              "path": "/v3/webhooks/{id}",
+              "path-parameters": {
+                "id": "string",
+              },
+              "request": {
+                "body": {
+                  "properties": {
+                    "enabled": {
+                      "docs": "Whether the webhook is enabled or not.",
+                      "type": "optional<boolean>",
+                    },
+                    "events": {
+                      "docs": "A list of events that this webhook subscribes to",
+                      "type": "optional<list<WebhookPatchEventsItem>>",
+                    },
+                    "token": {
+                      "docs": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                      "type": "optional<string>",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": 128,
+                        "minLength": undefined,
+                        "pattern": undefined,
+                      },
+                    },
+                    "url": {
+                      "docs": "The URL of the webhook",
+                      "type": "optional<string>",
+                      "validation": {
+                        "format": "uri",
+                        "maxLength": 1024,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "WebhookPatch",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Webhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+            "postWebhook": {
+              "auth": true,
+              "display-name": "Create a webhook",
+              "docs": "Create a webhook to be called when certain events occur.",
+              "errors": [
+                "root.UnprocessableEntityError",
+              ],
+              "examples": [
+                {
+                  "code-samples": [
+                    {
+                      "code": "curl -X "POST" \
+    "https://api.ntropy.com/v3/webhooks" \
+    -H "Accept: application/json" \
+    -H "X-API-KEY: cd1H...Wmhl"  \
+    -H "Content-Type: application/json" \
+    -d '{
+        "url": "https://example.com:5689",
+        "events": [
+            "batches.completed",
+            "batches.error"
+        ],
+        "token": "hunter2"
+    }]'
+ ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "cURL",
+                      "name": "cURL",
+                    },
+                    {
+                      "code": "from ntropy_sdk import SDK
+
+sdk = SDK("cd1H...Wmhl")
+sdk.webhooks.create(
+    url="https://example.com:5689",
+    events="['batches.completed', 'batches.error']",
+    token="hunter2",
+) ",
+                      "docs": undefined,
+                      "install": undefined,
+                      "language": "python",
+                      "name": "Python SDK",
+                    },
+                  ],
+                  "request": {
+                    "events": [
+                      "reports.resolved",
+                    ],
+                    "url": "url",
+                  },
+                  "response": {
+                    "body": {
+                      "created_at": "2024-10-03T02:53:30Z",
+                      "enabled": true,
+                      "events": [
+                        "batches.completed",
+                        "batches.error",
+                      ],
+                      "id": "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                      "token": "hunter2",
+                      "url": "https://example.com:5689",
+                    },
+                  },
+                },
+              ],
+              "method": "POST",
+              "pagination": undefined,
+              "path": "/v3/webhooks",
+              "request": {
+                "body": {
+                  "properties": {
+                    "events": {
+                      "docs": "A list of events that this webhook subscribes to",
+                      "type": "list<WebhookBaseEventsItem>",
+                    },
+                    "token": {
+                      "docs": "A secret string used to authenticate the webhook. This value will be included in the `X-Ntropy-Token` header when sending requests to the webhook",
+                      "type": "optional<string>",
+                      "validation": {
+                        "format": undefined,
+                        "maxLength": 128,
+                        "minLength": undefined,
+                        "pattern": undefined,
+                      },
+                    },
+                    "url": {
+                      "docs": "The URL of the webhook",
+                      "type": "string",
+                      "validation": {
+                        "format": "uri",
+                        "maxLength": 1024,
+                        "minLength": 1,
+                        "pattern": undefined,
+                      },
+                    },
+                  },
+                },
+                "content-type": "application/json",
+                "headers": undefined,
+                "name": "WebhookBase",
+                "path-parameters": undefined,
+                "query-parameters": undefined,
+              },
+              "response": {
+                "docs": "Successful Response",
+                "type": "root.Webhook",
+              },
+              "source": {
+                "openapi": "../openapi.yml",
+              },
+            },
+          },
+          "source": {
+            "openapi": "../openapi.yml",
+          },
+        },
+        "types": {
+          "WebhookBaseEventsItem": {
+            "enum": [
+              {
+                "name": "ReportsResolved",
+                "value": "reports.resolved",
+              },
+              {
+                "name": "ReportsRejected",
+                "value": "reports.rejected",
+              },
+              {
+                "name": "ReportsPending",
+                "value": "reports.pending",
+              },
+              {
+                "name": "BankStatementsCompleted",
+                "value": "bank_statements.completed",
+              },
+              {
+                "name": "BankStatementsError",
+                "value": "bank_statements.error",
+              },
+              {
+                "name": "BatchesCompleted",
+                "value": "batches.completed",
+              },
+              {
+                "name": "BatchesError",
+                "value": "batches.error",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+          "WebhookPatchEventsItem": {
+            "enum": [
+              {
+                "name": "ReportsResolved",
+                "value": "reports.resolved",
+              },
+              {
+                "name": "ReportsRejected",
+                "value": "reports.rejected",
+              },
+              {
+                "name": "ReportsPending",
+                "value": "reports.pending",
+              },
+              {
+                "name": "BankStatementsCompleted",
+                "value": "bank_statements.completed",
+              },
+              {
+                "name": "BankStatementsError",
+                "value": "bank_statements.error",
+              },
+              {
+                "name": "BatchesCompleted",
+                "value": "batches.completed",
+              },
+              {
+                "name": "BatchesError",
+                "value": "batches.error",
+              },
+            ],
+            "source": {
+              "openapi": "../openapi.yml",
+            },
+          },
+        },
+      },
+      "rawContents": "imports:
+  root: __package__.yml
+service:
+  auth: false
+  base-path: ''
+  endpoints:
+    getWebhooks:
+      path: /v3/webhooks
+      method: GET
+      auth: true
+      docs: List all webhooks
+      source:
+        openapi: ../openapi.yml
+      display-name: List all webhooks
+      response:
+        docs: Successful Response
+        type: root.PagedResponseWebhook
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - response:
+            body:
+              next_cursor: XjdHaksD
+              data:
+                - url: https://example.com:5689
+                  events:
+                    - batches.completed
+                    - batches.error
+                  token: hunter2
+                  id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+                  created_at: '2024-10-03T02:53:30Z'
+                  enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/webhooks" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                for webhook in sdk.webhooks.list().auto_paginate():
+                    ... 
+    postWebhook:
+      path: /v3/webhooks
+      method: POST
+      auth: true
+      docs: Create a webhook to be called when certain events occur.
+      source:
+        openapi: ../openapi.yml
+      display-name: Create a webhook
+      request:
+        name: WebhookBase
+        body:
+          properties:
+            url:
+              type: string
+              docs: The URL of the webhook
+              validation:
+                format: uri
+                minLength: 1
+                maxLength: 1024
+            events:
+              docs: A list of events that this webhook subscribes to
+              type: list<WebhookBaseEventsItem>
+            token:
+              type: optional<string>
+              docs: >-
+                A secret string used to authenticate the webhook. This value
+                will be included in the `X-Ntropy-Token` header when sending
+                requests to the webhook
+              validation:
+                maxLength: 128
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Webhook
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - request:
+            url: url
+            events:
+              - reports.resolved
+          response:
+            body:
+              url: https://example.com:5689
+              events:
+                - batches.completed
+                - batches.error
+              token: hunter2
+              id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+              created_at: '2024-10-03T02:53:30Z'
+              enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/webhooks" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "url": "https://example.com:5689",
+                        "events": [
+                            "batches.completed",
+                            "batches.error"
+                        ],
+                        "token": "hunter2"
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.webhooks.create(
+                    url="https://example.com:5689",
+                    events="['batches.completed', 'batches.error']",
+                    token="hunter2",
+                ) 
+    getWebhook:
+      path: /v3/webhooks/{id}
+      method: GET
+      auth: true
+      docs: Retrieve a webhook
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Retrieve a webhook
+      response:
+        docs: Successful Response
+        type: root.Webhook
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          response:
+            body:
+              url: https://example.com:5689
+              events:
+                - batches.completed
+                - batches.error
+              token: hunter2
+              id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+              created_at: '2024-10-03T02:53:30Z'
+              enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "GET" \
+                    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: >
+                from ntropy_sdk import SDK
+
+
+                sdk = SDK("cd1H...Wmhl")
+
+                webhook =
+                sdk.webhooks.get("e94a150d-40af-4e96-8aa7-2948a6b4d8d3")
+    deleteWebhook:
+      path: /v3/webhooks/{id}
+      method: DELETE
+      auth: true
+      docs: Delete a webhook
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Delete a webhook
+      errors:
+        - root.NotFoundError
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "DELETE" \
+                    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  
+            - name: Python SDK
+              language: python
+              code: |-
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                sdk.webhooks.delete("e94a150d-40af-4e96-8aa7-2948a6b4d8d3") 
+    patchWebhook:
+      path: /v3/webhooks/{id}
+      method: PATCH
+      auth: true
+      docs: >-
+        Update a webhook. Fields that aren't specified in the body will remain
+        unchanged
+      source:
+        openapi: ../openapi.yml
+      path-parameters:
+        id: string
+      display-name: Update a webhook
+      request:
+        name: WebhookPatch
+        body:
+          properties:
+            url:
+              type: optional<string>
+              docs: The URL of the webhook
+              validation:
+                format: uri
+                minLength: 1
+                maxLength: 1024
+            events:
+              type: optional<list<WebhookPatchEventsItem>>
+              docs: A list of events that this webhook subscribes to
+            token:
+              type: optional<string>
+              docs: >-
+                A secret string used to authenticate the webhook. This value
+                will be included in the `X-Ntropy-Token` header when sending
+                requests to the webhook
+              validation:
+                maxLength: 128
+            enabled:
+              type: optional<boolean>
+              docs: Whether the webhook is enabled or not.
+        content-type: application/json
+      response:
+        docs: Successful Response
+        type: root.Webhook
+      errors:
+        - root.UnprocessableEntityError
+      examples:
+        - path-parameters:
+            id: id
+          request: {}
+          response:
+            body:
+              url: https://example.com:5689
+              events:
+                - batches.completed
+                - batches.error
+              token: hunter2
+              id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+              created_at: '2024-10-03T02:53:30Z'
+              enabled: true
+          code-samples:
+            - name: cURL
+              language: cURL
+              code: |-
+                curl -X "POST" \
+                    "https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3" \
+                    -H "Accept: application/json" \
+                    -H "X-API-KEY: cd1H...Wmhl"  \
+                    -H "Content-Type: application/json" \
+                    -d '{
+                        "events": [
+                            "batches.completed",
+                            "batches.error"
+                        ],
+                        "enabled": false
+                    }]'
+                 
+            - name: Python SDK
+              language: python
+              code: |
+                from ntropy_sdk import SDK
+
+                sdk = SDK("cd1H...Wmhl")
+                wh = sdk.webhooks.patch(
+                    "e94a150d-40af-4e96-8aa7-2948a6b4d8d3",
+                    events=['batches.completed', 'batches.error'],
+                    enabled=False,
+                )
+  source:
+    openapi: ../openapi.yml
+  display-name: Webhooks
+docs: >
+
+  The Webhooks API allows you to receive notifications when certain events
+  occur,
+
+  such as when a batch or bank statement finishes processing. 
+
+
+  When an event occurs, Ntropy will make a POST request to the `url` of the
+
+  webhook. If you specified a `token` when creating the webhook, this string
+  will
+
+  be included in the `X-Ntropy-Token` header. The webhook call has a timeout
+  limit of 10 
+
+  seconds, so any processing of the event 
+types:
+  WebhookBaseEventsItem:
+    enum:
+      - value: reports.resolved
+        name: ReportsResolved
+      - value: reports.rejected
+        name: ReportsRejected
+      - value: reports.pending
+        name: ReportsPending
+      - value: bank_statements.completed
+        name: BankStatementsCompleted
+      - value: bank_statements.error
+        name: BankStatementsError
+      - value: batches.completed
+        name: BatchesCompleted
+      - value: batches.error
+        name: BatchesError
+    source:
+      openapi: ../openapi.yml
+  WebhookPatchEventsItem:
+    enum:
+      - value: reports.resolved
+        name: ReportsResolved
+      - value: reports.rejected
+        name: ReportsRejected
+      - value: reports.pending
+        name: ReportsPending
+      - value: bank_statements.completed
+        name: BankStatementsCompleted
+      - value: bank_statements.error
+        name: BankStatementsError
+      - value: batches.completed
+        name: BatchesCompleted
+      - value: batches.error
+        name: BatchesError
+    source:
+      openapi: ../openapi.yml
+",
+    },
+  },
+  "packageMarkers": {},
+  "rootApiFile": {
+    "contents": {
+      "auth": "APIKeyHeader",
+      "auth-schemes": {
+        "APIKeyHeader": {
+          "header": "X-Api-Key",
+          "name": "apiKey",
+          "type": "string",
+        },
+      },
+      "default-environment": "Default",
+      "display-name": "Ntropy Transaction API",
+      "environments": {
+        "Default": "https://api.ntropy.com",
+      },
+      "error-discrimination": {
+        "strategy": "status-code",
+      },
+      "name": "api",
+    },
+    "defaultUrl": undefined,
+    "rawContents": "name: api
+error-discrimination:
+  strategy: status-code
+display-name: Ntropy Transaction API
+environments:
+  Default: https://api.ntropy.com
+default-environment: Default
+auth-schemes:
+  APIKeyHeader:
+    header: X-Api-Key
+    name: apiKey
+    type: string
+auth: APIKeyHeader
+",
+  },
+}
\ No newline at end of file
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/fern.config.json b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/fern.config.json
new file mode 100644
index 00000000000..7980537f564
--- /dev/null
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/fern.config.json
@@ -0,0 +1,4 @@
+{
+    "organization": "fern",
+    "version": "*"
+}
\ No newline at end of file
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/generators.yml b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/generators.yml
new file mode 100644
index 00000000000..602118874c2
--- /dev/null
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/fern/generators.yml
@@ -0,0 +1,3 @@
+api:
+  specs:
+    - openapi: ../openapi.yml
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/openapi.yml b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/openapi.yml
new file mode 100644
index 00000000000..90fcd63f6fd
--- /dev/null
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/openapi.yml
@@ -0,0 +1,4145 @@
+openapi: 3.1.0
+info:
+  title: Ntropy Transaction API
+  contact:
+    name: API Support
+    url: https://ntropy.com/developers
+    email: api@ntropy.com
+  version: '3.0'
+servers:
+- url: https://api.ntropy.com
+  description: Production server (uses live data).
+paths:
+  /v3/transactions/{id}:
+    get:
+      tags:
+      - Transactions
+      summary: Retrieve a transaction
+      operationId: get_transaction_v3_transactions__id__get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Transaction'
+        '404':
+          description: Transaction with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          tx = sdk.transactions.get("xbx8YP14g565Xk") '
+    delete:
+      tags:
+      - Transactions
+      summary: Deletes a transaction
+      description: Deleting a transaction will also delete it from our systems. This
+        operation is permanent.
+      operationId: delete_transaction_v3_transactions__id__delete
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '204':
+          description: Deletion successful
+        '404':
+          description: Transaction with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          tx = sdk.transactions.delete("xbx8YP14g565Xk") '
+  /v3/transactions:
+    get:
+      tags:
+      - Transactions
+      summary: List all transactions
+      description: Return a list of enriched transactions starting with the most recent
+        one.
+      operationId: list_transactions_v3_transactions_get
+      parameters:
+      - description: Only return transactions older or equal than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created After
+          description: Only return transactions older or equal than this date
+        name: created_after
+        in: query
+      - description: Only return transactions newer than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created Before
+          description: Only return transactions newer than this date
+        name: created_before
+        in: query
+      - description: Starting point for the set of transactions
+        required: false
+        schema:
+          type: string
+          title: Cursor
+          description: Starting point for the set of transactions
+        name: cursor
+        in: query
+      - description: The limit of transactions to be returned
+        required: false
+        schema:
+          type: integer
+          maximum: 500.0
+          minimum: 1.0
+          title: Limit
+          description: The limit of transactions to be returned
+          default: 25
+        name: limit
+        in: query
+      - description: If specified, only return the transactions of this account holder
+        required: false
+        schema:
+          type: string
+          title: Account Holder Id
+          description: If specified, only return the transactions of this account
+            holder
+        name: account_holder_id
+        in: query
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PagedResponse_Transaction'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/transactions\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nfor tx\
+          \ in sdk.transactions.list().auto_paginate():\n    ... "
+    post:
+      tags:
+      - Transactions
+      summary: Synchronously enrich transactions
+      description: "Enriches a list of transactions in synchronous fashion. The enriched\
+        \ transactions returned in\nthe order that they were submitted. Webhook events\
+        \ are not triggered for this operation. \n\nThis endpoint supports up to 1000\
+        \ transactions. \n\nIf you want more throughput and live updates refer to\
+        \ the \n[async enrichment endpoint](../batches/post-batch)."
+      operationId: post_transactions_v3_transactions_post
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SyncEnrichmentInput'
+        required: true
+      responses:
+        '200':
+          description: Enriched transactions.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SyncEnrichmentOutput'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/transactions\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '[{\n      \
+          \  \"id\": \"xbx8YP14g565Xk\",\n        \"description\": \"SQ* STARBUCKS\
+          \ NW 43RD\",\n        \"date\": \"2024-03-30\",\n        \"amount\": 10.0,\n\
+          \        \"entry_type\": \"outgoing\",\n        \"currency\": \"USD\",\n\
+          \        \"account_holder_id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          ,\n        \"location\": {\n            \"country\": \"US\"\n        }\n\
+          \    }]'\n "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK, TransactionInput, LocationInput\n\nsdk\
+          \ = SDK(\"cd1H...Wmhl\")\nenriched = sdk.transactions.create([\n    TransactionInput(\n\
+          \        id=\"xbx8YP14g565Xk\",\n        description=\"SQ* STARBUCKS NW\
+          \ 43RD\",\n        account_holder_id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          ,\n        amount=10.0,\n        entry_type=\"outgoing\",\n        date=\"\
+          2024-03-30\",\n        currency=\"USD\",\n        location=LocationInput(\n\
+          \          country=\"US\",\n        )\n    )\n]) "
+  /v3/transactions/{id}/assign:
+    post:
+      tags:
+      - Transactions
+      summary: Assign a transaction to an account holder
+      description: Changes the account holder associated with the transaction. The
+        old and new account holder must share the same categories
+      operationId: set_transaction_ah_v3_transactions__id__assign_post
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Body_set_transaction_ah_v3_transactions__id__assign_post'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Transaction'
+        '404':
+          description: Transaction or account holder with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/transactions/xbx8YP14g565Xk\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n       \
+          \ \"account_holder_id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\n    }]'\n\
+          \ "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.transactions.assign(\n\
+          \    transaction_id=\"xbx8YP14g565Xk\", \n    account_holder_id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          \n) "
+  /v3/batches:
+    get:
+      tags:
+      - Batches
+      summary: List all batches
+      description: Returns a list of submitted batches starting with the most recent
+        one.
+      operationId: get_batches_v3_batches_get
+      parameters:
+      - description: Only return batches older or equal than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created After
+          description: Only return batches older or equal than this date
+        name: created_after
+        in: query
+      - description: Only return batches newer than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created Before
+          description: Only return batches newer than this date
+        name: created_before
+        in: query
+      - description: Starting point for the set of batches
+        required: false
+        schema:
+          type: string
+          title: Cursor
+          description: Starting point for the set of batches
+        name: cursor
+        in: query
+      - description: The limit of batches to be returned
+        required: false
+        schema:
+          type: integer
+          maximum: 50.0
+          minimum: 1.0
+          title: Limit
+          description: The limit of batches to be returned
+          default: 10
+        name: limit
+        in: query
+      - description: If specified, only return batches with this status
+        required: false
+        schema:
+          allOf:
+          - $ref: '#/components/schemas/BatchStatus'
+          description: If specified, only return batches with this status
+        name: status
+        in: query
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PagedResponse_Batch'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/batches\" \\\n\
+          \    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nfor batch in sdk.batches.list().auto_paginate():\n\
+          \    ... "
+    post:
+      tags:
+      - Batches
+      summary: Submit a batch of transactions
+      description: "Creates a batch of transactions and enriches it in an asynchronous\
+        \ fashion. A batch, representing the status of the \nenrichment progress is\
+        \ returned as a result of the submission. \n\nIn order to be notified on the\
+        \ status of the batch, you can setup [webhooks](../../../webhooks) and receive\
+        \ \nthe respective notifications. Alternatively, you can \n[poll](../../../enrichment/introduction/#viewing-the-progress-of-a-batch)\
+        \ for the status of the batch using its id.\n\nThis endpoints supports up\
+        \ to 24960 transactions."
+      operationId: post_batch_v3_batches_post
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/AsyncEnrichmentInput'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Batch'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/batches/\" \\\
+          \n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '[{\n      \
+          \  \"id\": \"xbx8YP14g565Xk\",\n        \"description\": \"SQ* STARBUCKS\
+          \ NW 43RD\",\n        \"date\": \"2024-03-30\",\n        \"amount\": 10.0,\n\
+          \        \"entry_type\": \"outgoing\",\n        \"currency\": \"USD\",\n\
+          \        \"account_holder_id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          ,\n        \"location\": {\n            \"country\": \"US\"\n        }\n\
+          \    }]'\n "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK, TransactionInput, LocationInput\n\nsdk\
+          \ = SDK(\"cd1H...Wmhl\")\nbatch = sdk.batches.create([\n    TransactionInput(\n\
+          \        id=\"xbx8YP14g565Xk\",\n        description=\"SQ* STARBUCKS NW\
+          \ 43RD\",\n        account_holder_id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          ,\n        amount=10.0,\n        entry_type=\"outgoing\",\n        date=\"\
+          2024-03-30\",\n        currency=\"USD\",\n        location=LocationInput(\n\
+          \          country=\"US\",\n        )\n    )\n]) "
+  /v3/batches/{id}:
+    get:
+      tags:
+      - Batches
+      summary: Retrieve a batch
+      operationId: get_single_batch_v3_batches__id__get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Batch'
+        '404':
+          description: Batch with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          batch = sdk.batches.get("f203613d2-83c8-4130-8809-d14206eeec20") '
+  /v3/batches/{id}/results:
+    get:
+      tags:
+      - Batches
+      summary: Retrieve the results of a batch
+      description: Returns the results of the enrichment request. The resulting enriched
+        transactions are returned in the same order they were submitted. Results are
+        available after the batch has finished processing.
+      operationId: get_batch_results_v3_batches__id__results_get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Returned batch of transaction enrichment results.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BatchResult'
+        '404':
+          description: Batch with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/batches/203613d2-83c8-4130-8809-d14206eeec20/results\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          results = sdk.batches.wait_for_results("f203613d2-83c8-4130-8809-d14206eeec20")
+
+          '
+  /v3/bank_statements:
+    get:
+      tags:
+      - Bank statements
+      summary: List all bank statements
+      description: Return a list of submitted bank statements starting with the most
+        recent one.
+      operationId: get_bank_statements_v3_bank_statements_get
+      parameters:
+      - description: Only return bank statements older or equal than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created After
+          description: Only return bank statements older or equal than this date
+        name: created_after
+        in: query
+      - description: Only return bank statements newer than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created Before
+          description: Only return bank statements newer than this date
+        name: created_before
+        in: query
+      - description: Starting point for the set of bank statements
+        required: false
+        schema:
+          type: string
+          title: Cursor
+          description: Starting point for the set of bank statements
+        name: cursor
+        in: query
+      - description: The limit of bank statements to be returned
+        required: false
+        schema:
+          type: integer
+          maximum: 50.0
+          minimum: 1.0
+          title: Limit
+          description: The limit of bank statements to be returned
+          default: 10
+        name: limit
+        in: query
+      - description: If specified, only return bank statements with this status
+        required: false
+        schema:
+          allOf:
+          - $ref: '#/components/schemas/DocumentStatus'
+          description: If specified, only return bank statements with this status
+        name: status
+        in: query
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PagedResponse_BankStatement'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/bank_statements\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nfor bs\
+          \ in sdk.bank_statements.list().auto_paginate():\n    ... "
+    post:
+      tags:
+      - Bank statements
+      summary: Submit a bank statement PDF
+      description: Upload a PDF file and queue it for extraction.
+      operationId: post_bank_statement_v3_bank_statements_post
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Body_post_bank_statement_v3_bank_statements_post'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BankStatement'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n        \"https://api.ntropy.com/v3/bank_statements\"\
+          \ \\\n        -H \"Accept: application/json\" \\\n        -H \"X-API-KEY:\
+          \ cd1H...Wmhl\" \\\n        --form file=@bank_statement.pdf\n    "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nwith open('bank_statement.pdf',\
+          \ 'rb') as fh:\n    bank_statement = sdk.bank_statements.create(fh)\n  \
+          \  results = sdk.bank_statement.wait_for_results(bank_statement.id) "
+  /v3/bank_statements/{id}:
+    get:
+      tags:
+      - Bank statements
+      summary: Retrieve a bank statement
+      operationId: get_bank_statement_v3_bank_statements__id__get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BankStatement'
+        '404':
+          description: Bank statement with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          bs = sdk.bank_statements.get("7f8dceac-2848-472d-b5c3-55cdbaf35a9b") '
+    delete:
+      tags:
+      - Bank statements
+      summary: Deletes a bank statement
+      operationId: delete_bank_statement_v3_bank_statements__id__delete
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '204':
+          description: Deletion successful
+        '404':
+          description: Bank statement with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+  /v3/bank_statements/{id}/overview:
+    post:
+      tags:
+      - Bank statements
+      summary: Quickly extract account holder, institution and first account
+      description: 'Extracts account holder, bank and account information extracted
+        from the first page of the bank statement, which is typically available before
+        the full results. This is a synchronous call.
+
+
+        Complete guide: [Overview](../../../bank-statements)'
+      operationId: get_bank_statement_statement_info_v3_bank_statements__id__overview_post
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StatementInfo'
+        '404':
+          description: Bank statement with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/overview\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\noverview\
+          \ = sdk.bank_statements.overview(\n    \"7f8dceac-2848-472d-b5c3-55cdbaf35a9b\"\
+          \n) "
+  /v3/bank_statements/{id}/results:
+    get:
+      tags:
+      - Bank statements
+      summary: Retrieve the extraction results
+      description: Return the extracted account information and associated transactions
+        from a bank statement PDF. The results are accessible once the statement's
+        status is `completed`.
+      operationId: get_bank_statement_result_v3_bank_statements__id__results_get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BankStatementResults'
+        '404':
+          description: Bank statement with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/bank_statements/7f8dceac-2848-472d-b5c3-55cdbaf35a9b/results\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nbs = sdk.bank_statements.get(\"\
+          7f8dceac-2848-472d-b5c3-55cdbaf35a9b\")\nresults = sdk.bank_statements.wait_for_results(\n\
+          \    \"7f8dceac-2848-472d-b5c3-55cdbaf35a9b\"\n) "
+  /v3/account_holders/{id}:
+    get:
+      tags:
+      - Account Holders
+      summary: Retrieve an account holder.
+      operationId: get_account_holder_v3_account_holders__id__get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AccountHolderExternal'
+        '404':
+          description: Account holder with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          ah = sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") '
+    delete:
+      tags:
+      - Account Holders
+      summary: Deletes an account holder and their transactions
+      description: Deletes all of the transactions in the account holder's history.
+        This operation is permanent and irreversible
+      operationId: delete_account_holder_v3_account_holders__id__delete
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '204':
+          description: Deletion successful
+        '404':
+          description: Account holder with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          ah = sdk.account_holders.delete("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") '
+  /v3/account_holders:
+    get:
+      tags:
+      - Account Holders
+      summary: List all account holders.
+      operationId: get_account_holders_v3_account_holders_get
+      parameters:
+      - description: Only return account holders older or equal than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created After
+          description: Only return account holders older or equal than this date
+        name: created_after
+        in: query
+      - description: Only return account holders newer than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created Before
+          description: Only return account holders newer than this date
+        name: created_before
+        in: query
+      - description: Starting point for the set of account holders
+        required: false
+        schema:
+          type: string
+          title: Cursor
+          description: Starting point for the set of account holders
+        name: cursor
+        in: query
+      - description: The limit of account holders to be returned
+        required: false
+        schema:
+          type: integer
+          maximum: 50.0
+          minimum: 1.0
+          title: Limit
+          description: The limit of account holders to be returned
+          default: 10
+        name: limit
+        in: query
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PagedResponse_AccountHolderExternal'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          ah = sdk.account_holders.get("f35b927b6-6fda-40aa-93b8-95b47c2b2cad") '
+    post:
+      tags:
+      - Account Holders
+      summary: Create an account holder.
+      operationId: create_account_holder_v3_account_holders_post
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/AccountHolderCreate'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AccountHolderExternal'
+        '400':
+          description: Account holder with the provided id already exists.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/account_holders\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n       \
+          \ \"id\": \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n        \"type\": \"\
+          consumer\",\n        \"name\": \"John Doe\"\n    }]'\n "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nah = sdk.account_holders.create(\n\
+          \    id=\"35b927b6-6fda-40aa-93b8-95b47c2b2cad\",\n    type=\"consumer\"\
+          ,\n    name=\"John Doe\",\n) "
+  /v3/account_holders/{id}/recurring_groups:
+    post:
+      tags:
+      - Recurrence
+      summary: Find recurring groups in a transaction history
+      description: Identifies and categorizes recurring patterns found in the transaction
+        history of the account holder, such as periodic payments or subscriptions.
+        These patterns are called recurrence groups.
+      operationId: get_account_holder_recurring_payments_v3_account_holders__id__recurring_groups_post
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/RecurrenceGroup'
+                type: array
+                title: Response Get Account Holder Recurring Payments V3 Account Holders  Id  Recurring
+                  Groups Post
+        '404':
+          description: Account holder with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/account_holders/35b927b6-6fda-40aa-93b8-95b47c2b2cad/recurring_groups\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nrecurring_groups\
+          \ = sdk.account_holders.recurring_groups(\n    \"35b927b6-6fda-40aa-93b8-95b47c2b2cad\"\
+          \n) "
+  /v3/webhooks:
+    get:
+      tags:
+      - Webhooks
+      summary: List all webhooks
+      description: List all webhooks
+      operationId: get_webhooks_v3_webhooks_get
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PagedResponse_Webhook'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/webhooks\" \\\
+          \n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nfor webhook\
+          \ in sdk.webhooks.list().auto_paginate():\n    ... "
+    post:
+      tags:
+      - Webhooks
+      summary: Create a webhook
+      description: Create a webhook to be called when certain events occur.
+      operationId: post_webhook_v3_webhooks_post
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/WebhookBase'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Webhook'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/webhooks\" \\\
+          \n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n       \
+          \ \"url\": \"https://example.com:5689\",\n        \"events\": [\n      \
+          \      \"batches.completed\",\n            \"batches.error\"\n        ],\n\
+          \        \"token\": \"hunter2\"\n    }]'\n "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.webhooks.create(\n\
+          \    url=\"https://example.com:5689\",\n    events=\"['batches.completed',\
+          \ 'batches.error']\",\n    token=\"hunter2\",\n) "
+  /v3/webhooks/{id}:
+    get:
+      tags:
+      - Webhooks
+      summary: Retrieve a webhook
+      description: Retrieve a webhook
+      operationId: get_webhook_v3_webhooks__id__get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Webhook'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          webhook = sdk.webhooks.get("e94a150d-40af-4e96-8aa7-2948a6b4d8d3")
+
+          '
+    delete:
+      tags:
+      - Webhooks
+      summary: Delete a webhook
+      description: Delete a webhook
+      operationId: delete_webhook_v3_webhooks__id__delete
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '204':
+          description: Deletion successful
+        '404':
+          description: Webhook with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.webhooks.delete("e94a150d-40af-4e96-8aa7-2948a6b4d8d3") '
+    patch:
+      tags:
+      - Webhooks
+      summary: Update a webhook
+      description: Update a webhook. Fields that aren't specified in the body will
+        remain unchanged
+      operationId: patch_webhook_v3_webhooks__id__patch
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/WebhookPatch'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Webhook'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/webhooks/e94a150d-40af-4e96-8aa7-2948a6b4d8d3\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n       \
+          \ \"events\": [\n            \"batches.completed\",\n            \"batches.error\"\
+          \n        ],\n        \"enabled\": false\n    }]'\n "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nwh = sdk.webhooks.patch(\n\
+          \    \"e94a150d-40af-4e96-8aa7-2948a6b4d8d3\",\n    events=['batches.completed',\
+          \ 'batches.error'],\n    enabled=False,\n)\n"
+  /v3/rules:
+    get:
+      tags:
+      - Personalization
+      - Personalization
+      summary: Get the current personalization ruleset.
+      description: Get the current personalization ruleset.
+      operationId: filter_get_v3_rules_get
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/FilterModel'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/rules\" \\\n\
+          \    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          rules = sdk.rules.get()
+
+          '
+    post:
+      tags:
+      - Personalization
+      - Personalization
+      summary: Set the personalization ruleset.
+      description: Set the personalization ruleset.
+      operationId: filter_post_v3_rules_post
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/FilterModel'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema: {}
+        '400':
+          description: Provided ruleset has invalid structure
+        '413':
+          description: Ruleset was larger than 50KiB
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/rules\" \\\n\
+          \    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \ \\\n    -H \"Content-Type: application/json\" \\\n    -d '[{\n       \
+          \ \"if\": {\n            \"is_substring\": [\n                {\"get\":\
+          \ \"website\"},\n                \"ntropy\"\n            ]\n        },\n\
+          \        \"then\": [\n            {\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"\
+          }\n        ],\n        \"else\": [\n            {\"remove_label\": \"example\
+          \ label\"}\n        ]\n    }]'\n"
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.rules.set([{\n\
+          \    \"if\": {\n        \"is_substring\": [\n            {\"get\": \"website\"\
+          },\n            \"ntropy\"\n        ]\n    },\n    \"then\": [\n       \
+          \ {\"set\": \"logo\", \"to\": \"http://example.com/favicon.ico\"}\n    ],\n\
+          \    \"else\": [\n        {\"remove_label\": \"example label\"}\n    ]\n\
+          }])\n"
+  /v3/rules/append:
+    post:
+      tags:
+      - Personalization
+      - Personalization
+      summary: Append a rule.
+      description: Append a rule to the personalization ruleset.
+      operationId: filter_append_v3_rules_append_post
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ActionModel'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema: {}
+        '400':
+          description: Provided rule has invalid structure
+        '413':
+          description: Ruleset after append was larger than 50KiB
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/rules/append\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \ \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\"set\": \"\
+          logo\", \"to\": \"http://example.com/favicon.ico\"}'\n"
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.rules.append({"set": "logo", "to": "http://example.com/favicon.ico"})
+
+          '
+  /v3/rules/{index}:
+    delete:
+      tags:
+      - Personalization
+      - Personalization
+      summary: Delete a rule.
+      description: Delete the rule at the specified index from the personalization
+        ruleset.
+      operationId: filter_delete_v3_rules__index__delete
+      parameters:
+      - required: true
+        schema:
+          type: integer
+          title: Index
+        name: index
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema: {}
+        '400':
+          description: Provided index does not exist in ruleset
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"DELETE\" \\\n    \"https://api.ntropy.com/v3/rules/0\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.rules.delete(0)
+
+          '
+    patch:
+      tags:
+      - Personalization
+      - Personalization
+      summary: Modify an existing rule.
+      description: Modify an existing rule at the specified index on the ruleset.
+      operationId: filter_patch_v3_rules__index__patch
+      parameters:
+      - required: true
+        schema:
+          type: integer
+          title: Index
+        name: index
+        in: path
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ActionModel'
+        required: true
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema: {}
+        '400':
+          description: Provided index does not exist in ruleset
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"PATCH\" \\\n    \"https://api.ntropy.com/v3/rules/0\" \\\
+          \n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \ \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\"set\": \"\
+          logo\", \"to\": \"http://example.com/favicon.ico\"}'\n"
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.rules.patch(0, {"set": "logo", "to": "http://example.com/favicon.ico"})
+
+          '
+  /v3/reports:
+    get:
+      tags:
+      - Reports
+      summary: List all reports
+      description: List all reports
+      operationId: get_reports_v3_reports_get
+      parameters:
+      - description: Only return report older or equal than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created After
+          description: Only return report older or equal than this date
+        name: created_after
+        in: query
+      - description: Only return report newer than this date
+        required: false
+        schema:
+          type: string
+          format: date-time
+          title: Created Before
+          description: Only return report newer than this date
+        name: created_before
+        in: query
+      - description: Starting point for the set of report
+        required: false
+        schema:
+          type: string
+          title: Cursor
+          description: Starting point for the set of report
+        name: cursor
+        in: query
+      - description: The limit of report to be returned
+        required: false
+        schema:
+          type: integer
+          maximum: 50.0
+          minimum: 1.0
+          title: Limit
+          description: The limit of report to be returned
+          default: 10
+        name: limit
+        in: query
+      - description: If specified, only return reports with this status
+        required: false
+        schema:
+          allOf:
+          - $ref: '#/components/schemas/ReportStatus'
+          description: If specified, only return reports with this status
+        name: status
+        in: query
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PagedResponse_Report_'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/reports\" \\\n\
+          \    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nreports\
+          \ = sdk.reports.list()\n    "
+    post:
+      tags:
+      - Reports
+      summary: Create a report
+      description: Report a transaction with incorrect fields.
+      operationId: post_report_v3_reports_post
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportBase'
+        required: true
+      responses:
+        '200':
+          description: The newly created report
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Report'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/reports\" \\\
+          \n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n       \
+          \ \"transaction_id\": \"xbx8YP14g565Xk\",\n        \"description\": \"lorem\
+          \ ipsum\",\n        \"fields\": [\n            \".entities.counterparty\"\
+          \n        ]\n    }]'\n "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nreport\
+          \ = sdk.reports.create(\n    transaction_id=\"xbx8YP14g565Xk\",\n    description=\"\
+          lorem ipsum\",\n    fields=['.entities.counterparty'],\n)\n"
+  /v3/reports/{id}:
+    get:
+      tags:
+      - Reports
+      summary: Retrieve a report
+      description: Retrieve a report
+      operationId: get_report_v3_reports__id__get
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Report'
+        '404':
+          description: Report with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/reports/a652285d-de1b-4a6f-b6ce-45efa9be7952\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nreport\
+          \ = sdk.reports.get(\"a652285d-de1b-4a6f-b6ce-45efa9be7952\")\n    "
+    delete:
+      tags:
+      - Reports
+      summary: Delete a report
+      description: Delete a report
+      operationId: delete_report_v3_reports__id__delete
+      parameters:
+      - required: true
+        schema:
+          type: string
+          title: Id
+        name: id
+        in: path
+      responses:
+        '204':
+          description: Deletion successful
+        '404':
+          description: Report with the provided id not found.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+  /v3/categories/{account_holder_type}:
+    get:
+      tags:
+      - Categories
+      summary: Retrieve category set
+      description: Retrieves the set of categories. Category sets are different per
+        account holder type.
+      operationId: get_category_set_v3_categories__account_holder_type__get
+      parameters:
+      - required: true
+        schema:
+          $ref: '#/components/schemas/AccountHolderType'
+        name: account_holder_type
+        in: path
+      responses:
+        '200':
+          description: Category set for the selected type of account holder
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CategorySet'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/categories/consumer\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.categories.get("consumer")
+
+          '
+    post:
+      tags:
+      - Categories
+      summary: Set a custom set of categories
+      description: Sets a custom set of categories. Transactions that don't match
+        a category will be categorized `not enough information` regardless of whether
+        it is present in the set.
+      operationId: custom_categories_post_v3_categories__account_holder_type__post
+      parameters:
+      - required: true
+        schema:
+          $ref: '#/components/schemas/AccountHolderType'
+        name: account_holder_type
+        in: path
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CustomCategorySet'
+        required: true
+      responses:
+        '200':
+          description: Custom categories successfully set.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomCategorySet'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/categories/consumer\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\n       \
+          \ \"incoming\": [\n            \"salary\",\n            \"investment income\"\
+          ,\n            \"other income\"\n        ],\n        \"outgoing\": [\n \
+          \           \"rent\",\n            \"utilities\",\n            \"groceries\"\
+          ,\n            \"entertainment\"\n        ]\n    }]'\n "
+      - lang: python
+        label: Python SDK
+        source: "from ntropy_sdk import SDK\n\nsdk = SDK(\"cd1H...Wmhl\")\nsdk.categories.set(\"\
+          consumer\", {\n    \"incoming\": [\n        \"transfer from investment app\"\
+          ,\n        \"transfer from stock broker\",\n        \"transfer from crypto\
+          \ broker\",\n        \"chargeback\",\n        \"freelance income\",\n  \
+          \      \"rideshare or delivery income\",\n        \"paycheck\",\n      \
+          \  \"benefits\",\n        \"interest earned\",\n        \"stock dividend\"\
+          \n    ],\n    \"outgoing\": [\n        \"digital content and streaming\"\
+          ,\n        \"vending machine\",\n        \"reversal\",\n        \"transfer\
+          \ to investment app\",\n        \"transfer to stock broker\",\n        \"\
+          transfer to crypto broker\",\n        \"adjustment\",\n        \"intra account\
+          \ transfer\",\n        \"inter account transfer\",\n        \"peer to peer\
+          \ transfer\",\n        \"funeral service\",\n        \"ATM withdrawal\"\
+          ,\n        \"teller withdrawal\"\n    ]\n})\n"
+  /v3/categories/{account_holder_type}/reset:
+    post:
+      tags:
+      - Categories
+      summary: Reset category set to original values
+      description: Resets the set of categories of the specified account holder type
+        to the original values.
+      operationId: delete_custom_category_set_v3_categories__account_holder_type__reset_post
+      parameters:
+      - required: true
+        schema:
+          $ref: '#/components/schemas/AccountHolderType'
+        name: account_holder_type
+        in: path
+      responses:
+        '200':
+          description: Successful Response
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CategorySet'
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"POST\" \\\n    \"https://api.ntropy.com/v3/categories/consumer/reset\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.categories.reset("consumer")
+
+          '
+  /v3/entities/lookup:
+    get:
+      tags:
+      - Entities
+      summary: Searches for an entity
+      description: "Resolves a query into an entity by querying our entity resolution\
+        \ system. \n    The parameters `name` and `website` are mutually exclusive.\
+        \ Calls to this endpoint using \n    the `name` parameter are billed the same\
+        \ way transactions are."
+      operationId: search_entity_v3_entities_lookup_get
+      parameters:
+      - description: The name of the entity to resolve
+        required: false
+        schema:
+          type: string
+          title: Name
+          description: The name of the entity to resolve
+        name: name
+        in: query
+      - description: The website of the entity to resolve
+        required: false
+        schema:
+          type: string
+          title: Website
+          description: The website of the entity to resolve
+        name: website
+        in: query
+      - description: An unstructured location string of the entity to resolve
+        required: false
+        schema:
+          type: string
+          title: Location
+          description: An unstructured location string of the entity to resolve
+        name: location
+        in: query
+      responses:
+        '200':
+          description: Entity
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Entity'
+        '400':
+          description: Bad request.
+        '423':
+          description: Not enough credits.
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/entities?name=Starbucks\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.entities.lookup(name="Starbucks") '
+  /v3/entities/{id}:
+    get:
+      tags:
+      - Entities
+      summary: Retrieve an entity
+      description: Retrieve more information about an entity by using its unique ID.
+      operationId: get_entity_by_id_v3_entities__id__get
+      parameters:
+      - description: The unique ID of the entity
+        required: true
+        schema:
+          type: string
+          title: Id
+          description: The unique ID of the entity
+        name: id
+        in: path
+      responses:
+        '200':
+          description: Entity
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Entity'
+        '400':
+          description: Bad request.
+        '404':
+          description: Entity does not exist for ID
+        '422':
+          description: Validation Error
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/HTTPValidationError'
+      security:
+      - APIKeyHeader: []
+      x-codeSamples:
+      - lang: cURL
+        label: cURL
+        source: "curl -X \"GET\" \\\n    \"https://api.ntropy.com/v3/entities/d4bc3c80-ec1a-3da2-836e-2a4ca4758be5\"\
+          \ \\\n    -H \"Accept: application/json\" \\\n    -H \"X-API-KEY: cd1H...Wmhl\"\
+          \  "
+      - lang: python
+        label: Python SDK
+        source: 'from ntropy_sdk import SDK
+
+
+          sdk = SDK("cd1H...Wmhl")
+
+          sdk.entities.lookup("d4bc3c80-ec1a-3da2-836e-2a4ca4758be5") '
+components:
+  schemas:
+    Account:
+      properties:
+        type:
+          type: string
+          title: Type
+        number:
+          type: string
+          title: Number
+        opening_balance:
+          type: number
+          title: Opening Balance
+        closing_balance:
+          type: number
+          title: Closing Balance
+        iso_currency_code:
+          type: string
+          title: Iso Currency Code
+      type: object
+      title: Account
+    AccountHolder:
+      properties:
+        type:
+          $ref: '#/components/schemas/AccountType'
+        name:
+          type: string
+          title: Name
+        address:
+          $ref: '#/components/schemas/Address'
+      type: object
+      title: AccountHolder
+    AccountHolderCreate:
+      properties:
+        id:
+          type: string
+          minLength: 1
+          title: Id
+          description: The unique ID of the account holder of the transaction
+        type:
+          allOf:
+          - $ref: '#/components/schemas/AccountHolderType'
+          description: 'The type of the account holder. '
+        name:
+          type: string
+          title: Name
+          description: The name of the account holder
+      type: object
+      required:
+      - id
+      - type
+      title: AccountHolderCreate
+    AccountHolderExternal:
+      properties:
+        id:
+          type: string
+          minLength: 1
+          title: Id
+          description: The unique ID of the account holder of the transaction
+        type:
+          allOf:
+          - $ref: '#/components/schemas/AccountHolderType'
+          description: 'The type of the account holder. '
+        name:
+          type: string
+          title: Name
+          description: The name of the account holder
+        created_at:
+          type: string
+          format: date-time
+          title: Created At
+          description: The timestamp of when the account holder was created.
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - type
+      - created_at
+      title: AccountHolderExternal
+      example:
+        id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+        type: consumer
+        name: John Doe
+        created_at: '2024-03-30T00:00:00'
+    AccountHolderType:
+      type: string
+      enum:
+      - consumer
+      - business
+      title: AccountHolderType
+      description: An enumeration.
+    AccountType:
+      type: string
+      enum:
+      - consumer
+      - business
+      title: AccountType
+      description: An enumeration.
+    AccountingCategory:
+      type: string
+      enum:
+      - operational expenses
+      - cost of goods sold
+      - revenue
+      - financing
+      - taxes
+      title: AccountingCategory
+      description: An enumeration.
+    ActionModel:
+      $ref: personalization.json#/definitions/Action
+    Address:
+      properties:
+        street:
+          type: string
+          title: Street
+        postcode:
+          type: string
+          title: Postcode
+        city:
+          type: string
+          title: City
+        state:
+          type: string
+          title: State
+        country:
+          type: string
+          title: Country
+      type: object
+      title: Address
+    AsyncEnrichmentInput:
+      properties:
+        transactions:
+          items:
+            $ref: '#/components/schemas/TransactionInput'
+          type: array
+          maxItems: 24960
+          minItems: 1
+          title: Transactions
+      additionalProperties: false
+      type: object
+      required:
+      - transactions
+      title: AsyncEnrichmentInput
+    BankStatement:
+      properties:
+        id:
+          type: string
+          title: Id
+          description: A unique identifier for the bank statement job.
+        name:
+          type: string
+          title: Name
+          description: The name of the bank statement file, if available.
+        status:
+          allOf:
+          - $ref: '#/components/schemas/BankStatementStatus'
+          description: The current status of the document.
+        created_at:
+          type: string
+          format: date-time
+          title: Created At
+          description: The date and time when the job was created.
+        file:
+          allOf:
+          - $ref: '#/components/schemas/BankStatementFile'
+          title: File
+          description: Information about the bank statement file being processed.
+        error:
+          $ref: '#/components/schemas/BankStatementError'
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - status
+      - created_at
+      - file
+      title: BankStatement
+      description: Represents a bank statement with details about the file and its
+        status.
+      example:
+        id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+        name: 2014-01-01_2014-02-01_statement.pdf
+        status: processing
+        created_at: '2024-01-01T00:00:00'
+        file:
+          no_pages: 1
+          size: 4096
+    BankStatementAccount:
+      properties:
+        number:
+          type: string
+          title: Number
+          description: The account number, if available.
+        opening_balance:
+          type: number
+          title: Opening Balance
+          description: The opening balance of the account for the statement period.
+        closing_balance:
+          type: number
+          title: Closing Balance
+          description: The closing balance of the account for the statement period.
+        start_date:
+          type: string
+          format: date
+          title: Start Date
+          description: The start date of the statement period.
+        end_date:
+          type: string
+          format: date
+          title: End Date
+          description: The end date of the statement period.
+        is_balance_reconciled:
+          type: boolean
+          title: Is Balance Reconciled
+          description: Indicates whether the balance has been reconciled.
+        total_incoming:
+          type: number
+          title: Total Incoming
+          description: The sum of amounts of all incoming transactions.
+        total_outgoing:
+          type: number
+          title: Total Outgoing
+          description: The sum of amounts of all outgoing transactions.
+        transactions:
+          items:
+            $ref: '#/components/schemas/BankStatementTransaction'
+          type: array
+          title: Transactions
+          description: List of transactions for this account.
+      additionalProperties: false
+      type: object
+      required:
+      - transactions
+      title: BankStatementAccount
+      example:
+        number: '972913289'
+        opening_balance: 400.0
+        closing_balance: 200.0
+        start_date: '2024-01-01'
+        end_date: '2024-02-01'
+        is_balance_reconciled: true
+        total_incoming: 0.0
+        total_outgoing: 200.0
+        transactions:
+        - id: xbx8YP14g565Xk
+          description: SQ* STARBUCKS NW 43RD
+          date: '2024-03-30'
+          amount: 200
+          entry_type: outgoing
+          currency: USD
+          running_balance: 400.0
+    BankStatementError:
+      properties:
+        code:
+          $ref: '#/components/schemas/BankStatementErrorCode'
+        message:
+          type: string
+          title: Message
+      type: object
+      required:
+      - code
+      - message
+      title: BankStatementError
+    BankStatementErrorCode:
+      type: string
+      enum:
+      - invalid_bank_statement
+      - internal_error
+      title: BankStatementErrorCode
+      description: An enumeration.
+    BankStatementFile:
+      properties:
+        no_pages:
+          type: integer
+          title: No Pages
+          description: The number of pages in the bank statement file.
+        size:
+          type: integer
+          title: Size
+          description: The size of the bank statement file in bytes, if available.
+      additionalProperties: false
+      type: object
+      required:
+      - no_pages
+      title: BankStatementFile
+      example:
+        no_pages: 1
+        size: 4096
+    BankStatementResults:
+      properties:
+        accounts:
+          items:
+            $ref: '#/components/schemas/BankStatementAccount'
+          type: array
+          title: Accounts
+          description: List of accounts in the bank statement.
+      type: object
+      required:
+      - accounts
+      title: BankStatementResults
+    BankStatementStatus:
+      type: string
+      enum:
+      - processing
+      - completed
+      - error
+      title: BankStatementStatus
+      description: An enumeration.
+    BankStatementTransaction:
+      properties:
+        id:
+          type: string
+          minLength: 1
+          title: Id
+          description: A unique identifier of the transaction
+        description:
+          type: string
+          maxLength: 1024
+          minLength: 0
+          title: Description
+          description: The description string of the transaction
+        date:
+          type: string
+          format: date
+          title: Date
+          description: The date that the transaction was posted. Uses ISO 8601 format
+            (YYYY-MM-DD)
+        amount:
+          type: number
+          minimum: 0.0
+          title: Amount
+          description: The amount of the transaction in the `currency`. Must be a
+            positive value. For example, if the `currency` is USD, then it's the amount
+            in dollars.
+        entry_type:
+          allOf:
+          - $ref: '#/components/schemas/EntryType'
+          description: The direction of the flow of the money from the perspective
+            of the account holder. `outgoing` to represent money leaving the account,
+            such as purchases or fees, while `incoming` represents money entering
+            the account, such as income or refunds.
+        currency:
+          allOf:
+          - $ref: '#/components/schemas/Currency'
+          description: The currency of the transaction in ISO 4217 format
+        running_balance:
+          type: number
+          title: Running Balance
+          description: The account's balance when this transaction was performed
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - description
+      - date
+      - amount
+      - entry_type
+      - currency
+      title: BankStatementTransaction
+      example:
+        id: xbx8YP14g565Xk
+        description: SQ* STARBUCKS NW 43RD
+        date: '2024-03-30'
+        amount: 10.0
+        entry_type: outgoing
+        currency: USD
+        running_balance: 400.0
+    Batch:
+      properties:
+        id:
+          type: string
+          title: Id
+          description: A unique identifier for the batch.
+        status:
+          allOf:
+          - $ref: '#/components/schemas/BatchStatus'
+          description: The current status of the batch. A batch will error if at least
+            one of the transactions contains an error.
+        created_at:
+          type: string
+          format: date-time
+          title: Created At
+          description: The timestamp of when the batch was created.
+        updated_at:
+          type: string
+          format: date-time
+          title: Updated At
+          description: The timestamp of when the batch was last updated.
+        progress:
+          type: integer
+          title: Progress
+          description: The number of transactions processed so far.
+        total:
+          type: integer
+          title: Total
+          description: The total number of transactions in the batch.
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - status
+      - created_at
+      - updated_at
+      - progress
+      - total
+      title: Batch
+      description: The `Batch` object represents the status and progress of an asynchronous
+        batch enrichment job.
+      example:
+        id: 203613d2-83c8-4130-8809-d14206eeec20
+        status: processing
+        created_at: '2024-01-01T00:00:00'
+        updated_at: '2024-01-01T00:00:30'
+        progress: 0
+        total: 4000
+    BatchResult:
+      properties:
+        id:
+          type: string
+          title: Id
+          description: A unique identifier for the batch.
+        total:
+          type: integer
+          title: Total
+          description: The total number of transactions in the batch result.
+        status:
+          allOf:
+          - $ref: '#/components/schemas/BatchStatus'
+          description: The current status of the batch job.
+        results:
+          $ref: '#/components/schemas/EnrichmentResult'
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - total
+      - status
+      - results
+      title: BatchResult
+      description: 'The `BatchResult` object represents the result of a batch enrichment
+        job, including its status and
+
+        enriched transactions.'
+    BatchStatus:
+      type: string
+      enum:
+      - processing
+      - completed
+      - error
+      title: BatchStatus
+      description: An enumeration.
+    Body_post_bank_statement_v3_bank_statements_post:
+      properties:
+        file:
+          type: string
+          format: binary
+          title: File
+      type: object
+      required:
+      - file
+      title: Body_post_bank_statement_v3_bank_statements_post
+    Body_set_transaction_ah_v3_transactions__id__assign_post:
+      properties:
+        account_holder_id:
+          type: string
+          title: Account Holder Id
+      type: object
+      required:
+      - account_holder_id
+      title: Body_set_transaction_ah_v3_transactions__id__assign_post
+    Categories:
+      properties:
+        general:
+          type: string
+          title: General
+          description: The category of the transaction. View the valid set of categories
+            for your key [here](./docs/v3/enrichment/entities).
+        accounting:
+          allOf:
+          - $ref: '#/components/schemas/AccountingCategory'
+          description: The corresponding accounting category. Only available for `business`
+            transactions.
+      additionalProperties: false
+      type: object
+      title: Categories
+    CategoryConfidence:
+      type: string
+      enum:
+      - high
+      - medium
+      - low
+      - unknown
+      title: CategoryConfidence
+      description: An enumeration.
+    CategorySet:
+      properties:
+        incoming:
+          items:
+            type: string
+          type: array
+          title: Incoming
+        outgoing:
+          items:
+            type: string
+          type: array
+          title: Outgoing
+      type: object
+      required:
+      - incoming
+      - outgoing
+      title: CategorySet
+      example:
+        incoming:
+        - transfer from investment app
+        - transfer from stock broker
+        - transfer from crypto broker
+        - chargeback
+        - freelance income
+        - rideshare or delivery income
+        - paycheck
+        - benefits
+        - interest earned
+        - stock dividend
+        outgoing:
+        - digital content and streaming
+        - vending machine
+        - reversal
+        - transfer to investment app
+        - transfer to stock broker
+        - transfer to crypto broker
+        - adjustment
+        - intra account transfer
+        - inter account transfer
+        - peer to peer transfer
+        - funeral service
+        - ATM withdrawal
+        - teller withdrawal
+    Counterparty:
+      properties:
+        id:
+          type: string
+          title: Id
+          description: The unique UUID identifier of the entity
+        name:
+          type: string
+          title: Name
+          description: The name of the entity
+        website:
+          type: string
+          title: Website
+          description: The website URL of the entity
+        logo:
+          type: string
+          title: Logo
+          description: Logo's URL
+        mccs:
+          items:
+            type: integer
+          type: array
+          title: Mccs
+          description: A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+          default: []
+        type:
+          $ref: '#/components/schemas/CounterpartyType'
+      additionalProperties: false
+      type: object
+      required:
+      - type
+      title: Counterparty
+      example:
+        id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+        name: Starbucks
+        website: starbucks.com
+        logo: https://logos.ntropy.com/starbucks.com
+        mccs:
+        - 5814
+        type: organization
+    CounterpartyType:
+      type: string
+      enum:
+      - person
+      - organization
+      title: CounterpartyType
+      description: An enumeration.
+    Country:
+      type: string
+      enum:
+      - AD
+      - AE
+      - AF
+      - AG
+      - AI
+      - AL
+      - AM
+      - AO
+      - AR
+      - AS
+      - AT
+      - AU
+      - AW
+      - AZ
+      - BA
+      - BB
+      - BD
+      - BE
+      - BF
+      - BG
+      - BH
+      - BI
+      - BJ
+      - BL
+      - BM
+      - BN
+      - BO
+      - BQ
+      - BR
+      - BS
+      - BT
+      - BV
+      - BW
+      - BY
+      - BZ
+      - CA
+      - CC
+      - CD
+      - CF
+      - CG
+      - CH
+      - CI
+      - CK
+      - CL
+      - CM
+      - CN
+      - CO
+      - CR
+      - CU
+      - CV
+      - CW
+      - CX
+      - CY
+      - CZ
+      - DE
+      - DJ
+      - DK
+      - DM
+      - DO
+      - DZ
+      - EC
+      - EE
+      - EG
+      - EH
+      - ER
+      - ES
+      - ET
+      - FI
+      - FJ
+      - FK
+      - FM
+      - FR
+      - GA
+      - GB
+      - GD
+      - GE
+      - GF
+      - GG
+      - GH
+      - GI
+      - GL
+      - GM
+      - GN
+      - GP
+      - GQ
+      - GR
+      - GS
+      - GT
+      - GU
+      - GW
+      - GY
+      - HK
+      - HM
+      - HN
+      - HR
+      - HT
+      - HU
+      - ID
+      - IE
+      - IL
+      - IM
+      - IN
+      - IO
+      - IQ
+      - IR
+      - IS
+      - IT
+      - JE
+      - JM
+      - JO
+      - JP
+      - KE
+      - KG
+      - KH
+      - KI
+      - KM
+      - KN
+      - KP
+      - KR
+      - KW
+      - KY
+      - KZ
+      - LA
+      - LB
+      - LC
+      - LI
+      - LK
+      - LR
+      - LS
+      - LT
+      - LU
+      - LV
+      - LY
+      - MA
+      - MC
+      - MD
+      - ME
+      - MF
+      - MG
+      - MH
+      - MK
+      - ML
+      - MM
+      - MN
+      - MO
+      - MP
+      - MQ
+      - MR
+      - MS
+      - MT
+      - MU
+      - MV
+      - MW
+      - MX
+      - MY
+      - MZ
+      - NA
+      - NC
+      - NE
+      - NF
+      - NG
+      - NI
+      - NL
+      - 'NO'
+      - NP
+      - NR
+      - NU
+      - NZ
+      - OM
+      - PA
+      - PE
+      - PF
+      - PG
+      - PH
+      - PK
+      - PL
+      - PM
+      - PN
+      - PR
+      - PS
+      - PT
+      - PW
+      - PY
+      - QA
+      - RE
+      - RO
+      - RS
+      - RU
+      - RW
+      - SA
+      - SB
+      - SC
+      - SD
+      - SE
+      - SG
+      - SH
+      - SI
+      - SJ
+      - SK
+      - SL
+      - SM
+      - SN
+      - SO
+      - SR
+      - SS
+      - ST
+      - SV
+      - SX
+      - SY
+      - SZ
+      - TC
+      - TD
+      - TG
+      - TH
+      - TJ
+      - TK
+      - TL
+      - TM
+      - TN
+      - TO
+      - TR
+      - TT
+      - TV
+      - TW
+      - TZ
+      - UA
+      - UG
+      - UM
+      - US
+      - UY
+      - UZ
+      - VC
+      - VE
+      - VG
+      - VI
+      - VN
+      - VU
+      - WF
+      - WS
+      - YE
+      - YT
+      - ZA
+      - ZM
+      - ZW
+      title: Country
+      description: An enumeration.
+    Currency:
+      type: string
+      enum:
+      - EUR
+      - AED
+      - AFN
+      - XCD
+      - ALL
+      - AMD
+      - AOA
+      - ARS
+      - USD
+      - AUD
+      - AWG
+      - AZN
+      - BAM
+      - BBD
+      - BDT
+      - XOF
+      - BGN
+      - BHD
+      - BIF
+      - BMD
+      - BND
+      - BOB
+      - BRL
+      - BSD
+      - INR
+      - NOK
+      - BWP
+      - BYR
+      - BZD
+      - CAD
+      - CDF
+      - XAF
+      - CHF
+      - NZD
+      - CLP
+      - CNY
+      - COP
+      - CRC
+      - CUP
+      - CVE
+      - ANG
+      - CZK
+      - DJF
+      - DKK
+      - DOP
+      - DZD
+      - EGP
+      - MAD
+      - ERN
+      - ETB
+      - FJD
+      - FKP
+      - GBP
+      - GEL
+      - GHS
+      - GIP
+      - GMD
+      - GNF
+      - GTQ
+      - GYD
+      - HKD
+      - HNL
+      - HUF
+      - IDR
+      - ILS
+      - IQD
+      - IRR
+      - ISK
+      - JMD
+      - JOD
+      - JPY
+      - KES
+      - KGS
+      - KHR
+      - KMF
+      - KPW
+      - KRW
+      - KWD
+      - KYD
+      - KZT
+      - LAK
+      - LBP
+      - LKR
+      - LRD
+      - ZAR
+      - LYD
+      - MDL
+      - MGA
+      - MKD
+      - MMK
+      - MNT
+      - MOP
+      - MRO
+      - MUR
+      - MVR
+      - MWK
+      - MXN
+      - MYR
+      - MZN
+      - XPF
+      - NGN
+      - NIO
+      - NPR
+      - OMR
+      - PEN
+      - PGK
+      - PHP
+      - PKR
+      - PLN
+      - PYG
+      - QAR
+      - RON
+      - RSD
+      - RUB
+      - RWF
+      - SAR
+      - SBD
+      - SCR
+      - SDG
+      - SEK
+      - SGD
+      - SHP
+      - SLL
+      - SOS
+      - SRD
+      - SSP
+      - STD
+      - SYP
+      - SZL
+      - THB
+      - TJS
+      - TMT
+      - TND
+      - TOP
+      - TRY
+      - TTD
+      - TWD
+      - TZS
+      - UAH
+      - UGX
+      - UYU
+      - UZS
+      - VEF
+      - VND
+      - VUV
+      - WST
+      - YER
+      - ZMW
+      - ZWL
+      - HRK
+      title: Currency
+      description: An enumeration.
+    CustomCategorySet:
+      properties:
+        incoming:
+          items:
+            type: string
+          type: array
+          title: Incoming
+        outgoing:
+          items:
+            type: string
+          type: array
+          title: Outgoing
+      type: object
+      required:
+      - incoming
+      - outgoing
+      title: CustomCategorySet
+      example:
+        incoming:
+        - salary
+        - investment income
+        - other income
+        outgoing:
+        - rent
+        - utilities
+        - groceries
+        - entertainment
+    DocumentStatus:
+      type: string
+      enum:
+      - queued
+      - processing
+      - processed
+      - failed
+      title: DocumentStatus
+      description: An enumeration.
+    EnrichedTransaction:
+      properties:
+        entities:
+          $ref: '#/components/schemas/Entities'
+        categories:
+          $ref: '#/components/schemas/Categories'
+        location:
+          $ref: '#/components/schemas/Location'
+        error:
+          $ref: '#/components/schemas/TransactionError'
+        created_at:
+          type: string
+          format: date-time
+          title: Created At
+          description: The timestamp of when the account holder was created.
+        id:
+          type: string
+          minLength: 1
+          title: Id
+          description: A unique identifier for the transaction. If two transactions
+            are submitted with the same `id` the most recent one will replace the
+            previous one.
+      additionalProperties: false
+      type: object
+      required:
+      - created_at
+      - id
+      title: EnrichedTransaction
+      example:
+        error: null
+        entities:
+          counterparty:
+            id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+            name: Starbucks
+            website: starbucks.com
+            logo: https://logos.ntropy.com/starbucks.com
+            mccs:
+            - 5814
+            type: organization
+          intermediaries:
+          - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+            name: Square
+            website: squareup.com
+            logo: https://logos.ntropy.com/squareup.com
+            mccs: []
+            type: payment_processor
+        categories:
+          general: outgoing - coffee shops
+        location:
+          raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+          structured:
+            street: Nw 43rd Street 5480
+            city: Gainesville
+            state: Florida
+            postcode: '32653'
+            country_code: US
+            country: United States
+            latitude: 29.704558
+            longitude: -82.389277
+            google_maps_url: https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+            apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+        created_at: '2024-03-30T00:00:00'
+        id: xbx8YP14g565Xk
+    EnrichmentResult:
+      properties:
+        transactions:
+          items:
+            $ref: '#/components/schemas/EnrichedTransaction'
+          type: array
+          title: Transactions
+          description: A list of enriched transactions resulting from the enrichment
+            of this batch.
+      additionalProperties: false
+      type: object
+      required:
+      - transactions
+      title: EnrichmentResult
+    Entities:
+      properties:
+        counterparty:
+          $ref: '#/components/schemas/Counterparty'
+        intermediaries:
+          items:
+            $ref: '#/components/schemas/Intermediary'
+          type: array
+          title: Intermediaries
+          default: []
+      additionalProperties: false
+      type: object
+      title: Entities
+      description: Entities found by identity identification
+    Entity:
+      properties:
+        id:
+          type: string
+          title: Id
+          description: The unique UUID identifier of the entity
+        name:
+          type: string
+          title: Name
+          description: The name of the entity
+        website:
+          type: string
+          title: Website
+          description: The website URL of the entity
+        logo:
+          type: string
+          title: Logo
+          description: Logo's URL
+        mccs:
+          items:
+            type: integer
+          type: array
+          title: Mccs
+          description: A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+          default: []
+      type: object
+      title: Entity
+      example:
+        id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+        name: Starbucks
+        website: starbucks.com
+        logo: https://logos.ntropy.com/starbucks.com
+        mccs:
+        - 5814
+    EntryType:
+      type: string
+      enum:
+      - incoming
+      - outgoing
+      title: EntryType
+      description: An enumeration.
+    FilterModel:
+      $ref: personalization.json
+    HTTPValidationError:
+      properties:
+        detail:
+          items:
+            $ref: '#/components/schemas/ValidationError'
+          type: array
+          title: Detail
+      type: object
+      title: HTTPValidationError
+    Intermediary:
+      properties:
+        id:
+          type: string
+          title: Id
+          description: The unique UUID identifier of the entity
+        name:
+          type: string
+          title: Name
+          description: The name of the entity
+        website:
+          type: string
+          title: Website
+          description: The website URL of the entity
+        logo:
+          type: string
+          title: Logo
+          description: Logo's URL
+        mccs:
+          items:
+            type: integer
+          type: array
+          title: Mccs
+          description: A list of [Merchant Category Codes](https://en.wikipedia.org/wiki/Merchant_category_code)
+          default: []
+        type:
+          $ref: '#/components/schemas/IntermediaryType'
+      additionalProperties: false
+      type: object
+      required:
+      - type
+      title: Intermediary
+      example:
+        id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+        name: Square
+        website: squareup.com
+        logo: https://logos.ntropy.com/squareup.com
+        mccs: []
+        type: payment_processor
+    IntermediaryType:
+      type: string
+      enum:
+      - delivery_service
+      - payment_processor
+      title: IntermediaryType
+      description: An enumeration.
+    Location:
+      properties:
+        raw_address:
+          type: string
+          title: Raw Address
+          description: An unstructured string containing the address
+        structured:
+          allOf:
+          - $ref: '#/components/schemas/LocationStructured'
+          title: Structured
+          description: When raw is set, a structured representation of it.
+      additionalProperties: false
+      type: object
+      title: Location
+    LocationInput:
+      properties:
+        raw_address:
+          type: string
+          title: Raw Address
+          description: An unstructured string containing the address
+        country:
+          allOf:
+          - $ref: '#/components/schemas/Country'
+          description: The country where the transaction was made in ISO 3166-2 format
+      additionalProperties: false
+      type: object
+      required:
+      - country
+      title: LocationInput
+      description: 'Location of where the transaction has taken place. This can greatly
+        improve entity identification, especially
+
+        under ambiguity.'
+    LocationStructured:
+      properties:
+        street:
+          type: string
+          title: Street
+          description: The street name and number of the location
+        city:
+          type: string
+          title: City
+          description: The city where the location is situated
+        state:
+          type: string
+          title: State
+          description: The state or region of the location
+        postcode:
+          type: string
+          title: Postcode
+          description: The postal code or ZIP code of the location
+        country_code:
+          type: string
+          title: Country Code
+          description: The country code of the location in ISO 3166-2 format
+        country:
+          type: string
+          title: Country
+          description: The full name of the country
+        latitude:
+          type: number
+          title: Latitude
+          description: The latitude coordinate of the location
+        longitude:
+          type: number
+          title: Longitude
+          description: The longitude coordinate of the location
+        google_maps_url:
+          type: string
+          title: Google Maps Url
+          description: A URL link to view the location on Google Maps
+        apple_maps_url:
+          type: string
+          title: Apple Maps Url
+          description: A URL link to view the location on Apple Maps
+        store_number:
+          type: string
+          title: Store Number
+          description: A unique identifier for a specific store or branch, if applicable
+      type: object
+      title: LocationStructured
+    PagedResponse_AccountHolderExternal:
+      properties:
+        next_cursor:
+          type: string
+          title: Next Cursor
+        data:
+          items:
+            $ref: '#/components/schemas/AccountHolderExternal'
+          type: array
+          title: Data
+      type: object
+      required:
+      - next_cursor
+      - data
+      title: PagedResponse_AccountHolderExternal
+      example:
+        next_cursor: XjdHaksD
+        data:
+        - id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+          type: consumer
+          name: John Doe
+          created_at: '2024-03-30T00:00:00'
+    PagedResponse_BankStatement:
+      properties:
+        next_cursor:
+          type: string
+          title: Next Cursor
+        data:
+          items:
+            $ref: '#/components/schemas/BankStatement'
+          type: array
+          title: Data
+      type: object
+      required:
+      - next_cursor
+      - data
+      title: PagedResponse_BankStatement
+      example:
+        next_cursor: XjdHaksD
+        data:
+        - id: 7f8dceac-2848-472d-b5c3-55cdbaf35a9b
+          name: 2014-01-01_2014-02-01_statement.pdf
+          status: processing
+          created_at: '2024-01-01T00:00:00'
+          file:
+            no_pages: 1
+            size: 4096
+    PagedResponse_Batch:
+      properties:
+        next_cursor:
+          type: string
+          title: Next Cursor
+        data:
+          items:
+            $ref: '#/components/schemas/Batch'
+          type: array
+          title: Data
+      type: object
+      required:
+      - next_cursor
+      - data
+      title: PagedResponse_Batch
+      example:
+        next_cursor: XjdHaksD
+        data:
+        - id: 203613d2-83c8-4130-8809-d14206eeec20
+          status: processing
+          created_at: '2024-01-01T00:00:00'
+          updated_at: '2024-01-01T00:00:30'
+          progress: 0
+          total: 4000
+    PagedResponse_Report_:
+      properties:
+        next_cursor:
+          type: string
+          title: Next Cursor
+        data:
+          items:
+            $ref: '#/components/schemas/Report'
+          type: array
+          title: Data
+      type: object
+      required:
+      - data
+      title: PagedResponse[Report]
+    PagedResponse_Transaction:
+      properties:
+        next_cursor:
+          type: string
+          title: Next Cursor
+        data:
+          items:
+            $ref: '#/components/schemas/Transaction'
+          type: array
+          title: Data
+      type: object
+      required:
+      - next_cursor
+      - data
+      title: PagedResponse_Transaction
+      example:
+        next_cursor: XjdHaksD
+        data:
+        - id: xbx8YP14g565Xk
+          description: SQ* STARBUCKS NW 43RD
+          date: '2024-03-30'
+          amount: 10.0
+          entry_type: outgoing
+          currency: USD
+          entities:
+            counterparty:
+              id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+              name: Starbucks
+              website: starbucks.com
+              logo: https://logos.ntropy.com/starbucks.com
+              mccs:
+              - 5814
+              type: organization
+            intermediaries:
+            - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+              name: Square
+              website: squareup.com
+              logo: https://logos.ntropy.com/squareup.com
+              mccs: []
+              type: payment_processor
+          categories:
+            general: outgoing - coffee shops
+          location:
+            raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+            structured:
+              street: Nw 43rd Street 5480
+              city: Gainesville
+              state: Florida
+              postcode: '32653'
+              country_code: US
+              country: United States
+              latitude: 29.704558
+              longitude: -82.389277
+              google_maps_url: https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+              apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+          created_at: '2024-03-30T00:00:00'
+          account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+          recurrence:
+            type: recurring
+    PagedResponse_Webhook:
+      properties:
+        next_cursor:
+          type: string
+          title: Next Cursor
+        data:
+          items:
+            $ref: '#/components/schemas/Webhook'
+          type: array
+          title: Data
+      type: object
+      required:
+      - next_cursor
+      - data
+      title: PagedResponse_Webhook
+      example:
+        next_cursor: XjdHaksD
+        data:
+        - url: https://example.com:5689
+          events:
+          - batches.completed
+          - batches.error
+          token: hunter2
+          id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+          created_at: '2024-10-03T02:53:30.167953'
+          enabled: true
+    Recurrence:
+      properties:
+        type:
+          allOf:
+          - $ref: '#/components/schemas/RecurrenceType'
+          description: Whether the transaction is a one-time transfer `one-off`, regularly
+            with varying pricing `recurring` or with fixed pricing `subscription`
+      additionalProperties: false
+      type: object
+      required:
+      - type
+      title: Recurrence
+      description: 'The `Recurrence` object represents the recurrence pattern of a
+        transaction. It provides information about
+
+        whether a transaction is a one-time event or a part of a recurring series.'
+    RecurrenceGroup:
+      properties:
+        id:
+          type: string
+          title: Id
+          description: A unique UUID identifier for the group
+        start_date:
+          type: string
+          format: date
+          title: Start Date
+          description: The date of the oldest transaction in the group
+        end_date:
+          type: string
+          format: date
+          title: End Date
+          description: The date of the most recent transaction in the group
+        total_amount:
+          type: number
+          title: Total Amount
+          description: The sum of all transaction amounts in this group
+        average_amount:
+          type: number
+          title: Average Amount
+          description: The average amount per transaction in this group
+        periodicity_in_days:
+          type: number
+          title: Periodicity In Days
+          description: The estimated number of days between transactions in this group
+        periodicity:
+          allOf:
+          - $ref: '#/components/schemas/RecurrencePeriodicity'
+          description: A human-readable description of the transaction frequency
+        counterparty:
+          allOf:
+          - $ref: '#/components/schemas/Counterparty'
+          title: Counterparty
+          description: Counterparty of the transactions
+        categories:
+          allOf:
+          - $ref: '#/components/schemas/Categories'
+          title: Categories
+          description: Categories of the transactions in the recurrence group
+        transaction_ids:
+          items:
+            type: string
+          type: array
+          title: Transaction Ids
+          description: Transactions in this recurrence group
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - start_date
+      - end_date
+      - total_amount
+      - average_amount
+      - periodicity_in_days
+      - periodicity
+      - counterparty
+      - categories
+      - transaction_ids
+      title: RecurrenceGroup
+      example:
+        id: 8efbac45-9bd5-4b67-be29-334106198c40
+        start_date: '2024-03-01'
+        end_date: '2024-03-30'
+        total_amount: 300.0
+        average_amount: 10.0
+        periodicity_in_days: 1.0
+        periodicity: daily
+        counterparty:
+          id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+          name: Starbucks
+          website: starbucks.com
+          logo: https://logos.ntropy.com/starbucks.com
+          mccs:
+          - 5814
+          type: organization
+        categories:
+          general: outgoing - coffee shops
+        transaction_ids:
+        - 2dc6SE8A7cTQ2jUdUadCg
+        - tQYAhhl0XNkl1wasacpVQ
+        - NNJTqvockIdKnYxBqPlJw
+    RecurrencePeriodicity:
+      type: string
+      enum:
+      - daily
+      - weekly
+      - bi_weekly
+      - monthly
+      - bi_monthly
+      - quarterly
+      - semi_yearly
+      - yearly
+      - other
+      title: RecurrencePeriodicity
+      description: An enumeration.
+    RecurrenceType:
+      type: string
+      enum:
+      - recurring
+      - subscription
+      - one off
+      title: RecurrenceType
+      description: An enumeration.
+    Report:
+      properties:
+        transaction_id:
+          type: string
+          minLength: 1
+          title: Transaction Id
+          description: The unique identifier of the transaction
+        description:
+          type: string
+          title: Description
+          description: A description of what is wrong in the transaction
+        fields:
+          items:
+            type: string
+          type: array
+          title: Fields
+          description: A list of the fields that are incorrect
+        id:
+          type: string
+          title: Id
+          description: A generated unique identifier for the report.
+        created_at:
+          type: string
+          format: date-time
+          title: Created At
+          description: The date and time when the report was created.
+        status:
+          allOf:
+          - $ref: '#/components/schemas/ReportStatus'
+          description: 'The status of the report.
+
+
+            * `open`: a newly created report
+
+            * `pending`: the report is being investigated
+
+            * `rejected`: the original enrichment output was deemed correct or we
+            couldn''t resolve it, check `rejection_reason`
+
+            * `resolved`: the issue has been resolved'
+        rejection_reason:
+          type: string
+          title: Rejection Reason
+          description: An explanation of why the report was rejected
+      additionalProperties: false
+      type: object
+      required:
+      - transaction_id
+      - description
+      - fields
+      - id
+      - created_at
+      - status
+      title: Report
+      examples:
+      - transaction_id: xbx8YP14g565Xk
+        description: lorem ipsum
+        fields:
+        - .entities.counterparty
+        id: a652285d-de1b-4a6f-b6ce-45efa9be7952
+        created_at: '2024-10-03T02:53:30.167953+00:00'
+        status: open
+    ReportBase:
+      properties:
+        transaction_id:
+          type: string
+          minLength: 1
+          title: Transaction Id
+          description: The unique identifier of the transaction
+        description:
+          type: string
+          title: Description
+          description: A description of what is wrong in the transaction
+        fields:
+          items:
+            type: string
+          type: array
+          title: Fields
+          description: A list of the fields that are incorrect
+      additionalProperties: false
+      type: object
+      required:
+      - transaction_id
+      - description
+      - fields
+      title: ReportBase
+      examples:
+      - transaction_id: xbx8YP14g565Xk
+        description: lorem ipsum
+        fields:
+        - .entities.counterparty
+    ReportStatus:
+      type: string
+      enum:
+      - open
+      - pending
+      - resolved
+      - rejected
+      title: ReportStatus
+      description: An enumeration.
+    StatementInfo:
+      properties:
+        institution:
+          type: string
+          title: Institution
+        start_date:
+          type: string
+          format: date
+          title: Start Date
+        end_date:
+          type: string
+          format: date
+          title: End Date
+        account_holder:
+          $ref: '#/components/schemas/AccountHolder'
+        accounts:
+          items:
+            $ref: '#/components/schemas/Account'
+          type: array
+          title: Accounts
+      type: object
+      title: StatementInfo
+      example:
+        institution: Well's Fargo
+        start_date: '2024-01-01'
+        end_date: '2024-02-01'
+        account_holder:
+          type: consumer
+          name: John Doe
+          address:
+            street: 601 Rosebud Avenue
+            postcode: '77901'
+            city: Victoria
+            state: Texas
+            country: United States
+        accounts:
+        - type: checking
+          number: '83721'
+          opening_balance: 1000.0
+          closing_balance: 1500.0
+          iso_currency_code: USD
+    SyncEnrichmentInput:
+      properties:
+        transactions:
+          items:
+            $ref: '#/components/schemas/TransactionInput'
+          type: array
+          maxItems: 1000
+          minItems: 1
+          title: Transactions
+      additionalProperties: false
+      type: object
+      required:
+      - transactions
+      title: SyncEnrichmentInput
+    SyncEnrichmentOutput:
+      properties:
+        transactions:
+          items:
+            $ref: '#/components/schemas/EnrichedTransaction'
+          type: array
+          title: Transactions
+          description: A list of enriched transactions resulting from the enrichment
+            of this batch.
+      additionalProperties: false
+      type: object
+      required:
+      - transactions
+      title: SyncEnrichmentOutput
+    Transaction:
+      properties:
+        id:
+          type: string
+          minLength: 1
+          title: Id
+          description: A unique identifier of the transaction
+        description:
+          type: string
+          maxLength: 1024
+          minLength: 0
+          title: Description
+          description: The description string of the transaction
+        date:
+          type: string
+          format: date
+          title: Date
+          description: The date that the transaction was posted. Uses ISO 8601 format
+            (YYYY-MM-DD)
+        amount:
+          type: number
+          minimum: 0.0
+          title: Amount
+          description: The amount of the transaction in the `currency`. Must be a
+            positive value. For example, if the `currency` is USD, then it's the amount
+            in dollars.
+        entry_type:
+          allOf:
+          - $ref: '#/components/schemas/EntryType'
+          description: The direction of the flow of the money from the perspective
+            of the account holder. `outgoing` to represent money leaving the account,
+            such as purchases or fees, while `incoming` represents money entering
+            the account, such as income or refunds.
+        currency:
+          allOf:
+          - $ref: '#/components/schemas/Currency'
+          description: The currency of the transaction in ISO 4217 format
+        entities:
+          $ref: '#/components/schemas/Entities'
+        categories:
+          $ref: '#/components/schemas/Categories'
+        location:
+          $ref: '#/components/schemas/Location'
+        error:
+          $ref: '#/components/schemas/TransactionError'
+        created_at:
+          type: string
+          format: date-time
+          title: Created At
+          description: The timestamp of when the account holder was created.
+        account_holder_id:
+          type: string
+          minLength: 1
+          title: Account Holder Id
+          description: The unique ID of the account holder of the transaction
+        recurrence:
+          $ref: '#/components/schemas/Recurrence'
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - description
+      - date
+      - amount
+      - entry_type
+      - currency
+      - created_at
+      title: Transaction
+      example:
+        id: xbx8YP14g565Xk
+        description: SQ* STARBUCKS NW 43RD
+        date: '2024-03-30'
+        amount: 10.0
+        entry_type: outgoing
+        currency: USD
+        entities:
+          counterparty:
+            id: d4bc3c80-ec1a-3da2-836e-2a4ca4758be5
+            name: Starbucks
+            website: starbucks.com
+            logo: https://logos.ntropy.com/starbucks.com
+            mccs:
+            - 5814
+            type: organization
+          intermediaries:
+          - id: 916bc837-55ef-3106-88f6-5a8269ca9f2a
+            name: Square
+            website: squareup.com
+            logo: https://logos.ntropy.com/squareup.com
+            mccs: []
+            type: payment_processor
+        categories:
+          general: outgoing - coffee shops
+        location:
+          raw_address: Nw 43rd Street 5480, Gainesville, Florida 32653, US
+          structured:
+            street: Nw 43rd Street 5480
+            city: Gainesville
+            state: Florida
+            postcode: '32653'
+            country_code: US
+            country: United States
+            latitude: 29.704558
+            longitude: -82.389277
+            google_maps_url: https://www.google.com/maps/search/?api=1&query=29.704558,-82.389277
+            apple_maps_url: https://maps.apple.com/?q=29.704558,-82.389277
+        created_at: '2024-03-30T00:00:00'
+        account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+        recurrence:
+          type: recurring
+    TransactionError:
+      properties:
+        code:
+          $ref: '#/components/schemas/TransactionErrorCode'
+        message:
+          type: string
+          title: Message
+      type: object
+      required:
+      - code
+      - message
+      title: TransactionError
+    TransactionErrorCode:
+      type: string
+      enum:
+      - account_holder_not_found
+      - internal_error
+      title: TransactionErrorCode
+      description: An enumeration.
+    TransactionInput:
+      properties:
+        id:
+          type: string
+          minLength: 1
+          title: Id
+          description: A unique identifier of the transaction
+        description:
+          type: string
+          maxLength: 1024
+          minLength: 0
+          title: Description
+          description: The description string of the transaction
+        date:
+          type: string
+          format: date
+          title: Date
+          description: The date that the transaction was posted. Uses ISO 8601 format
+            (YYYY-MM-DD)
+        amount:
+          type: number
+          minimum: 0.0
+          title: Amount
+          description: The amount of the transaction in the `currency`. Must be a
+            positive value. For example, if the `currency` is USD, then it's the amount
+            in dollars.
+        entry_type:
+          allOf:
+          - $ref: '#/components/schemas/EntryType'
+          description: The direction of the flow of the money from the perspective
+            of the account holder. `outgoing` to represent money leaving the account,
+            such as purchases or fees, while `incoming` represents money entering
+            the account, such as income or refunds.
+        currency:
+          allOf:
+          - $ref: '#/components/schemas/Currency'
+          description: The currency of the transaction in ISO 4217 format
+        account_holder_id:
+          type: string
+          title: Account Holder Id
+          description: The unique ID of the account holder. Unsetting it will disable
+            [categorization](./docs/v3/enrichment/entities).
+        location:
+          $ref: '#/components/schemas/LocationInput'
+      additionalProperties: false
+      type: object
+      required:
+      - id
+      - description
+      - date
+      - amount
+      - entry_type
+      - currency
+      - account_holder_id
+      title: TransactionInput
+      example:
+        id: xbx8YP14g565Xk
+        description: SQ* STARBUCKS NW 43RD
+        date: '2024-03-30'
+        amount: 10.0
+        entry_type: outgoing
+        currency: USD
+        account_holder_id: 35b927b6-6fda-40aa-93b8-95b47c2b2cad
+        location:
+          country: US
+    ValidationError:
+      properties:
+        loc:
+          items:
+            anyOf:
+            - type: string
+            - type: integer
+          type: array
+          title: Location
+        msg:
+          type: string
+          title: Message
+        type:
+          type: string
+          title: Error Type
+      type: object
+      required:
+      - loc
+      - msg
+      - type
+      title: ValidationError
+    Webhook:
+      properties:
+        url:
+          type: string
+          maxLength: 1024
+          minLength: 1
+          format: uri
+          title: Url
+          description: The URL of the webhook
+        events:
+          items:
+            type: string
+            enum:
+            - reports.resolved
+            - reports.rejected
+            - reports.pending
+            - bank_statements.completed
+            - bank_statements.error
+            - batches.completed
+            - batches.error
+          type: array
+          title: Events
+          description: A list of events that this webhook subscribes to
+        token:
+          type: string
+          maxLength: 128
+          title: Token
+          description: A secret string used to authenticate the webhook. This value
+            will be included in the `X-Ntropy-Token` header when sending requests
+            to the webhook
+        id:
+          type: string
+          title: Id
+          description: A generated unique identifier for the webhook
+        created_at:
+          type: string
+          format: date-time
+          title: Created At
+          description: The date and time when the webhook was created.
+        enabled:
+          type: boolean
+          title: Enabled
+          description: Whether the webhook is enabled or not.
+      type: object
+      required:
+      - url
+      - events
+      - id
+      - created_at
+      - enabled
+      title: Webhook
+      example:
+        url: https://example.com:5689
+        events:
+        - batches.completed
+        - batches.error
+        token: hunter2
+        id: e94a150d-40af-4e96-8aa7-2948a6b4d8d3
+        created_at: '2024-10-03T02:53:30.167953'
+        enabled: true
+    WebhookBase:
+      properties:
+        url:
+          type: string
+          maxLength: 1024
+          minLength: 1
+          format: uri
+          title: Url
+          description: The URL of the webhook
+        events:
+          items:
+            type: string
+            enum:
+            - reports.resolved
+            - reports.rejected
+            - reports.pending
+            - bank_statements.completed
+            - bank_statements.error
+            - batches.completed
+            - batches.error
+          type: array
+          title: Events
+          description: A list of events that this webhook subscribes to
+        token:
+          type: string
+          maxLength: 128
+          title: Token
+          description: A secret string used to authenticate the webhook. This value
+            will be included in the `X-Ntropy-Token` header when sending requests
+            to the webhook
+      type: object
+      required:
+      - url
+      - events
+      title: WebhookBase
+    WebhookPatch:
+      properties:
+        url:
+          type: string
+          maxLength: 1024
+          minLength: 1
+          format: uri
+          title: Url
+          description: The URL of the webhook
+        events:
+          items:
+            type: string
+            enum:
+            - reports.resolved
+            - reports.rejected
+            - reports.pending
+            - bank_statements.completed
+            - bank_statements.error
+            - batches.completed
+            - batches.error
+          type: array
+          title: Events
+          description: A list of events that this webhook subscribes to
+        token:
+          type: string
+          maxLength: 128
+          title: Token
+          description: A secret string used to authenticate the webhook. This value
+            will be included in the `X-Ntropy-Token` header when sending requests
+            to the webhook
+        enabled:
+          type: boolean
+          title: Enabled
+          description: Whether the webhook is enabled or not.
+      type: object
+      title: WebhookPatch
+  securitySchemes:
+    APIKeyHeader:
+      type: apiKey
+      in: header
+      name: X-Api-Key
+tags:
+- name: Enrichment
+  description: "\nThe Enrichment API allows you to submit multiple transactions for\
+    \ enrichment in a single request. It supports both \nsynchronous and asynchronous\
+    \ submission of transactions.\n\nTransactions enriched by these endpoints are\
+    \ accessible via the [Transactions API](#tag/Transactions) \nand only accessible\
+    \ by the API key that has submitted them. Each transaction is identified by an\
+    \ id, if you submit two\ntransactions the same id, the most recent will replace\
+    \ the previous one. Transactions also accept an account holder.\nNot supplying\
+    \ one will disable both categorization and recurrence.\n\nFor more information\
+    \ on account holder attributes, please refer to \n[this](../../../account-holders/#optional-account-holder-fields)\
+    \ guide.\n\nComplete guide: [Transaction Enrichment](../../../enrichment/introduction).\n"
+  section_url: '#tag/Enrichment'
+  docs_url: ../../../enrichment/introduction
+- name: Transactions
+  description: "\nThe Transaction API allows you to manage, retrieve and search through\
+    \ enriched transactions. A transaction contains\nboth the enrichment fields and\
+    \ the original input fields. They are made available after being \n[enriched](#tag/Enrichment).\n"
+  section_url: '#tag/Transactions'
+- name: Account Holders
+  description: "\nThe Account Holder API allows you to retrieve, create and modify\
+    \ account holders. An account holder represents an\nentity that holds an account\
+    \ associated with transactions. An account holder can either be a business or\
+    \ an individual\nperson - consumer.\n\nThe fields chosen for an account holder\
+    \ are used by our enrichment process and can dramatically improve the accuracy\n\
+    of the results. \n\nComplete guide: [Account Holders](../../../account-holders).\n"
+  section_url: '#tag/Account-Holders'
+  docs_url: ../../../account-holders
+- name: Recurrence
+  description: "\nThe Recurrence API allows you to identify and categorize recurring\
+    \ patterns found in the transactions of an \n[account holder](#tag/Account-Holders),\
+    \ such as periodic payments or subscriptions and group them \ninto recurrence\
+    \ groups. Each recurrence group contains detailed information about the pattern,\
+    \ \nsuch as periodicity, amount and counterparty.\n\nTransactions can be added\
+    \ to an account holder via the [Enrichment API](#tag/Enrichment). \nIt is crucial\
+    \ that transactions are submitted with the [correct](../../../account-holders)\
+    \ \naccount holder information as the recurrence calculation relies heavily on\
+    \ it.\n\nComplete guide: [Recurrence](../../../enrichment/recurrence).\n"
+  section_url: '#tag/Recurrence'
+  docs_url: ../../../enrichment/recurrence
+- name: Bank statements
+  description: '
+
+    The Bank Statements API allows you to manage and extract information from bank
+    statements. We support extraction of
+
+    account holder information, account information and transaction records. Files
+    should be uploaded in PDF format.
+
+
+    During the extraction process, the bank statements undergo several status changes:
+
+    |  Status  |                              Description                               |
+
+    |----------|------------------------------------------------------------------------|
+
+    |processing|The upload was successful. Extraction is in progress.                   |
+
+    |completed |The extraction was successful. Results are available.                   |
+
+    |error     |An error occurred during extraction. Check `error` for more information.|
+
+
+
+    A list of error codes for the `error` status can be found below:
+
+    |         Code         |                Description                |
+
+    |----------------------|-------------------------------------------|
+
+    |invalid_bank_statement|Failed to process file as a bank statement.|
+
+    |internal_error        |Internal error. Please contact support.    |
+
+
+
+    Complete guide: [Bank Statements](../../../bank-statements).
+
+    '
+  section_url: '#tag/Bank-statements'
+  docs_url: ../../../bank-statements
+- name: Webhooks
+  description: "\nThe Webhooks API allows you to receive notifications when certain\
+    \ events occur,\nsuch as when a batch or bank statement finishes processing. \n\
+    \nWhen an event occurs, Ntropy will make a POST request to the `url` of the\n\
+    webhook. If you specified a `token` when creating the webhook, this string will\n\
+    be included in the `X-Ntropy-Token` header. The webhook call has a timeout limit\
+    \ of 10 \nseconds, so any processing of the event \n"
+  section_url: '#tag/Webhooks'
+  docs_url: ../../../webhooks
+- name: Personalization
+  description: '
+
+    The Personalization API allows you to customize the output of enrichment by
+
+    uploading a set of rules. For more information, see our documentation on
+
+    [Personalization](None).
+
+    '
+  section_url: '#tag/Personalization'
+- name: Reports
+  description: '
+
+    The Reports API allows you to flag transactions with incorrect fields. You can
+    also track the progress of each
+
+    report either through the API or using [webhooks](#tag/Webhooks).
+
+    '
+  section_url: '#tag/Reports'
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/personalization.json b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/personalization.json
new file mode 100644
index 00000000000..5b395c33923
--- /dev/null
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/fixtures/ntropy/personalization.json
@@ -0,0 +1,568 @@
+{
+    "$schema": "https://json-schema.org/draft/2019-09/schema",
+    "title": "Filter",
+    "examples": [
+      [
+        {
+          "if": {
+            "is_substring": [
+              {
+                "get": "website"
+              },
+              "ntropy"
+            ]
+          },
+          "then": [
+            {
+              "set": "logo",
+              "to": "http://example.com/favicon.ico"
+            }
+          ],
+          "else": [
+            {
+              "remove_label": "example label"
+            }
+          ]
+        }
+      ]
+    ],
+    "type": "array",
+    "items": {
+      "$ref": "#/definitions/Action"
+    },
+    "definitions": {
+      "Action": {
+        "title": "action",
+        "anyOf": [
+          {
+            "$ref": "#/definitions/If"
+          },
+          {
+            "$ref": "#/definitions/ModifyLabels"
+          },
+          {
+            "$ref": "#/definitions/Setter"
+          }
+        ]
+      },
+      "If": {
+        "title": "if",
+        "type": "object",
+        "required": [
+          "if"
+        ],
+        "properties": {
+          "if": {
+            "$ref": "#/definitions/Expr"
+          },
+          "then": {
+            "type": "array",
+            "items": {
+              "$ref": "#/definitions/Action"
+            }
+          },
+          "else": {
+            "type": "array",
+            "items": {
+              "$ref": "#/definitions/Action"
+            }
+          }
+        }
+      },
+      "Expr": {
+        "title": "expression",
+        "anyOf": [
+          {
+            "title": "boolean",
+            "type": "boolean"
+          },
+          {
+            "title": "string",
+            "type": "string"
+          },
+          {
+            "title": "number",
+            "type": "number",
+            "format": "double"
+          },
+          {
+            "title": "function",
+            "$ref": "#/definitions/FnCall"
+          }
+        ]
+      },
+      "FnCall": {
+        "oneOf": [
+          {
+            "title": "&&",
+            "type": "object",
+            "required": [
+              "&&"
+            ],
+            "properties": {
+              "&&": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "||",
+            "type": "object",
+            "required": [
+              "||"
+            ],
+            "properties": {
+              "||": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "==",
+            "type": "object",
+            "required": [
+              "=="
+            ],
+            "properties": {
+              "==": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "+",
+            "type": "object",
+            "required": [
+              "+"
+            ],
+            "properties": {
+              "+": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "-",
+            "type": "object",
+            "required": [
+              "-"
+            ],
+            "properties": {
+              "-": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "*",
+            "type": "object",
+            "required": [
+              "*"
+            ],
+            "properties": {
+              "*": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "/",
+            "type": "object",
+            "required": [
+              "/"
+            ],
+            "properties": {
+              "/": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "//",
+            "type": "object",
+            "required": [
+              "//"
+            ],
+            "properties": {
+              "//": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "<",
+            "type": "object",
+            "required": [
+              "<"
+            ],
+            "properties": {
+              "<": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                },
+                "maxItems": 2,
+                "minItems": 2
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "<=",
+            "type": "object",
+            "required": [
+              "<="
+            ],
+            "properties": {
+              "<=": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                },
+                "maxItems": 2,
+                "minItems": 2
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": ">",
+            "type": "object",
+            "required": [
+              ">"
+            ],
+            "properties": {
+              ">": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                },
+                "maxItems": 2,
+                "minItems": 2
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": ">=",
+            "type": "object",
+            "required": [
+              ">="
+            ],
+            "properties": {
+              ">=": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                },
+                "maxItems": 2,
+                "minItems": 2
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "!",
+            "type": "object",
+            "required": [
+              "!"
+            ],
+            "properties": {
+              "!": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "is_substring",
+            "type": "object",
+            "required": [
+              "is_substring"
+            ],
+            "properties": {
+              "is_substring": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                },
+                "maxItems": 2,
+                "minItems": 2
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "starts_with",
+            "type": "object",
+            "required": [
+              "starts_with"
+            ],
+            "properties": {
+              "starts_with": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                },
+                "maxItems": 2,
+                "minItems": 2
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "ends_with",
+            "type": "object",
+            "required": [
+              "ends_with"
+            ],
+            "properties": {
+              "ends_with": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                },
+                "maxItems": 2,
+                "minItems": 2
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "to_lower",
+            "type": "object",
+            "required": [
+              "to_lower"
+            ],
+            "properties": {
+              "to_lower": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "to_upper",
+            "type": "object",
+            "required": [
+              "to_upper"
+            ],
+            "properties": {
+              "to_upper": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "has_label",
+            "type": "object",
+            "required": [
+              "has_label"
+            ],
+            "properties": {
+              "has_label": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "has_mcc",
+            "type": "object",
+            "required": [
+              "has_mcc"
+            ],
+            "properties": {
+              "has_mcc": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "get property",
+            "type": "object",
+            "required": [
+              "get"
+            ],
+            "properties": {
+              "get": {
+                "$ref": "#/definitions/TxProp"
+              }
+            },
+            "additionalProperties": false
+          }
+        ]
+      },
+      "TxProp": {
+        "title": "properties",
+        "type": "string",
+        "enum": [
+          "logo",
+          "website",
+          "merchant",
+          "description",
+          "merchant_id",
+          "location",
+          "person",
+          "transaction_type",
+          "amount",
+          "entry_type",
+          "account_holder_type",
+          "account_holder_id",
+          "account_holder_name"
+        ]
+      },
+      "ModifyLabels": {
+        "title": "modify labels",
+        "oneOf": [
+          {
+            "title": "add_label",
+            "type": "object",
+            "required": [
+              "add_label"
+            ],
+            "properties": {
+              "add_label": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "remove_label",
+            "type": "object",
+            "required": [
+              "remove_label"
+            ],
+            "properties": {
+              "remove_label": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "set_labels",
+            "type": "object",
+            "required": [
+              "set_labels"
+            ],
+            "properties": {
+              "set_labels": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "add_mcc",
+            "type": "object",
+            "required": [
+              "add_mcc"
+            ],
+            "properties": {
+              "add_mcc": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "remove_mcc",
+            "type": "object",
+            "required": [
+              "remove_mcc"
+            ],
+            "properties": {
+              "remove_mcc": {
+                "$ref": "#/definitions/Expr"
+              }
+            },
+            "additionalProperties": false
+          },
+          {
+            "title": "set_mcc",
+            "type": "object",
+            "required": [
+              "set_mcc"
+            ],
+            "properties": {
+              "set_mcc": {
+                "type": "array",
+                "items": {
+                  "$ref": "#/definitions/Expr"
+                }
+              }
+            },
+            "additionalProperties": false
+          }
+        ]
+      },
+      "Setter": {
+        "title": "set",
+        "type": "object",
+        "required": [
+          "set",
+          "to"
+        ],
+        "properties": {
+          "set": {
+            "$ref": "#/definitions/EditableTxProp"
+          },
+          "to": {
+            "$ref": "#/definitions/Expr"
+          }
+        }
+      },
+      "EditableTxProp": {
+        "title": "editable properties",
+        "type": "string",
+        "enum": [
+          "logo",
+          "website",
+          "merchant",
+          "merchant_id",
+          "location",
+          "person",
+          "transaction_type"
+        ]
+      }
+    }
+  }
\ No newline at end of file
diff --git a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/openapiDocs.test.ts b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/openapiDocs.test.ts
index 2284ac9d559..f6d70ce1ecb 100644
--- a/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/openapiDocs.test.ts
+++ b/packages/cli/api-importers/openapi/openapi-ir-to-fern-tests/src/__test__/openapiDocs.test.ts
@@ -30,7 +30,7 @@ describe("openapi-ir-to-fern docs", async () => {
                 }
                 const definition = await workspace.workspace.getDefinition(
                     { context },
-                    { enableUniqueErrorsPerEndpoint: true }
+                    { enableUniqueErrorsPerEndpoint: true, preserveSchemaIds: true }
                 );
                 // eslint-disable-next-line jest/no-standalone-expect
                 expect(definition).toMatchFileSnapshot(`./__snapshots__/openapi-docs/${fixture.name}.json`);
diff --git a/packages/cli/cli/src/cli.ts b/packages/cli/cli/src/cli.ts
index 86461189e47..cf73175b2fb 100644
--- a/packages/cli/cli/src/cli.ts
+++ b/packages/cli/cli/src/cli.ts
@@ -929,8 +929,13 @@ function addWriteDefinitionCommand(cli: Argv<GlobalCliOptions>, cliContext: CliC
                 .option("language", {
                     choices: Object.values(generatorsYml.GenerationLanguage),
                     description: "Write the definition for a particular SDK language"
+                })
+                .option("preserve-schemas", {
+                    string: true,
+                    description: "Preserve potentially unsafe schema Ids in the generated fern definition"
                 }),
         async (argv) => {
+            const preserveSchemaIds = argv.preserveSchemas != null;
             await cliContext.instrumentPostHogEvent({
                 command: "fern write-definition"
             });
@@ -938,10 +943,12 @@ function addWriteDefinitionCommand(cli: Argv<GlobalCliOptions>, cliContext: CliC
                 project: await loadProjectAndRegisterWorkspacesWithContext(cliContext, {
                     commandLineApiWorkspace: argv.api,
                     defaultToAllApiWorkspaces: true,
-                    sdkLanguage: argv.language
+                    sdkLanguage: argv.language,
+                    preserveSchemaIds
                 }),
                 cliContext,
-                sdkLanguage: argv.language
+                sdkLanguage: argv.language,
+                preserveSchemaIds
             });
         }
     );
diff --git a/packages/cli/cli/src/commands/docs-dev/devDocsWorkspace.ts b/packages/cli/cli/src/commands/docs-dev/devDocsWorkspace.ts
index 8c7d20f3984..82bd33ed42d 100644
--- a/packages/cli/cli/src/commands/docs-dev/devDocsWorkspace.ts
+++ b/packages/cli/cli/src/commands/docs-dev/devDocsWorkspace.ts
@@ -47,7 +47,7 @@ export async function previewDocsWorkspace({
                 for (const apiWorkspace of project.apiWorkspaces) {
                     await cliContext.runTaskForWorkspace(apiWorkspace, async (apiWorkspaceContext) => {
                         await validateAPIWorkspaceWithoutExiting({
-                            workspace: await apiWorkspace.toFernWorkspace({ context }),
+                            workspace: await apiWorkspace.toFernWorkspace({ context }, { preserveSchemaIds: true }),
                             context: apiWorkspaceContext,
                             logWarnings: false,
                             logSummary: false
diff --git a/packages/cli/cli/src/commands/generate/generateDocsWorkspace.ts b/packages/cli/cli/src/commands/generate/generateDocsWorkspace.ts
index e7a66447d1b..1bc187b20e8 100644
--- a/packages/cli/cli/src/commands/generate/generateDocsWorkspace.ts
+++ b/packages/cli/cli/src/commands/generate/generateDocsWorkspace.ts
@@ -52,7 +52,7 @@ export async function generateDocsWorkspace({
             project.apiWorkspaces.map(async (workspace) => {
                 return workspace.toFernWorkspace(
                     { context },
-                    { enableUniqueErrorsPerEndpoint: true, detectGlobalHeaders: false }
+                    { enableUniqueErrorsPerEndpoint: true, detectGlobalHeaders: false, preserveSchemaIds: true }
                 );
             })
         );
diff --git a/packages/cli/cli/src/commands/write-definition/writeDefinitionForWorkspaces.ts b/packages/cli/cli/src/commands/write-definition/writeDefinitionForWorkspaces.ts
index ed4896af2e4..90a584a93f5 100644
--- a/packages/cli/cli/src/commands/write-definition/writeDefinitionForWorkspaces.ts
+++ b/packages/cli/cli/src/commands/write-definition/writeDefinitionForWorkspaces.ts
@@ -13,11 +13,13 @@ import { CliContext } from "../../cli-context/CliContext";
 export async function writeDefinitionForWorkspaces({
     project,
     cliContext,
-    sdkLanguage
+    sdkLanguage,
+    preserveSchemaIds
 }: {
     project: Project;
     cliContext: CliContext;
     sdkLanguage: generatorsYml.GenerationLanguage | undefined;
+    preserveSchemaIds: boolean;
 }): Promise<void> {
     await Promise.all(
         project.apiWorkspaces.map(async (workspace) => {
@@ -26,7 +28,7 @@ export async function writeDefinitionForWorkspaces({
                     await writeDefinitionForFernWorkspace({ workspace, context });
                 } else {
                     await writeDefinitionForNonFernWorkspace({
-                        workspace: await workspace.toFernWorkspace({ context }),
+                        workspace: await workspace.toFernWorkspace({ context }, { preserveSchemaIds }),
                         context
                     });
                 }
diff --git a/packages/cli/cli/versions.yml b/packages/cli/cli/versions.yml
index 0cf25f2d321..f46d09e23a8 100644
--- a/packages/cli/cli/versions.yml
+++ b/packages/cli/cli/versions.yml
@@ -1,3 +1,10 @@
+- changelogEntry:
+    - summary: |
+        Docs generation now preserves original model schema names.
+      type: internal
+  irVersion: 53
+  version: 0.45.0-rc55
+
 - changelogEntry:
     - summary: |
         Removes errant minimum and maximums for 'float' types for docs.
diff --git a/packages/cli/docs-preview/src/previewDocs.ts b/packages/cli/docs-preview/src/previewDocs.ts
index d06d0173c40..26fb2132da9 100644
--- a/packages/cli/docs-preview/src/previewDocs.ts
+++ b/packages/cli/docs-preview/src/previewDocs.ts
@@ -39,7 +39,7 @@ export async function getPreviewDocsDefinition({
             async (workspace) =>
                 await workspace.toFernWorkspace(
                     { context },
-                    { enableUniqueErrorsPerEndpoint: true, detectGlobalHeaders: false }
+                    { enableUniqueErrorsPerEndpoint: true, detectGlobalHeaders: false, preserveSchemaIds: true }
                 )
         )
     );
diff --git a/packages/cli/lazy-fern-workspace/src/OSSWorkspace.ts b/packages/cli/lazy-fern-workspace/src/OSSWorkspace.ts
index 514cd780450..c0ee0770218 100644
--- a/packages/cli/lazy-fern-workspace/src/OSSWorkspace.ts
+++ b/packages/cli/lazy-fern-workspace/src/OSSWorkspace.ts
@@ -104,9 +104,13 @@ export declare namespace OSSWorkspace {
          */
         cooerceEnumsToLiterals?: boolean;
         /*
-         * Whehter or not to parse object query parameters.
+         * Whether or not to parse object query parameters.
          */
         objectQueryParameters?: boolean;
+        /*
+         * Whether or not to preserve original schema ids.
+         */
+        preserveSchemaIds?: boolean;
     }
 }
 
@@ -302,5 +306,8 @@ function getOptionsOverridesFromSettings(settings?: OSSWorkspace.Settings): Part
     if (settings.cooerceEnumsToLiterals) {
         result.cooerceEnumsToLiterals = true;
     }
+    if (settings.preserveSchemaIds) {
+        result.preserveSchemaIds = true;
+    }
     return result;
 }
diff --git a/packages/cli/project-loader/src/loadProject.ts b/packages/cli/project-loader/src/loadProject.ts
index 52800b299f8..93e88fec5c3 100644
--- a/packages/cli/project-loader/src/loadProject.ts
+++ b/packages/cli/project-loader/src/loadProject.ts
@@ -30,6 +30,7 @@ export declare namespace loadProject {
         context: TaskContext;
         nameOverride?: string;
         sdkLanguage?: generatorsYml.GenerationLanguage;
+        preserveSchemaIds?: boolean;
     }
 
     export interface LoadProjectFromDirectoryArgs extends Args {