From 1c8e2d03e2b8c066c009786749d2f0c8b074bdc7 Mon Sep 17 00:00:00 2001 From: Michael Ossig Date: Tue, 24 Mar 2026 11:23:42 -0400 Subject: [PATCH 1/5] fixes null fields marked as required --- latest/openapi.bundled.json | 49 ++----------------------- latest/openapi.bundled.yaml | 46 ++--------------------- openapi/components/responses/error.yaml | 3 +- openapi/components/schemas/account.yaml | 14 ------- openapi/components/schemas/common.yaml | 6 +-- openapi/components/schemas/entity.yaml | 10 ----- openapi/components/schemas/payment.yaml | 13 ------- 7 files changed, 9 insertions(+), 132 deletions(-) diff --git a/latest/openapi.bundled.json b/latest/openapi.bundled.json index 8f90356..70cef85 100644 --- a/latest/openapi.bundled.json +++ b/latest/openapi.bundled.json @@ -12167,9 +12167,7 @@ "properties": { "success": { "type": "boolean", - "enum": [ - false - ] + "description": "Always `false` for error responses." }, "data": { "type": "object", @@ -12198,9 +12196,7 @@ "properties": { "success": { "type": "boolean", - "enum": [ - true - ] + "description": "Always `true` for successful responses." }, "data": { "description": "Operation-specific response payload." @@ -12288,9 +12284,7 @@ "properties": { "success": { "type": "boolean", - "enum": [ - true - ] + "description": "Always `true` for successful responses." }, "data": { "description": "Operation-specific list payload." @@ -13485,27 +13479,13 @@ "type", "status", "consent_status", - "ach", - "liability", - "clearing", - "debit_card", "capabilities", "available_capabilities", - "error", - "metadata", "products", "restricted_products", "subscriptions", "available_subscriptions", "restricted_subscriptions", - "latest_verification_session", - "balance", - "payoff", - "payment_instrument", - "card_brand", - "update", - "attribute", - "sensitive", "created_at", "updated_at" ], @@ -16361,26 +16341,16 @@ "required": [ "id", "type", - "individual", - "corporation", - "receive_only", - "address", "capabilities", "available_capabilities", "pending_capabilities", "status", "verification", - "error", - "metadata", "products", "restricted_products", "subscriptions", "available_subscriptions", "restricted_subscriptions", - "connect", - "credit_score", - "attribute", - "vehicle", "created_at", "updated_at" ], @@ -18273,24 +18243,11 @@ "description": "A Payment represents a transfer of funds between two accounts.", "required": [ "id", - "reversal_id", - "source_trace_id", - "destination_trace_id", "source", "destination", "amount", - "description", "status", - "estimated_completion_date", - "source_settlement_date", - "destination_settlement_date", - "source_status", - "destination_status", - "destination_payment_method", - "fee", "type", - "error", - "metadata", "created_at", "updated_at" ], diff --git a/latest/openapi.bundled.yaml b/latest/openapi.bundled.yaml index 59d01d3..1886985 100644 --- a/latest/openapi.bundled.yaml +++ b/latest/openapi.bundled.yaml @@ -7558,8 +7558,7 @@ components: properties: success: type: boolean - enum: - - false + description: Always `false` for error responses. data: type: object required: @@ -7579,8 +7578,7 @@ components: properties: success: type: boolean - enum: - - true + description: Always `true` for successful responses. data: description: Operation-specific response payload. message: @@ -7642,8 +7640,7 @@ components: properties: success: type: boolean - enum: - - true + description: Always `true` for successful responses. data: description: Operation-specific list payload. message: @@ -8558,27 +8555,13 @@ components: - type - status - consent_status - - ach - - liability - - clearing - - debit_card - capabilities - available_capabilities - - error - - metadata - products - restricted_products - subscriptions - available_subscriptions - restricted_subscriptions - - latest_verification_session - - balance - - payoff - - payment_instrument - - card_brand - - update - - attribute - - sensitive - created_at - updated_at properties: @@ -10508,26 +10491,16 @@ components: required: - id - type - - individual - - corporation - - receive_only - - address - capabilities - available_capabilities - pending_capabilities - status - verification - - error - - metadata - products - restricted_products - subscriptions - available_subscriptions - restricted_subscriptions - - connect - - credit_score - - attribute - - vehicle - created_at - updated_at properties: @@ -11805,24 +11778,11 @@ components: description: A Payment represents a transfer of funds between two accounts. required: - id - - reversal_id - - source_trace_id - - destination_trace_id - source - destination - amount - - description - status - - estimated_completion_date - - source_settlement_date - - destination_settlement_date - - source_status - - destination_status - - destination_payment_method - - fee - type - - error - - metadata - created_at - updated_at properties: diff --git a/openapi/components/responses/error.yaml b/openapi/components/responses/error.yaml index 862bacf..21f1ddc 100644 --- a/openapi/components/responses/error.yaml +++ b/openapi/components/responses/error.yaml @@ -60,8 +60,7 @@ ErrorEnvelope: properties: success: type: boolean - enum: - - false + description: Always `false` for error responses. data: type: object required: diff --git a/openapi/components/schemas/account.yaml b/openapi/components/schemas/account.yaml index 52ae798..4e6b018 100644 --- a/openapi/components/schemas/account.yaml +++ b/openapi/components/schemas/account.yaml @@ -25,27 +25,13 @@ AccountBase: - type - status - consent_status - - ach - - liability - - clearing - - debit_card - capabilities - available_capabilities - - error - - metadata - products - restricted_products - subscriptions - available_subscriptions - restricted_subscriptions - - latest_verification_session - - balance - - payoff - - payment_instrument - - card_brand - - update - - attribute - - sensitive - created_at - updated_at properties: diff --git a/openapi/components/schemas/common.yaml b/openapi/components/schemas/common.yaml index b91210f..3607f68 100644 --- a/openapi/components/schemas/common.yaml +++ b/openapi/components/schemas/common.yaml @@ -8,8 +8,7 @@ SuccessEnvelope: properties: success: type: boolean - enum: - - true + description: Always `true` for successful responses. data: description: Operation-specific response payload. message: @@ -30,8 +29,7 @@ ListEnvelope: properties: success: type: boolean - enum: - - true + description: Always `true` for successful responses. data: description: Operation-specific list payload. message: diff --git a/openapi/components/schemas/entity.yaml b/openapi/components/schemas/entity.yaml index e331dc4..5c19643 100644 --- a/openapi/components/schemas/entity.yaml +++ b/openapi/components/schemas/entity.yaml @@ -20,26 +20,16 @@ EntityBase: required: - id - type - - individual - - corporation - - receive_only - - address - capabilities - available_capabilities - pending_capabilities - status - verification - - error - - metadata - products - restricted_products - subscriptions - available_subscriptions - restricted_subscriptions - - connect - - credit_score - - attribute - - vehicle - created_at - updated_at properties: diff --git a/openapi/components/schemas/payment.yaml b/openapi/components/schemas/payment.yaml index a5271ce..e75d5f4 100644 --- a/openapi/components/schemas/payment.yaml +++ b/openapi/components/schemas/payment.yaml @@ -3,24 +3,11 @@ Payment: description: A Payment represents a transfer of funds between two accounts. required: - id - - reversal_id - - source_trace_id - - destination_trace_id - source - destination - amount - - description - status - - estimated_completion_date - - source_settlement_date - - destination_settlement_date - - source_status - - destination_status - - destination_payment_method - - fee - type - - error - - metadata - created_at - updated_at properties: From f3c3b236082ae064b7cb7e14ca06a0794c7f21b7 Mon Sep 17 00:00:00 2001 From: Michael Ossig Date: Tue, 24 Mar 2026 13:20:51 -0400 Subject: [PATCH 2/5] remove opal and element event endpoints --- latest/openapi.bundled.json | 14800 ++++++++------------- latest/openapi.bundled.yaml | 2058 +-- openapi/components/schemas/opal.yaml | 417 - openapi/components/security_schemes.yaml | 20 - openapi/openapi.yaml | 82 - openapi/paths/elements/pk.yaml | 1175 -- openapi/paths/elements/sk.yaml | 189 - openapi/paths/opal.yaml | 236 - 8 files changed, 5799 insertions(+), 13178 deletions(-) delete mode 100644 openapi/components/schemas/opal.yaml delete mode 100644 openapi/paths/elements/pk.yaml delete mode 100644 openapi/paths/elements/sk.yaml delete mode 100644 openapi/paths/opal.yaml diff --git a/latest/openapi.bundled.json b/latest/openapi.bundled.json index 70cef85..36c3c4c 100644 --- a/latest/openapi.bundled.json +++ b/latest/openapi.bundled.json @@ -193,14 +193,6 @@ { "name": "Simulate Payments", "description": "Sandbox payment simulation" - }, - { - "name": "Opal", - "description": "Opal client-side session and token management" - }, - { - "name": "Elements", - "description": "Client-side Element endpoints" } ], "paths": { @@ -8291,31 +8283,51 @@ } } }, - "/opal/token": { + "/simulate/accounts/{accountId}/verification_sessions/{avfId}/amounts": { "get": { - "operationId": "retrieveOpalToken", - "summary": "Retrieve an Opal session", - "description": "Returns the current state of the Opal session associated with the authenticated token.", + "operationId": "simulateRetrieveVerificationAmounts", + "summary": "Retrieve micro-deposit verification amounts", + "description": "Returns the micro-deposit amounts for a verification session in the sandbox environment.\nUse this to retrieve the test amounts needed to complete micro-deposit verification during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Opal" + "Simulate Accounts" ], "security": [ { - "OpalToken": [] + "SecretKey": [] } ], "parameters": [ { "$ref": "#/components/parameters/method_version" + }, + { + "name": "accountId", + "in": "path", + "required": true, + "description": "Unique identifier for the account.", + "schema": { + "type": "string", + "pattern": "^acc_\\w+$" + } + }, + { + "name": "avfId", + "in": "path", + "required": true, + "description": "Unique identifier for the verification session.", + "schema": { + "type": "string", + "pattern": "^avf_\\w+$" + } } ], "responses": { "200": { - "description": "The current session state.", + "description": "The micro-deposit amounts for the verification session.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalSessionResponse" + "$ref": "#/components/schemas/AccountVerificationSessionAmountsResponse" } } } @@ -8326,20 +8338,22 @@ "401": { "$ref": "#/components/responses/Unauthorized" }, - "429": { - "$ref": "#/components/responses/RateLimited" + "404": { + "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/InternalError" } } - }, + } + }, + "/simulate/accounts/{accountId}/transactions": { "post": { - "operationId": "createOpalToken", - "summary": "Create an Opal token", - "description": "Creates a new Opal token and, depending on the creation pattern, a new session. Supports three patterns: (A) provide `entity_id` + `mode` + mode config, (B) provide inline `entity` + `mode` + mode config, or (C) provide `session_id` to create an additional token for an existing session.", + "operationId": "simulateCreateAccountTransaction", + "summary": "Simulate a transaction", + "description": "Creates a simulated transaction on an account in the sandbox environment.\nUse this to test transaction-related flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Opal" + "Simulate Accounts" ], "security": [ { @@ -8349,6 +8363,16 @@ "parameters": [ { "$ref": "#/components/parameters/method_version" + }, + { + "name": "accountId", + "in": "path", + "required": true, + "description": "Unique identifier for the account.", + "schema": { + "type": "string", + "pattern": "^acc_\\w+$" + } } ], "requestBody": { @@ -8356,13 +8380,24 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalTokenCreateRequest" - }, - "example": { - "entity_id": "ent_au22b1fbFJbp8", - "mode": "card_connect", - "card_connect": { - "selection_type": "single" + "type": "object", + "required": [ + "amount" + ], + "properties": { + "amount": { + "type": "integer", + "description": "Transaction amount in cents.", + "minimum": 1 + }, + "type": { + "type": "string", + "description": "The type of transaction to simulate." + }, + "merchant_name": { + "type": "string", + "description": "Merchant name for the simulated transaction." + } } } } @@ -8370,20 +8405,11 @@ }, "responses": { "200": { - "description": "The created Opal token.", + "description": "The simulated transaction.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalTokenResponse" - }, - "example": { - "success": true, - "data": { - "token": "otkn_yVf8MKZcGj3a9P2xLwR7nT", - "session_id": "osess_4kR8mNpL2xQvW7jY", - "valid_until": "2026-03-14T19:30:00.000Z" - }, - "message": null + "$ref": "#/components/schemas/AccountTransactionResponse" } } } @@ -8394,46 +8420,50 @@ "401": { "$ref": "#/components/responses/Unauthorized" }, - "422": { - "$ref": "#/components/responses/UnprocessableEntity" - }, - "429": { - "$ref": "#/components/responses/RateLimited" + "404": { + "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/InternalError" } } - }, - "delete": { - "operationId": "deactivateOpalToken", - "summary": "Deactivate an Opal token", - "description": "Deactivates the authenticated Opal token, preventing further use.", + } + }, + "/simulate/accounts/{accountId}/card_brands": { + "post": { + "operationId": "simulateCreateAccountCardBrand", + "summary": "Simulate a card brand", + "description": "Creates a simulated card brand result for an account in the sandbox environment.\nUse this to test card brand retrieval flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Opal" + "Simulate Accounts" ], "security": [ { - "OpalToken": [] + "SecretKey": [] } ], "parameters": [ { "$ref": "#/components/parameters/method_version" + }, + { + "name": "accountId", + "in": "path", + "required": true, + "description": "Unique identifier for the account.", + "schema": { + "type": "string", + "pattern": "^acc_\\w+$" + } } ], "responses": { "200": { - "description": "Token deactivated successfully.", + "description": "The simulated card brand result.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalNullResponse" - }, - "example": { - "success": true, - "data": null, - "message": null + "$ref": "#/components/schemas/AccountCardBrandResponse" } } } @@ -8444,8 +8474,8 @@ "401": { "$ref": "#/components/responses/Unauthorized" }, - "429": { - "$ref": "#/components/responses/RateLimited" + "404": { + "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/InternalError" @@ -8453,17 +8483,17 @@ } } }, - "/opal/token/{flow_type}/{operation}": { - "put": { - "operationId": "updateOpalToken", - "summary": "Execute an Opal flow operation", - "description": "Executes an operation within a specific flow of the Opal session. The flow type and operation determine which step of the workflow is advanced.", + "/simulate/entities/{entity_id}/credit_scores/{crs_id}": { + "post": { + "operationId": "simulateEntityCreditScore", + "summary": "Simulate a credit score", + "description": "Simulates a credit score result for an entity in the sandbox environment.\nUse this to test credit score retrieval flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Opal" + "Simulate Entities" ], "security": [ { - "OpalToken": [] + "SecretKey": [] } ], "parameters": [ @@ -8471,50 +8501,58 @@ "$ref": "#/components/parameters/method_version" }, { - "name": "flow_type", + "name": "entity_id", "in": "path", "required": true, - "description": "The flow type to operate on.", + "description": "Unique identifier for the entity.", "schema": { "type": "string", - "enum": [ - "idv", - "cxn", - "avf", - "txn" - ] + "pattern": "^ent_\\w+$" } }, { - "name": "operation", + "name": "crs_id", "in": "path", "required": true, - "description": "The operation to execute within the flow.", + "description": "Unique identifier for the credit score resource.", "schema": { - "type": "string" + "type": "string", + "pattern": "^crs_\\w+$" } } ], "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalTokenUpdateRequest" - }, - "example": { - "data": {} + "type": "object", + "required": [ + "score" + ], + "properties": { + "score": { + "type": "integer", + "description": "The credit score value to simulate.", + "minimum": 300, + "maximum": 850 + }, + "status": { + "type": "string", + "description": "The status to set on the credit score resource." + } + } } } } }, "responses": { "200": { - "description": "The updated session state.", + "description": "The simulated credit score result.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalSessionResponse" + "$ref": "#/components/schemas/EntityCreditScoreResponse" } } } @@ -8525,11 +8563,8 @@ "401": { "$ref": "#/components/responses/Unauthorized" }, - "422": { - "$ref": "#/components/responses/UnprocessableEntity" - }, - "429": { - "$ref": "#/components/responses/RateLimited" + "404": { + "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/InternalError" @@ -8537,54 +8572,41 @@ } } }, - "/opal/events": { + "/simulate/entities/{entity_id}/connect": { "post": { - "operationId": "createOpalEvents", - "summary": "Record Opal events", - "description": "Records one or more events for the current Opal session. Events are used to track user interactions within the Opal client.", + "operationId": "simulateEntityConnect", + "summary": "Simulate entity connect", + "description": "Simulates the entity connect flow in the sandbox environment.\nUse this to test account discovery and connection flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Opal" + "Simulate Entities" ], "security": [ { - "OpalToken": [] + "SecretKey": [] } ], "parameters": [ { "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OpalEventCreateRequest" - }, - "example": { - "events": [ - { - "action": "card_connect.flow.started", - "metadata": {} - } - ] - } + }, + { + "name": "entity_id", + "in": "path", + "required": true, + "description": "Unique identifier for the entity.", + "schema": { + "type": "string", + "pattern": "^ent_\\w+$" } } - }, + ], "responses": { "200": { - "description": "Events recorded successfully.", + "description": "The simulated connect result.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalNullResponse" - }, - "example": { - "success": true, - "data": null, - "message": null + "$ref": "#/components/schemas/EntityConnectResponse" } } } @@ -8595,52 +8617,50 @@ "401": { "$ref": "#/components/responses/Unauthorized" }, - "429": { - "$ref": "#/components/responses/RateLimited" + "404": { + "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/InternalError" } } - }, - "get": { - "operationId": "listOpalEvents", - "summary": "List Opal events", - "description": "Returns all non-internal events for the current Opal session.", + } + }, + "/simulate/entities/{entity_id}/attributes": { + "post": { + "operationId": "simulateEntityAttributes", + "summary": "Simulate entity attributes", + "description": "Simulates attribute data for an entity in the sandbox environment.\nUse this to test attribute retrieval flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Opal" + "Simulate Entities" ], "security": [ { - "OpalToken": [] + "SecretKey": [] } ], "parameters": [ { "$ref": "#/components/parameters/method_version" + }, + { + "name": "entity_id", + "in": "path", + "required": true, + "description": "Unique identifier for the entity.", + "schema": { + "type": "string", + "pattern": "^ent_\\w+$" + } } ], "responses": { "200": { - "description": "A list of session events.", + "description": "The simulated entity attributes.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OpalEventListResponse" - }, - "example": { - "success": true, - "data": [ - { - "type": "card_connect.flow.started", - "mode": "card_connect", - "object": "flow", - "action": "started", - "timestamp": "2026-03-14T19:00:00.000Z", - "data": null - } - ], - "message": null + "$ref": "#/components/schemas/EntityAttributeResponse" } } } @@ -8651,8 +8671,8 @@ "401": { "$ref": "#/components/responses/Unauthorized" }, - "429": { - "$ref": "#/components/responses/RateLimited" + "404": { + "$ref": "#/components/responses/NotFound" }, "500": { "$ref": "#/components/responses/InternalError" @@ -8660,13 +8680,13 @@ } } }, - "/simulate/accounts/{accountId}/verification_sessions/{avfId}/amounts": { - "get": { - "operationId": "simulateRetrieveVerificationAmounts", - "summary": "Retrieve micro-deposit verification amounts", - "description": "Returns the micro-deposit amounts for a verification session in the sandbox environment.\nUse this to retrieve the test amounts needed to complete micro-deposit verification during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", + "/simulate/events": { + "post": { + "operationId": "simulateCreateEvent", + "summary": "Simulate an event", + "description": "Creates a simulated webhook event in the sandbox environment.\nUse this to test webhook handling and event processing during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Simulate Accounts" + "Simulate Events" ], "security": [ { @@ -8676,80 +8696,6 @@ "parameters": [ { "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - }, - { - "name": "avfId", - "in": "path", - "required": true, - "description": "Unique identifier for the verification session.", - "schema": { - "type": "string", - "pattern": "^avf_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The micro-deposit amounts for the verification session.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountVerificationSessionAmountsResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/simulate/accounts/{accountId}/transactions": { - "post": { - "operationId": "simulateCreateAccountTransaction", - "summary": "Simulate a transaction", - "description": "Creates a simulated transaction on an account in the sandbox environment.\nUse this to test transaction-related flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", - "tags": [ - "Simulate Accounts" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } } ], "requestBody": { @@ -8759,21 +8705,17 @@ "schema": { "type": "object", "required": [ - "amount" + "type", + "resource_id" ], "properties": { - "amount": { - "type": "integer", - "description": "Transaction amount in cents.", - "minimum": 1 - }, "type": { "type": "string", - "description": "The type of transaction to simulate." + "description": "The event type to simulate (e.g., `payment.update`)." }, - "merchant_name": { + "resource_id": { "type": "string", - "description": "Merchant name for the simulated transaction." + "description": "The identifier of the resource to associate with the event." } } } @@ -8782,65 +8724,11 @@ }, "responses": { "200": { - "description": "The simulated transaction.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountTransactionResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/simulate/accounts/{accountId}/card_brands": { - "post": { - "operationId": "simulateCreateAccountCardBrand", - "summary": "Simulate a card brand", - "description": "Creates a simulated card brand result for an account in the sandbox environment.\nUse this to test card brand retrieval flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", - "tags": [ - "Simulate Accounts" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The simulated card brand result.", + "description": "The simulated event.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccountCardBrandResponse" + "$ref": "#/components/schemas/EventResponse" } } } @@ -8851,22 +8739,19 @@ "401": { "$ref": "#/components/responses/Unauthorized" }, - "404": { - "$ref": "#/components/responses/NotFound" - }, "500": { "$ref": "#/components/responses/InternalError" } } } }, - "/simulate/entities/{entity_id}/credit_scores/{crs_id}": { + "/simulate/payments/{paymentId}": { "post": { - "operationId": "simulateEntityCreditScore", - "summary": "Simulate a credit score", - "description": "Simulates a credit score result for an entity in the sandbox environment.\nUse this to test credit score retrieval flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", + "operationId": "simulateUpdatePaymentStatus", + "summary": "Simulate a payment status update", + "description": "Updates the status of a payment in the sandbox environment.\nUse this to test payment lifecycle and status transition flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", "tags": [ - "Simulate Entities" + "Simulate Payments" ], "security": [ { @@ -8878,23 +8763,13 @@ "$ref": "#/components/parameters/method_version" }, { - "name": "entity_id", - "in": "path", - "required": true, - "description": "Unique identifier for the entity.", - "schema": { - "type": "string", - "pattern": "^ent_\\w+$" - } - }, - { - "name": "crs_id", + "name": "paymentId", "in": "path", "required": true, - "description": "Unique identifier for the credit score resource.", + "description": "Unique identifier for the payment.", "schema": { "type": "string", - "pattern": "^crs_\\w+$" + "pattern": "^pmt_\\w+$" } } ], @@ -8905,18 +8780,16 @@ "schema": { "type": "object", "required": [ - "score" + "status" ], "properties": { - "score": { - "type": "integer", - "description": "The credit score value to simulate.", - "minimum": 300, - "maximum": 850 - }, "status": { "type": "string", - "description": "The status to set on the credit score resource." + "description": "The status to transition the payment to." + }, + "error_code": { + "type": "string", + "description": "Error code for the simulated failure. Required when status is reversal_required, reversal_processing, or failed." } } } @@ -8925,11 +8798,11 @@ }, "responses": { "200": { - "description": "The simulated credit score result.", + "description": "The payment with updated status.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityCreditScoreResponse" + "$ref": "#/components/schemas/PaymentResponse" } } } @@ -8949,13 +8822,13 @@ } } }, - "/simulate/entities/{entity_id}/connect": { + "/simulate/payments/payment_instruments/{pmt_inst_id}": { "post": { - "operationId": "simulateEntityConnect", - "summary": "Simulate entity connect", - "description": "Simulates the entity connect flow in the sandbox environment.\nUse this to test account discovery and connection flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", + "operationId": "simulatePostPaymentViaPaymentInstrument", + "summary": "Simulate a payment via payment instrument", + "description": "Simulates posting a payment through a payment instrument in the sandbox environment.\nUse this to test payment instrument flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\nThis endpoint is available starting with API version `2025-12-01`.\n", "tags": [ - "Simulate Entities" + "Simulate Payments" ], "security": [ { @@ -8967,23 +8840,43 @@ "$ref": "#/components/parameters/method_version" }, { - "name": "entity_id", + "name": "pmt_inst_id", "in": "path", "required": true, - "description": "Unique identifier for the entity.", + "description": "Unique identifier for the payment instrument.", "schema": { "type": "string", - "pattern": "^ent_\\w+$" + "pattern": "^pmt_inst_\\w+$" } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "amount" + ], + "properties": { + "amount": { + "type": "integer", + "description": "Payment amount in cents.", + "minimum": 1 + } + } + } + } + } + }, "responses": { "200": { - "description": "The simulated connect result.", + "description": "The simulated payment result.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EntityConnectResponse" + "$ref": "#/components/schemas/PaymentResponse" } } } @@ -9001,2518 +8894,15 @@ "$ref": "#/components/responses/InternalError" } } - } - }, - "/simulate/entities/{entity_id}/attributes": { - "post": { - "operationId": "simulateEntityAttributes", - "summary": "Simulate entity attributes", - "description": "Simulates attribute data for an entity in the sandbox environment.\nUse this to test attribute retrieval flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", - "tags": [ - "Simulate Entities" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "entity_id", - "in": "path", - "required": true, - "description": "Unique identifier for the entity.", - "schema": { - "type": "string", - "pattern": "^ent_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The simulated entity attributes.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityAttributeResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/simulate/events": { - "post": { - "operationId": "simulateCreateEvent", - "summary": "Simulate an event", - "description": "Creates a simulated webhook event in the sandbox environment.\nUse this to test webhook handling and event processing during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", - "tags": [ - "Simulate Events" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "type", - "resource_id" - ], - "properties": { - "type": { - "type": "string", - "description": "The event type to simulate (e.g., `payment.update`)." - }, - "resource_id": { - "type": "string", - "description": "The identifier of the resource to associate with the event." - } - } - } - } - } - }, - "responses": { - "200": { - "description": "The simulated event.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EventResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/simulate/payments/{paymentId}": { - "post": { - "operationId": "simulateUpdatePaymentStatus", - "summary": "Simulate a payment status update", - "description": "Updates the status of a payment in the sandbox environment.\nUse this to test payment lifecycle and status transition flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\n", - "tags": [ - "Simulate Payments" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "paymentId", - "in": "path", - "required": true, - "description": "Unique identifier for the payment.", - "schema": { - "type": "string", - "pattern": "^pmt_\\w+$" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "status" - ], - "properties": { - "status": { - "type": "string", - "description": "The status to transition the payment to." - }, - "error_code": { - "type": "string", - "description": "Error code for the simulated failure. Required when status is reversal_required, reversal_processing, or failed." - } - } - } - } - } - }, - "responses": { - "200": { - "description": "The payment with updated status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/simulate/payments/payment_instruments/{pmt_inst_id}": { - "post": { - "operationId": "simulatePostPaymentViaPaymentInstrument", - "summary": "Simulate a payment via payment instrument", - "description": "Simulates posting a payment through a payment instrument in the sandbox environment.\nUse this to test payment instrument flows during development.\n\n**Development only** - This endpoint is only available in the sandbox environment.\nThis endpoint is available starting with API version `2025-12-01`.\n", - "tags": [ - "Simulate Payments" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "pmt_inst_id", - "in": "path", - "required": true, - "description": "Unique identifier for the payment instrument.", - "schema": { - "type": "string", - "pattern": "^pmt_inst_\\w+$" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "amount" - ], - "properties": { - "amount": { - "type": "integer", - "description": "Payment amount in cents.", - "minimum": 1 - } - } - } - } - } - }, - "responses": { - "200": { - "description": "The simulated payment result.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PaymentResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/token": { - "post": { - "operationId": "elementsCreateToken", - "deprecated": true, - "summary": "Create an element token", - "description": "Creates a new element token for client-side use. The token is scoped to a specific entity\nand has an expiration. Use this server-side to generate tokens for your frontend.\n", - "tags": [ - "Elements" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "required": [ - "entity_id", - "type" - ], - "properties": { - "entity_id": { - "type": "string", - "description": "The entity ID to scope the token to.", - "pattern": "^ent_\\w+$" - }, - "type": { - "type": "string", - "description": "The type of element token to create." - }, - "element_type": { - "type": "string", - "description": "The specific element type for the token." - } - } - } - } - } - }, - "responses": { - "200": { - "description": "The created element token.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/token/{pk_elem_id}/results": { - "get": { - "operationId": "elementsRetrieveSessionResults", - "deprecated": true, - "summary": "Retrieve element session results", - "description": "Returns the results of a completed element session. Use this to retrieve data collected during an element flow.", - "tags": [ - "Elements" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "pk_elem_id", - "in": "path", - "required": true, - "description": "The element token identifier.", - "schema": { - "type": "string", - "pattern": "^pk_elem_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The session results.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/sessions/{session_id}": { - "get": { - "operationId": "elementsRetrieveSession", - "deprecated": true, - "summary": "Retrieve an element session", - "description": "Returns a single element session by its identifier.", - "tags": [ - "Elements" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "session_id", - "in": "path", - "required": true, - "description": "Unique identifier for the element session.", - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The requested session.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - }, - "put": { - "operationId": "elementsUpdateSession", - "deprecated": true, - "summary": "Update an element session", - "description": "Updates an element session by its identifier.", - "tags": [ - "Elements" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "session_id", - "in": "path", - "required": true, - "description": "Unique identifier for the element session.", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Session update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated session.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/accounts/exchange": { - "post": { - "operationId": "elementsExchangeAccount", - "deprecated": true, - "summary": "Exchange an account", - "description": "Exchanges account information for use in element flows. This endpoint is called server-side.", - "tags": [ - "Elements" - ], - "security": [ - { - "SecretKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Account exchange parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The exchanged account data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/config": { - "get": { - "operationId": "elementsRetrieveConfig", - "deprecated": true, - "summary": "Retrieve element configuration", - "description": "Returns the element configuration for the current token. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "The element configuration.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/config/{pk_elem_id}": { - "get": { - "operationId": "elementsRetrieveConfigById", - "deprecated": true, - "summary": "Retrieve element configuration by ID", - "description": "Returns the element configuration for a specific element token ID. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "pk_elem_id", - "in": "path", - "required": true, - "description": "The element token identifier.", - "schema": { - "type": "string", - "pattern": "^pk_elem_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The element configuration.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/entities/me": { - "get": { - "operationId": "elementsRetrieveEntity", - "deprecated": true, - "summary": "Retrieve the current entity", - "description": "Returns the entity associated with the current element token. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "The entity associated with the token.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/entities/me/init_mno_verification": { - "post": { - "operationId": "elementsInitMnoVerification", - "deprecated": true, - "summary": "Initialize MNO verification", - "description": "Initiates a mobile network operator (MNO) verification for the current entity. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "The MNO verification initialization result.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/accounts": { - "get": { - "operationId": "listElementsAccounts", - "deprecated": true, - "summary": "List element accounts", - "description": "Returns a list of accounts accessible to the current element token. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "A list of accounts.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountListResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - }, - "post": { - "operationId": "createElementsAccount", - "deprecated": true, - "summary": "Create an element account", - "description": "Creates a new account through the element. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Account creation parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The newly created account.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/accounts/{accountId}": { - "get": { - "operationId": "retrieveElementsAccount", - "deprecated": true, - "summary": "Retrieve an element account", - "description": "Returns a single account by its identifier. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The requested account.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - }, - "put": { - "operationId": "updateElementsAccount", - "deprecated": true, - "summary": "Update an element account", - "description": "Updates an account through the element. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Account update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated account.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/accounts/{accountId}/details": { - "get": { - "operationId": "elementsRetrieveAccountDetails", - "deprecated": true, - "summary": "Retrieve element account details", - "description": "Returns detailed information for an account. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "Account details.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/accounts/{accountId}/transaction_stream": { - "post": { - "operationId": "elementsInitTransactionStream", - "deprecated": true, - "summary": "Initialize a transaction stream", - "description": "Initiates a transaction stream for an account. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The transaction stream initialization result.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/account_verification/accounts/{accountId}/avf_sessions/{avfId}": { - "put": { - "operationId": "elementsUpdateAvfSession", - "deprecated": true, - "summary": "Update a verification session", - "description": "Updates a verification session for an account. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - }, - { - "name": "avfId", - "in": "path", - "required": true, - "description": "Unique identifier for the verification session.", - "schema": { - "type": "string", - "pattern": "^avf_\\w+$" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Verification session update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated verification session.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountVerificationSessionResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/account_verification/avf_sessions/bulk_generate": { - "post": { - "operationId": "elementsBulkGenerateAvfSessions", - "deprecated": true, - "summary": "Bulk generate verification sessions", - "description": "Generates verification sessions for multiple accounts at once. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Parameters for bulk verification session generation." - } - } - } - }, - "responses": { - "200": { - "description": "The generated verification sessions.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/accounts": { - "get": { - "operationId": "elementsListAuthAccounts", - "deprecated": true, - "summary": "List auth accounts", - "description": "Returns a list of accounts available for authentication flows. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "A list of accounts for authentication.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountListResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/accounts/consent": { - "get": { - "operationId": "elementsRetrieveAuthAccountsConsent", - "deprecated": true, - "summary": "Retrieve auth accounts consent", - "description": "Returns the current consent status for account authentication. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "The consent status.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - }, - "post": { - "operationId": "elementsCreateAuthAccountsConsent", - "deprecated": true, - "summary": "Create auth accounts consent", - "description": "Creates or updates consent for account authentication. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Consent parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The created consent.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/accounts_with_updatable_numbers": { - "get": { - "operationId": "elementsListUpdatableNumbers", - "deprecated": true, - "summary": "List accounts with updatable numbers", - "description": "Returns accounts whose account numbers can be updated. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "A list of accounts with updatable numbers.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountListResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/accounts_with_updatable_numbers/{accountId}": { - "put": { - "operationId": "elementsUpdateAccountNumber", - "deprecated": true, - "summary": "Update an account number", - "description": "Updates the account number for an account. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Account number update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated account.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/entities": { - "put": { - "operationId": "elementsUpdateAuthEntity", - "deprecated": true, - "summary": "Update auth entity", - "description": "Updates the entity associated with the current authentication session. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Entity update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated entity.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EntityResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/entities/phone_verification": { - "post": { - "operationId": "elementsCreatePhoneVerification", - "deprecated": true, - "summary": "Create phone verification", - "description": "Initiates a phone verification for the current entity. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Phone verification parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The phone verification result.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - }, - "put": { - "operationId": "elementsUpdatePhoneVerification", - "deprecated": true, - "summary": "Update phone verification", - "description": "Completes or updates a phone verification for the current entity. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Phone verification update parameters (e.g., OTP code)." - } - } - } - }, - "responses": { - "200": { - "description": "The updated phone verification.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/entities/session": { - "post": { - "operationId": "elementsCreateEntitySession", - "deprecated": true, - "summary": "Create entity session", - "description": "Creates an authentication session for the current entity. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Session creation parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The created entity session.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - }, - "put": { - "operationId": "elementsUpdateEntitySession", - "deprecated": true, - "summary": "Update entity session", - "description": "Updates an authentication session for the current entity. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Session update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated entity session.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/mortgages_with_missing_address": { - "get": { - "operationId": "elementsListMortgagesMissingAddress", - "deprecated": true, - "summary": "List mortgages missing address", - "description": "Returns mortgage accounts that are missing property address information. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "A list of mortgage accounts missing address data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountListResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/auth/mortgages_with_missing_address/{accountId}": { - "put": { - "operationId": "elementsUpdateMortgageAddress", - "deprecated": true, - "summary": "Update mortgage address", - "description": "Updates the property address for a mortgage account. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the mortgage account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Address update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated account.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/balance_transfer/accounts": { - "get": { - "operationId": "elementsListBalanceTransferAccounts", - "deprecated": true, - "summary": "List balance transfer accounts", - "description": "Returns accounts eligible for balance transfers. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "A list of accounts eligible for balance transfers.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AccountListResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/balance_transfer/auth_token": { - "post": { - "operationId": "elementsCreateBalanceTransferAuthToken", - "deprecated": true, - "summary": "Create balance transfer auth token", - "description": "Creates an authorization token for balance transfer operations. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Auth token creation parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The created auth token.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/balance_transfer/session": { - "put": { - "operationId": "elementsUpdateBalanceTransferSession", - "deprecated": true, - "summary": "Update balance transfer session", - "description": "Updates the balance transfer session state. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Balance transfer session update parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The updated balance transfer session.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/connect/generate_next_step_token": { - "post": { - "operationId": "elementsGenerateNextStepToken", - "deprecated": true, - "summary": "Generate connect next step token", - "description": "Generates a token for the next step in the connect flow. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "The generated next step token.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/connect/set_element_complete": { - "put": { - "operationId": "elementsSetConnectComplete", - "deprecated": true, - "summary": "Set connect element complete", - "description": "Marks the connect element flow as complete. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "The updated connect element state.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/events": { - "post": { - "operationId": "elementsCreateEvent", - "deprecated": true, - "summary": "Create an element event", - "description": "Creates an event from the element client. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Event data." - } - } - } - }, - "responses": { - "200": { - "description": "The created event.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EventResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/link/credentials": { - "post": { - "operationId": "elementsProcessLinkCredential", - "deprecated": true, - "summary": "Process link credentials", - "description": "Processes link credentials for account connection. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Link credential parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The link credential processing result.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/merchants": { - "get": { - "operationId": "elementsListMerchants", - "deprecated": true, - "summary": "List merchants", - "description": "Returns a list of merchants available in the element. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "A list of merchants.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectListResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/merchants/{mchId}": { - "get": { - "operationId": "elementsRetrieveMerchant", - "deprecated": true, - "summary": "Retrieve a merchant", - "description": "Returns a single merchant by its identifier. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "name": "mchId", - "in": "path", - "required": true, - "description": "Unique identifier for the merchant.", - "schema": { - "type": "string", - "pattern": "^mch_\\w+$" - } - } - ], - "responses": { - "200": { - "description": "The requested merchant.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/merchants_parents": { - "get": { - "operationId": "elementsListMerchantParents", - "deprecated": true, - "summary": "List merchant parents", - "description": "Returns a list of parent merchant groups. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - }, - { - "$ref": "#/components/parameters/PageParam" - }, - { - "$ref": "#/components/parameters/PageLimitParam" - }, - { - "$ref": "#/components/parameters/PageCursorParam" - } - ], - "responses": { - "200": { - "description": "A list of parent merchants.", - "headers": { - "Pagination-Page": { - "description": "Current page number.", - "schema": { - "type": "integer" - } - }, - "Pagination-Page-Count": { - "description": "Total number of pages.", - "schema": { - "type": "integer" - } - }, - "Pagination-Page-Limit": { - "description": "Number of items per page.", - "schema": { - "type": "integer" - } - }, - "Pagination-Total-Count": { - "description": "Total number of items across all pages.", - "schema": { - "type": "integer" - } - }, - "Pagination-Page-Cursor-Prev": { - "description": "Cursor for the previous page, if available.", - "schema": { - "type": [ - "string", - "null" - ] - } - }, - "Pagination-Page-Cursor-Next": { - "description": "Cursor for the next page, if available.", - "schema": { - "type": [ - "string", - "null" - ] - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectListResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/transfer": { - "post": { - "operationId": "elementsCreateTransfer", - "deprecated": true, - "summary": "Create a transfer", - "description": "Creates a transfer through the element. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Transfer creation parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The created transfer.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/transfer/accounts/exchange": { - "post": { - "operationId": "elementsExchangeTransferAccount", - "deprecated": true, - "summary": "Exchange transfer account", - "description": "Exchanges account information for a transfer operation. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "description": "Account exchange parameters." - } - } - } - }, - "responses": { - "200": { - "description": "The exchanged account data.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - }, - "/elements/token/revoke": { - "delete": { - "operationId": "elementsRevokeToken", - "deprecated": true, - "summary": "Revoke element token", - "description": "Revokes the current element token, invalidating it for future requests. Requires a `pk_...` token.", - "tags": [ - "Elements" - ], - "security": [ - { - "PublicKey": [] - } - ], - "parameters": [ - { - "$ref": "#/components/parameters/method_version" - } - ], - "responses": { - "200": { - "description": "Token successfully revoked.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ObjectResponse" - } - } - } - }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "500": { - "$ref": "#/components/responses/InternalError" - } - } - } - } - }, - "components": { - "securitySchemes": { - "SecretKey": { - "type": "http", - "scheme": "bearer", - "description": "Secret key authentication. Use your team's secret key (`sk_...`) as the Bearer token.\nAll authenticated API endpoints require this scheme unless otherwise noted.\n" - }, - "PublicKey": { - "type": "http", - "scheme": "bearer", - "description": "Public key authentication for Element endpoints. Use a public element token (`pk_...`)\nas the Bearer token. Element tokens are scoped to a specific entity and have an expiration.\n" - }, - "SessionKey": { - "type": "http", - "scheme": "bearer", - "description": "Session key authentication for Element session endpoints. Use a session element token\nas the Bearer token. Created via POST /elements/token.\n" - }, - "OpalToken": { - "type": "http", - "scheme": "bearer", - "description": "Opal token authentication for Opal session endpoints. Use an Opal token (`otkn_...`)\nas the Bearer token. Created via POST /opal/token using a secret key.\n" + } + } + }, + "components": { + "securitySchemes": { + "SecretKey": { + "type": "http", + "scheme": "bearer", + "description": "Secret key authentication. Use your team's secret key (`sk_...`) as the Bearer token.\nAll authenticated API endpoints require this scheme unless otherwise noted.\n" } }, "parameters": { @@ -11773,1442 +9163,882 @@ "pattern": "^avf_\\w+$" } }, - "expand_entities": { - "name": "expand", - "in": "query", - "required": false, - "description": "Expand related entity resources inline. Supports the entity expandable fields\ndocumented by the API validator for entity list and retrieve operations.\n", - "style": "form", - "explode": true, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "connect", - "credit_score", - "attribute", - "vehicle", - "phone_latest_verification_session", - "identity_latest_verification_session" - ] - } - } - }, - "EntityAttributeIdParam": { - "name": "attrId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity attribute.", - "schema": { - "type": "string", - "pattern": "^attr_\\w+$" - } - }, - "expand_entity_connects": { - "name": "expand", - "in": "query", - "required": false, - "description": "Expand connected accounts inline on entity connect resources.\nSupports expanding the account list itself or one level of account fields.\n", - "style": "form", - "explode": true, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "accounts", - "accounts.sensitive", - "accounts.balance", - "accounts.card_brand", - "accounts.attribute", - "accounts.payoff", - "accounts.transaction", - "accounts.update", - "accounts.payment_instrument", - "accounts.latest_verification_session", - "accounts.liability.mch_id" - ] - } - } - }, - "EntityConnectIdParam": { - "name": "cxnId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity connect session.", - "schema": { - "type": "string", - "pattern": "^cxn_\\w+$" - } - }, - "EntityCreditScoreIdParam": { - "name": "crsId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity credit score.", - "schema": { - "type": "string", - "pattern": "^crs_\\w+$" - } - }, - "EntityIdentityIdParam": { - "name": "idnId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity identity.", - "schema": { - "type": "string", - "pattern": "^idn_\\w+$" - } - }, - "EntityManualConnectIdParam": { - "name": "mcxnId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity manual connect session.", - "schema": { - "type": "string", - "pattern": "^mcxn_\\w+$" - } - }, - "EntityProductIdParam": { - "name": "prdId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity product.", - "schema": { - "type": "string", - "pattern": "^prd_\\w+$" - } - }, - "EntitySubscriptionIdParam": { - "name": "subId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity subscription.", - "schema": { - "type": "string", - "pattern": "^sub_\\w+$" - } - }, - "EntityVehicleIdParam": { - "name": "vhlId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity vehicle.", - "schema": { - "type": "string", - "pattern": "^vhl_\\w+$" - } - }, - "EntityVerificationSessionIdParam": { - "name": "evfId", - "in": "path", - "required": true, - "description": "Unique identifier for the entity verification session.", - "schema": { - "type": "string", - "pattern": "^evf_\\w+$" - } - }, - "EventIdParam": { - "name": "evtId", - "in": "path", - "required": true, - "description": "Unique identifier for the event.", - "schema": { - "type": "string", - "pattern": "^evt_\\w+$" - } - }, - "expand_payments": { - "name": "expand", - "in": "query", - "required": false, - "description": "Expand payment source or destination accounts inline. Nested account expansion\nis supported for latest verification sessions on the source or destination.\n", - "style": "form", - "explode": true, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "source", - "destination", - "source.latest_verification_session", - "destination.latest_verification_session" - ] - } - } - }, - "ReversalIdParam": { - "name": "reversalId", - "in": "path", - "required": true, - "description": "Unique identifier for the reversal.", - "schema": { - "type": "string", - "pattern": "^rvs_\\w+$" - } - }, - "WebhookIdParam": { - "name": "webhookId", - "in": "path", - "required": true, - "description": "Unique identifier for the webhook.", - "schema": { - "type": "string", - "pattern": "^whk_\\w+$" - } - }, - "expand": { - "name": "expand", - "in": "query", - "required": false, - "description": "Expand related resources inline. Pass one or more field names to replace\nresource IDs with full objects. Supports dot-notation for nested expansions\nup to 4 levels deep (e.g., `source.latest_verification_session`).\n", - "style": "form", - "explode": true, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "responses": { - "BadRequest": { - "description": "Bad request - invalid parameters or request body.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } - } - } - }, - "Unauthorized": { - "description": "Unauthorized - missing or invalid authentication token.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } - } - } - }, - "Forbidden": { - "description": "Forbidden - insufficient permissions for this operation.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } - } - } - }, - "NotFound": { - "description": "Not found - the requested resource does not exist.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } + "expand_entities": { + "name": "expand", + "in": "query", + "required": false, + "description": "Expand related entity resources inline. Supports the entity expandable fields\ndocumented by the API validator for entity list and retrieve operations.\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "connect", + "credit_score", + "attribute", + "vehicle", + "phone_latest_verification_session", + "identity_latest_verification_session" + ] } } }, - "InternalError": { - "description": "Internal server error.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } - } + "EntityAttributeIdParam": { + "name": "attrId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity attribute.", + "schema": { + "type": "string", + "pattern": "^attr_\\w+$" } }, - "RateLimited": { - "description": "Too many requests - rate limit exceeded.", - "headers": { - "Retry-After": { - "description": "Number of seconds to wait before retrying.", - "schema": { - "type": "integer" - } - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } + "expand_entity_connects": { + "name": "expand", + "in": "query", + "required": false, + "description": "Expand connected accounts inline on entity connect resources.\nSupports expanding the account list itself or one level of account fields.\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "accounts", + "accounts.sensitive", + "accounts.balance", + "accounts.card_brand", + "accounts.attribute", + "accounts.payoff", + "accounts.transaction", + "accounts.update", + "accounts.payment_instrument", + "accounts.latest_verification_session", + "accounts.liability.mch_id" + ] } } }, - "UnprocessableEntity": { - "description": "Unprocessable entity - the request was valid JSON but failed business or validation rules.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } - } + "EntityConnectIdParam": { + "name": "cxnId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity connect session.", + "schema": { + "type": "string", + "pattern": "^cxn_\\w+$" } }, - "GatewayTimeout": { - "description": "Upstream timeout - the request could not be completed before the upstream deadline.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorEnvelope" - } - } + "EntityCreditScoreIdParam": { + "name": "crsId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity credit score.", + "schema": { + "type": "string", + "pattern": "^crs_\\w+$" } - } - }, - "schemas": { - "JwkPublic": { - "type": "object", - "required": [ - "kid", - "kty", - "alg", - "use", - "n", - "e" - ], - "properties": { - "kid": { - "type": "string", - "description": "Key identifier.", - "example": "mthd_jwk_abc123" - }, - "kty": { - "type": "string", - "description": "Key type.", - "example": "RSA" - }, - "alg": { - "type": "string", - "description": "JWK algorithm.", - "example": "RSA-OAEP-256" - }, - "use": { - "type": "string", - "description": "Intended key use.", - "example": "enc" - }, - "n": { - "type": "string", - "description": "RSA modulus." - }, - "e": { - "type": "string", - "description": "RSA public exponent." - } + }, + "EntityIdentityIdParam": { + "name": "idnId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity identity.", + "schema": { + "type": "string", + "pattern": "^idn_\\w+$" } }, - "WellKnownJwksResponse": { - "type": "object", - "required": [ - "keys" - ], - "properties": { - "keys": { - "type": "array", - "items": { - "$ref": "#/components/schemas/JwkPublic" - } - } + "EntityManualConnectIdParam": { + "name": "mcxnId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity manual connect session.", + "schema": { + "type": "string", + "pattern": "^mcxn_\\w+$" } }, - "ErrorObject": { - "type": "object", - "required": [ - "type", - "code", - "message" - ], - "properties": { - "type": { - "type": "string", - "description": "Error type category.", - "enum": [ - "invalid_request", - "api_error", - "resource_error" - ] - }, - "code": { - "type": "integer", - "description": "Numeric error code. Common codes include 400 (bad request), 401 (unauthorized), 403 (forbidden), 404 (not found), 422 (unprocessable entity), 429 (rate limited), and 500 (internal error)." - }, - "sub_type": { - "type": [ - "string", - "null" - ], - "description": "More specific error classification." - }, - "message": { - "type": "string", - "description": "Human-readable error description." - } + "EntityProductIdParam": { + "name": "prdId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity product.", + "schema": { + "type": "string", + "pattern": "^prd_\\w+$" } }, - "ErrorEnvelope": { - "type": "object", - "required": [ - "success", - "data", - "message" - ], - "properties": { - "success": { - "type": "boolean", - "description": "Always `false` for error responses." - }, - "data": { - "type": "object", - "required": [ - "error" - ], - "properties": { - "error": { - "$ref": "#/components/schemas/ErrorObject" - } - } - }, - "message": { - "type": "string" - } + "EntitySubscriptionIdParam": { + "name": "subId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity subscription.", + "schema": { + "type": "string", + "pattern": "^sub_\\w+$" } }, - "SuccessEnvelope": { - "type": "object", - "description": "Standard envelope for successful responses that return a single payload.", - "required": [ - "success", - "data", - "message" - ], - "properties": { - "success": { - "type": "boolean", - "description": "Always `true` for successful responses." - }, - "data": { - "description": "Operation-specific response payload." - }, - "message": { - "type": [ - "string", - "null" - ] - } - }, - "example": { - "success": true, - "data": {}, - "message": null + "EntityVehicleIdParam": { + "name": "vhlId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity vehicle.", + "schema": { + "type": "string", + "pattern": "^vhl_\\w+$" } }, - "MethodPublicKey": { - "type": "object", - "required": [ - "id", - "jwk", - "jwk_thumbprint", - "status", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the Method JWK.", - "pattern": "^mthd_jwk_\\w+$" - }, - "jwk": { - "$ref": "#/components/schemas/JwkPublic" - }, - "jwk_thumbprint": { - "type": "string", - "description": "SHA-256 thumbprint for the public JWK." - }, - "status": { - "type": "string", - "description": "Lifecycle status of the public key.", - "enum": [ - "active", - "deprecated", - "disabled" - ] - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the key was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the key was last updated." - } + "EntityVerificationSessionIdParam": { + "name": "evfId", + "in": "path", + "required": true, + "description": "Unique identifier for the entity verification session.", + "schema": { + "type": "string", + "pattern": "^evf_\\w+$" } }, - "MethodPublicKeyResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/MethodPublicKey" - } - } - } - ] - }, - "ListEnvelope": { - "type": "object", - "description": "Standard envelope for successful responses that return a list payload.", - "required": [ - "success", - "data", - "message" - ], - "properties": { - "success": { - "type": "boolean", - "description": "Always `true` for successful responses." - }, - "data": { - "description": "Operation-specific list payload." - }, - "message": { - "type": [ - "string", - "null" - ] - } - }, - "example": { - "success": true, - "data": [], - "message": null + "EventIdParam": { + "name": "evtId", + "in": "path", + "required": true, + "description": "Unique identifier for the event.", + "schema": { + "type": "string", + "pattern": "^evt_\\w+$" } }, - "AccountACH": { - "type": [ - "object", - "null" - ], - "description": "ACH account details. Present when `type` is `ach`.", - "properties": { - "routing": { - "type": "string", - "description": "The ACH routing number." - }, - "number": { - "type": "string", - "description": "The ACH account number." - }, - "type": { + "expand_payments": { + "name": "expand", + "in": "query", + "required": false, + "description": "Expand payment source or destination accounts inline. Nested account expansion\nis supported for latest verification sessions on the source or destination.\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { "type": "string", - "description": "The type of ACH account.", "enum": [ - "checking", - "savings" + "source", + "destination", + "source.latest_verification_session", + "destination.latest_verification_session" ] } } }, - "MerchantType": { - "type": "string", - "enum": [ - "auto_loan", - "business_loan", - "credit_card", - "electric_utility", - "home_loan", - "insurance", - "internet_utility", - "loan", - "medical", - "personal_loan", - "student_loan", - "telephone_utility", - "television_utility", - "water_utility", - "bank", - "city", - "county", - "home_equity_loan", - "mortgage", - "utility", - "waste_utility" - ] + "ReversalIdParam": { + "name": "reversalId", + "in": "path", + "required": true, + "description": "Unique identifier for the reversal.", + "schema": { + "type": "string", + "pattern": "^rvs_\\w+$" + } }, - "MerchantProviderIds": { - "type": "object", - "properties": { - "plaid": { - "type": "array", - "items": { - "type": "string" + "WebhookIdParam": { + "name": "webhookId", + "in": "path", + "required": true, + "description": "Unique identifier for the webhook.", + "schema": { + "type": "string", + "pattern": "^whk_\\w+$" + } + }, + "expand": { + "name": "expand", + "in": "query", + "required": false, + "description": "Expand related resources inline. Pass one or more field names to replace\nresource IDs with full objects. Supports dot-notation for nested expansions\nup to 4 levels deep (e.g., `source.latest_verification_session`).\n", + "style": "form", + "explode": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "responses": { + "BadRequest": { + "description": "Bad request - invalid parameters or request body.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" } - }, - "mx": { - "type": "array", - "items": { - "type": "string" + } + } + }, + "Unauthorized": { + "description": "Unauthorized - missing or invalid authentication token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" } - }, - "finicity": { - "type": "array", - "items": { - "type": "string" + } + } + }, + "Forbidden": { + "description": "Forbidden - insufficient permissions for this operation.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" } - }, - "dpp": { - "type": "array", - "items": { - "type": "string" + } + } + }, + "NotFound": { + "description": "Not found - the requested resource does not exist.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" } - }, - "rpps": { - "type": "array", - "items": { - "type": "string" + } + } + }, + "InternalError": { + "description": "Internal server error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" } } } }, - "MerchantCredential": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "Type of credential field." - }, - "initial": { - "type": "string", - "description": "Initial/default value hint for the field." + "RateLimited": { + "description": "Too many requests - rate limit exceeded.", + "headers": { + "Retry-After": { + "description": "Number of seconds to wait before retrying.", + "schema": { + "type": "integer" + } + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" + } } } }, - "Merchant": { - "type": "object", - "required": [ - "mch_id", - "parent_name", - "name", - "logo", - "description", - "note", - "types", - "account_prefixes", - "provider_ids", - "credentials", - "customized_auth", - "is_temp", - "account_number_formats" - ], - "properties": { - "mch_id": { - "type": "string", - "description": "Unique identifier for the merchant.", - "example": "mch_aTJMbnCjw34yQ" - }, - "parent_name": { - "type": "string", - "description": "Name of the parent merchant group.", - "example": "Chase" - }, - "name": { - "type": "string", - "description": "Display name of the merchant.", - "example": "Chase - Credit Cards" - }, - "logo": { - "type": "string", - "description": "URL of the merchant logo.", - "example": "https://static.methodfi.com/logos/chase.png" - }, - "description": { - "type": [ - "string", - "null" - ], - "description": "Description of the merchant." - }, - "note": { - "type": [ - "string", - "null" - ], - "description": "Additional notes about the merchant." - }, - "types": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MerchantType" - }, - "description": "Types of accounts supported by this merchant." - }, - "account_prefixes": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Known account number prefixes for this merchant." - }, - "provider_ids": { - "$ref": "#/components/schemas/MerchantProviderIds" - }, - "credentials": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MerchantCredential" - }, - "description": "Credential fields required for account linking." - }, - "customized_auth": { - "type": "boolean", - "description": "Whether the merchant has a customized authentication flow." - }, - "is_temp": { - "type": "boolean", - "description": "Whether this is a temporary merchant entry." - }, - "account_number_formats": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Accepted account number formats." + "UnprocessableEntity": { + "description": "Unprocessable entity - the request was valid JSON but failed business or validation rules.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" + } } } }, - "AccountLiability": { - "type": [ - "object", - "null" - ], - "description": "Liability account details. Present when `type` is `liability`.", - "required": [ - "mch_id", - "mask", - "ownership", - "fingerprint", - "type", - "sub_type", - "name" - ], - "properties": { - "mch_id": { - "description": "The merchant ID associated with this liability.", - "oneOf": [ - { - "type": "string", - "pattern": "^mch_\\w+$" - }, - { - "$ref": "#/components/schemas/Merchant" - } - ] - }, - "mask": { - "type": [ - "string", - "null" - ], - "description": "Last 4 digits of the account number.", - "example": "4321" - }, - "ownership": { - "type": [ - "string", - "null" - ], - "description": "Ownership type of the account.", - "enum": [ - "primary", - "authorized", - "joint", - "unknown", - null - ] - }, - "fingerprint": { - "type": [ - "string", - "null" - ], - "description": "Unique fingerprint for de-duplication." - }, - "type": { - "type": "string", - "description": "The type of liability.", - "enum": [ - "credit_card", - "auto_loan", - "mortgage", - "personal_loan", - "student_loan", - "student_loans", - "collection", - "credit_builder", - "insurance", - "loan", - "medical", - "utility", - "bnpl", - "fintech" - ] - }, - "sub_type": { - "type": [ - "string", - "null" - ], - "description": "More specific classification of the liability type." - }, - "name": { - "type": [ - "string", - "null" - ], - "description": "Display name of the liability account." + "GatewayTimeout": { + "description": "Upstream timeout - the request could not be completed before the upstream deadline.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorEnvelope" + } } } - }, - "AccountClearing": { - "type": [ - "object", - "null" + } + }, + "schemas": { + "JwkPublic": { + "type": "object", + "required": [ + "kid", + "kty", + "alg", + "use", + "n", + "e" ], - "description": "Clearing account details. Present when `type` is `clearing`.", "properties": { - "type": { + "kid": { "type": "string", - "description": "The type of clearing account.", - "enum": [ - "single_use", - "multi_use" - ] + "description": "Key identifier.", + "example": "mthd_jwk_abc123" }, - "routing": { + "kty": { "type": "string", - "description": "The clearing routing number." + "description": "Key type.", + "example": "RSA" }, - "number": { + "alg": { "type": "string", - "description": "The clearing account number." - } - } - }, - "AccountDebitCard": { - "type": [ - "object", - "null" - ], - "description": "Debit card account details. Present when `type` is `debit_card`.", - "properties": { - "network": { + "description": "JWK algorithm.", + "example": "RSA-OAEP-256" + }, + "use": { "type": "string", - "description": "The card network." + "description": "Intended key use.", + "example": "enc" }, - "mask": { + "n": { "type": "string", - "description": "Last 4 digits of the card number." + "description": "RSA modulus." }, - "issuer": { + "e": { "type": "string", - "description": "The card issuer." + "description": "RSA public exponent." } } }, - "AccountCapability": { - "type": "string", - "description": "A capability that can be enabled for an account.", - "enum": [ - "payments:send", - "payments:receive", - "data:retrieve", - "data:sync" - ] - }, - "AccountResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when an account is disabled.", + "WellKnownJwksResponse": { + "type": "object", "required": [ - "type", - "code", - "sub_type", - "message" + "keys" ], "properties": { - "type": { - "type": "string", - "description": "The category of account error.", - "enum": [ - "ACCOUNT_DISABLED" - ] - }, - "code": { - "type": "integer", - "description": "Numeric error code (11XXX range).", - "enum": [ - 11001, - 11002, - 11003, - 11004, - 11005, - 11006 - ] - }, - "sub_type": { - "type": "string", - "description": "Specific account error classification.", - "enum": [ - "ACCOUNT_INVALID_DETAILS", - "ACCOUNT_UNAUTHORIZED_PAYMENT", - "ACCOUNT_CLOSED", - "ACCOUNT_CONSENT_WITHDRAWN", - "ACCOUNT_DISABLED_INVALID_STATE", - "ACCOUNT_DISABLED_HOLDER_ENTITY_DISABLED" - ] - }, - "message": { - "type": "string", - "description": "Human-readable error description." + "keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/JwkPublic" + } } - }, - "example": { - "type": "ACCOUNT_DISABLED", - "code": 11001, - "sub_type": "ACCOUNT_INVALID_DETAILS", - "message": "Account was disabled due to invalid information reported by the financial institution." } }, - "Metadata": { - "type": [ - "object", - "null" - ], - "additionalProperties": true, - "description": "Arbitrary key-value metadata attached to the resource." - }, - "AccountVerificationSessionResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when an account verification session fails.", + "ErrorObject": { + "type": "object", "required": [ "type", "code", - "sub_type", "message" ], "properties": { "type": { "type": "string", - "description": "The category of verification session error.", + "description": "Error type category.", "enum": [ - "ACCOUNT_VERIFICATION_SESSION_FAILED" + "invalid_request", + "api_error", + "resource_error" ] }, "code": { "type": "integer", - "description": "Numeric error code (16XXX range).", - "enum": [ - 16001, - 16002, - 16003, - 16004 - ] + "description": "Numeric error code. Common codes include 400 (bad request), 401 (unauthorized), 403 (forbidden), 404 (not found), 422 (unprocessable entity), 429 (rate limited), and 500 (internal error)." }, "sub_type": { - "type": "string", - "description": "Specific verification session error classification.", - "enum": [ - "VERIFICATION_TYPE_NOT_SUPPORTED", - "INVALID_DETAILS", - "VERIFICATION_SESSION_ATTEMPT_LIMIT_REACHED", - "MICRO_DEPOSITS_FAILED" - ] + "type": [ + "string", + "null" + ], + "description": "More specific error classification." }, "message": { "type": "string", "description": "Human-readable error description." } - }, - "example": { - "type": "ACCOUNT_VERIFICATION_SESSION_FAILED", - "code": 16001, - "sub_type": "VERIFICATION_TYPE_NOT_SUPPORTED", - "message": "The verification type provided is not supported for the merchant." } }, - "AccountVerificationSession": { + "ErrorEnvelope": { "type": "object", - "description": "A verification session for an account.", "required": [ - "id", - "account_id", - "status", - "type", - "error", - "created_at", - "updated_at" + "success", + "data", + "message" ], "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the verification session.", - "pattern": "^avf_\\w+$", - "example": "avf_aTJMbnCjw34yQ" - }, - "account_id": { - "type": "string", - "description": "The account this verification session belongs to.", - "pattern": "^acc_\\w+$" - }, - "status": { - "type": "string", - "description": "Current status of the verification session.", - "enum": [ - "pending", - "in_progress", - "verified", - "failed" - ] - }, - "type": { - "type": "string", - "description": "The type of verification.", - "enum": [ - "micro_deposits", - "mx", - "plaid", - "teller", - "auto_verify", - "trusted_provisioner", - "pre_auth", - "standard", - "issuer", - "instant", - "network", - "three_ds" - ] - }, - "error": { - "$ref": "#/components/schemas/AccountVerificationSessionResourceError" + "success": { + "type": "boolean", + "description": "Always `false` for error responses." }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the verification session was created." + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "$ref": "#/components/schemas/ErrorObject" + } + } }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the verification session was last updated." + "message": { + "type": "string" } } }, - "BalanceResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when a balance sync fails.", + "SuccessEnvelope": { + "type": "object", + "description": "Standard envelope for successful responses that return a single payload.", "required": [ - "type", - "code", - "sub_type", + "success", + "data", "message" ], "properties": { - "type": { - "type": "string", - "description": "The category of balance error.", - "enum": [ - "BALANCE_FAILED" - ] - }, - "code": { - "type": "integer", - "description": "Numeric error code (20XXX range).", - "enum": [ - 20001 - ] + "success": { + "type": "boolean", + "description": "Always `true` for successful responses." }, - "sub_type": { - "type": "string", - "description": "Specific balance error classification.", - "enum": [ - "BALANCE_TEMPORARILY_UNAVAILABLE" - ] + "data": { + "description": "Operation-specific response payload." }, "message": { - "type": "string", - "description": "Human-readable error description." + "type": [ + "string", + "null" + ] } }, "example": { - "type": "BALANCE_FAILED", - "code": 20001, - "sub_type": "BALANCE_TEMPORARILY_UNAVAILABLE", - "message": "Balance is temporarily unavailable for this account." + "success": true, + "data": {}, + "message": null } }, - "AccountBalance": { + "MethodPublicKey": { "type": "object", - "description": "A balance record for an account.", "required": [ "id", - "account_id", + "jwk", + "jwk_thumbprint", "status", - "amount", - "error", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the balance.", - "pattern": "^bal_\\w+$", - "example": "bal_dKe9ehC3hEBYy" + "description": "Unique identifier for the Method JWK.", + "pattern": "^mthd_jwk_\\w+$" }, - "account_id": { + "jwk": { + "$ref": "#/components/schemas/JwkPublic" + }, + "jwk_thumbprint": { "type": "string", - "description": "The account this balance belongs to.", - "pattern": "^acc_\\w+$" + "description": "SHA-256 thumbprint for the public JWK." }, "status": { "type": "string", - "description": "Current status of the balance request.", + "description": "Lifecycle status of the public key.", "enum": [ - "completed", - "pending", - "failed" + "active", + "deprecated", + "disabled" ] }, - "amount": { - "type": [ - "number", - "null" - ], - "description": "The balance amount in cents." - }, - "error": { - "$ref": "#/components/schemas/BalanceResourceError" - }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the balance was created." + "description": "Timestamp when the key was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the balance was last updated." + "description": "Timestamp when the key was last updated." } } }, - "PayoffResourceError": { + "MethodPublicKeyResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/MethodPublicKey" + } + } + } + ] + }, + "ListEnvelope": { + "type": "object", + "description": "Standard envelope for successful responses that return a list payload.", + "required": [ + "success", + "data", + "message" + ], + "properties": { + "success": { + "type": "boolean", + "description": "Always `true` for successful responses." + }, + "data": { + "description": "Operation-specific list payload." + }, + "message": { + "type": [ + "string", + "null" + ] + } + }, + "example": { + "success": true, + "data": [], + "message": null + } + }, + "AccountACH": { "type": [ "object", "null" ], - "description": "Error details when a payoff sync fails.", - "required": [ - "type", - "code", - "sub_type", - "message" - ], + "description": "ACH account details. Present when `type` is `ach`.", "properties": { + "routing": { + "type": "string", + "description": "The ACH routing number." + }, + "number": { + "type": "string", + "description": "The ACH account number." + }, "type": { "type": "string", - "description": "The category of payoff error.", + "description": "The type of ACH account.", "enum": [ - "PAYOFF_FAILED" + "checking", + "savings" ] + } + } + }, + "MerchantType": { + "type": "string", + "enum": [ + "auto_loan", + "business_loan", + "credit_card", + "electric_utility", + "home_loan", + "insurance", + "internet_utility", + "loan", + "medical", + "personal_loan", + "student_loan", + "telephone_utility", + "television_utility", + "water_utility", + "bank", + "city", + "county", + "home_equity_loan", + "mortgage", + "utility", + "waste_utility" + ] + }, + "MerchantProviderIds": { + "type": "object", + "properties": { + "plaid": { + "type": "array", + "items": { + "type": "string" + } }, - "code": { - "type": "integer", - "description": "Numeric error code (18XXX range).", - "enum": [ - 18001 - ] + "mx": { + "type": "array", + "items": { + "type": "string" + } }, - "sub_type": { + "finicity": { + "type": "array", + "items": { + "type": "string" + } + }, + "dpp": { + "type": "array", + "items": { + "type": "string" + } + }, + "rpps": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "MerchantCredential": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "Specific payoff error classification.", - "enum": [ - "PAYOFF_TEMPORARILY_UNAVAILABLE" - ] + "description": "Type of credential field." }, - "message": { + "initial": { "type": "string", - "description": "Human-readable error description." - } - }, - "example": { - "type": "PAYOFF_FAILED", - "code": 18001, - "sub_type": "PAYOFF_TEMPORARILY_UNAVAILABLE", - "message": "Payoff is temporarily unavailable for this account." + "description": "Initial/default value hint for the field." + } } }, - "AccountPayoff": { + "Merchant": { "type": "object", - "description": "A payoff record for an account.", "required": [ - "id", - "account_id", - "status", - "amount", - "term", - "per_diem_amount", - "error", - "created_at", - "updated_at" + "mch_id", + "parent_name", + "name", + "logo", + "description", + "note", + "types", + "account_prefixes", + "provider_ids", + "credentials", + "customized_auth", + "is_temp", + "account_number_formats" ], "properties": { - "id": { + "mch_id": { "type": "string", - "description": "Unique identifier for the payoff.", - "pattern": "^pyf_\\w+$", - "example": "pyf_dKe9ehC3hEBYy" + "description": "Unique identifier for the merchant.", + "example": "mch_aTJMbnCjw34yQ" }, - "account_id": { + "parent_name": { "type": "string", - "description": "The account this payoff belongs to.", - "pattern": "^acc_\\w+$" + "description": "Name of the parent merchant group.", + "example": "Chase" }, - "status": { + "name": { "type": "string", - "description": "Current status of the payoff request.", - "enum": [ - "completed", - "pending", - "failed" - ] + "description": "Display name of the merchant.", + "example": "Chase - Credit Cards" }, - "amount": { - "type": [ - "number", - "null" - ], - "description": "The payoff amount in cents." + "logo": { + "type": "string", + "description": "URL of the merchant logo.", + "example": "https://static.methodfi.com/logos/chase.png" }, - "term": { + "description": { "type": [ - "number", + "string", "null" ], - "description": "Number of days the payoff amount is valid." + "description": "Description of the merchant." }, - "per_diem_amount": { + "note": { "type": [ - "number", + "string", "null" ], - "description": "Per diem interest amount in cents." + "description": "Additional notes about the merchant." }, - "error": { - "$ref": "#/components/schemas/PayoffResourceError" + "types": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MerchantType" + }, + "description": "Types of accounts supported by this merchant." }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the payoff was created." + "account_prefixes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Known account number prefixes for this merchant." }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the payoff was last updated." + "provider_ids": { + "$ref": "#/components/schemas/MerchantProviderIds" + }, + "credentials": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MerchantCredential" + }, + "description": "Credential fields required for account linking." + }, + "customized_auth": { + "type": "boolean", + "description": "Whether the merchant has a customized authentication flow." + }, + "is_temp": { + "type": "boolean", + "description": "Whether this is a temporary merchant entry." + }, + "account_number_formats": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Accepted account number formats." } } }, - "ResourceError": { + "AccountLiability": { "type": [ "object", "null" ], + "description": "Liability account details. Present when `type` is `liability`.", "required": [ + "mch_id", + "mask", + "ownership", + "fingerprint", "type", - "code", - "message" + "sub_type", + "name" ], "properties": { - "type": { - "type": "string" - }, - "code": { - "type": "integer" + "mch_id": { + "description": "The merchant ID associated with this liability.", + "oneOf": [ + { + "type": "string", + "pattern": "^mch_\\w+$" + }, + { + "$ref": "#/components/schemas/Merchant" + } + ] }, - "sub_type": { + "mask": { "type": [ "string", "null" - ] - }, - "message": { - "type": "string" - } - } - }, - "AccountPaymentInstrument": { - "type": "object", - "description": "A payment instrument for an account.", - "required": [ - "id", - "account_id", - "status", - "type", - "error", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the payment instrument.", - "pattern": "^pmt_inst_\\w+$", - "example": "pmt_inst_aTJMbnCjw34yQ" - }, - "account_id": { - "type": "string", - "description": "The account this payment instrument belongs to.", - "pattern": "^acc_\\w+$" + ], + "description": "Last 4 digits of the account number.", + "example": "4321" }, - "status": { - "type": "string", - "description": "Current status of the payment instrument.", + "ownership": { + "type": [ + "string", + "null" + ], + "description": "Ownership type of the account.", "enum": [ - "active", - "pending", - "failed", - "closed" + "primary", + "authorized", + "joint", + "unknown", + null ] }, - "type": { - "type": "string", - "description": "The type of payment instrument." - }, - "error": { - "$ref": "#/components/schemas/ResourceError" - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the payment instrument was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the payment instrument was last updated." - } - } - }, - "AccountCardBrand": { - "type": "object", - "description": "Card brand information for an account.", - "required": [ - "id", - "account_id", - "network", - "issuer", - "last4", - "status", - "error", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the card brand.", - "pattern": "^cbrd_\\w+$", - "example": "cbrd_aTJMbnCjw34yQ" - }, - "account_id": { - "type": "string", - "description": "The account this card brand belongs to.", - "pattern": "^acc_\\w+$" - }, - "network": { + "fingerprint": { "type": [ "string", "null" ], - "description": "The card network.", - "enum": [ - "visa", - "mastercard", - "amex", - "discover", - null + "description": "Unique fingerprint for de-duplication." + }, + "type": { + "type": "string", + "description": "The type of liability.", + "enum": [ + "credit_card", + "auto_loan", + "mortgage", + "personal_loan", + "student_loan", + "student_loans", + "collection", + "credit_builder", + "insurance", + "loan", + "medical", + "utility", + "bnpl", + "fintech" ] }, - "issuer": { + "sub_type": { "type": [ "string", "null" ], - "description": "The card issuer." + "description": "More specific classification of the liability type." }, - "last4": { + "name": { "type": [ "string", "null" ], - "description": "Last 4 digits of the card number." - }, - "status": { + "description": "Display name of the liability account." + } + } + }, + "AccountClearing": { + "type": [ + "object", + "null" + ], + "description": "Clearing account details. Present when `type` is `clearing`.", + "properties": { + "type": { "type": "string", - "description": "Current status of the card brand request.", + "description": "The type of clearing account.", "enum": [ - "completed", - "pending", - "failed" + "single_use", + "multi_use" ] }, - "error": { - "$ref": "#/components/schemas/ResourceError" + "routing": { + "type": "string", + "description": "The clearing routing number." }, - "created_at": { + "number": { "type": "string", - "format": "date-time", - "description": "Timestamp when the card brand was created." + "description": "The clearing account number." + } + } + }, + "AccountDebitCard": { + "type": [ + "object", + "null" + ], + "description": "Debit card account details. Present when `type` is `debit_card`.", + "properties": { + "network": { + "type": "string", + "description": "The card network." }, - "updated_at": { + "mask": { "type": "string", - "format": "date-time", - "description": "Timestamp when the card brand was last updated." + "description": "Last 4 digits of the card number." + }, + "issuer": { + "type": "string", + "description": "The card issuer." } } }, - "UpdateResourceError": { + "AccountCapability": { + "type": "string", + "description": "A capability that can be enabled for an account.", + "enum": [ + "payments:send", + "payments:receive", + "data:retrieve", + "data:sync" + ] + }, + "AccountResourceError": { "type": [ "object", "null" ], - "description": "Error details when an account update fails.", + "description": "Error details when an account is disabled.", "required": [ "type", "code", @@ -13218,23 +10048,33 @@ "properties": { "type": { "type": "string", - "description": "The category of update error.", + "description": "The category of account error.", "enum": [ - "UPDATE_FAILED" + "ACCOUNT_DISABLED" ] }, "code": { "type": "integer", - "description": "Numeric error code (21XXX range).", + "description": "Numeric error code (11XXX range).", "enum": [ - 21001 + 11001, + 11002, + 11003, + 11004, + 11005, + 11006 ] }, "sub_type": { "type": "string", - "description": "Specific update error classification.", + "description": "Specific account error classification.", "enum": [ - "UPDATE_TEMPORARILY_UNAVAILABLE" + "ACCOUNT_INVALID_DETAILS", + "ACCOUNT_UNAUTHORIZED_PAYMENT", + "ACCOUNT_CLOSED", + "ACCOUNT_CONSENT_WITHDRAWN", + "ACCOUNT_DISABLED_INVALID_STATE", + "ACCOUNT_DISABLED_HOLDER_ENTITY_DISABLED" ] }, "message": { @@ -13243,123 +10083,26 @@ } }, "example": { - "type": "UPDATE_FAILED", - "code": 21001, - "sub_type": "UPDATE_TEMPORARILY_UNAVAILABLE", - "message": "Update is temporarily unavailable for this account." - } - }, - "AccountUpdate": { - "type": "object", - "description": "An update record for an account.", - "required": [ - "id", - "account_id", - "status", - "type", - "error", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the update.", - "pattern": "^upd_\\w+$", - "example": "upd_aTJMbnCjw34yQ" - }, - "account_id": { - "type": "string", - "description": "The account this update belongs to.", - "pattern": "^acc_\\w+$" - }, - "status": { - "type": "string", - "description": "Current status of the update.", - "enum": [ - "completed", - "pending", - "failed" - ] - }, - "type": { - "type": "string", - "description": "The type of update." - }, - "error": { - "$ref": "#/components/schemas/UpdateResourceError" - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the update was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the update was last updated." - } + "type": "ACCOUNT_DISABLED", + "code": 11001, + "sub_type": "ACCOUNT_INVALID_DETAILS", + "message": "Account was disabled due to invalid information reported by the financial institution." } }, - "AccountAttribute": { - "type": "object", - "description": "An attribute record for an account containing financial data attributes.", - "required": [ - "id", - "account_id", - "status", - "attributes", - "error", - "created_at", - "updated_at" + "Metadata": { + "type": [ + "object", + "null" ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the account attribute.", - "pattern": "^acc_attr_\\w+$", - "example": "acc_attr_eTJMbnCjw34yQ" - }, - "account_id": { - "type": "string", - "description": "The account this attribute belongs to.", - "pattern": "^acc_\\w+$" - }, - "status": { - "type": "string", - "description": "Current status of the attribute request.", - "enum": [ - "completed", - "pending", - "failed" - ] - }, - "attributes": { - "type": "object", - "description": "Financial data attributes for the account.", - "additionalProperties": true - }, - "error": { - "$ref": "#/components/schemas/ResourceError" - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the attribute was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the attribute was last updated." - } - } + "additionalProperties": true, + "description": "Arbitrary key-value metadata attached to the resource." }, - "AccountSensitiveResourceError": { + "AccountVerificationSessionResourceError": { "type": [ "object", "null" ], - "description": "Error details when retrieving account sensitive data fails.", + "description": "Error details when an account verification session fails.", "required": [ "type", "code", @@ -13369,46 +10112,51 @@ "properties": { "type": { "type": "string", - "description": "The category of sensitive data error.", + "description": "The category of verification session error.", "enum": [ - "ACCOUNT_SENSITIVE_FAILED" + "ACCOUNT_VERIFICATION_SESSION_FAILED" ] }, "code": { "type": "integer", - "description": "Numeric error code (17XXX range).", + "description": "Numeric error code (16XXX range).", "enum": [ - 17001 + 16001, + 16002, + 16003, + 16004 ] }, "sub_type": { "type": "string", - "description": "Specific sensitive data error classification.", + "description": "Specific verification session error classification.", "enum": [ - "ACCOUNT_SENSITIVE_FAILED_VERIFICATION_REQUIRED" + "VERIFICATION_TYPE_NOT_SUPPORTED", + "INVALID_DETAILS", + "VERIFICATION_SESSION_ATTEMPT_LIMIT_REACHED", + "MICRO_DEPOSITS_FAILED" ] }, "message": { "type": "string", "description": "Human-readable error description." } - }, - "example": { - "type": "ACCOUNT_SENSITIVE_FAILED", - "code": 17001, - "sub_type": "ACCOUNT_SENSITIVE_FAILED_VERIFICATION_REQUIRED", - "message": "Account sensitive failed due to missing required verification." + }, + "example": { + "type": "ACCOUNT_VERIFICATION_SESSION_FAILED", + "code": 16001, + "sub_type": "VERIFICATION_TYPE_NOT_SUPPORTED", + "message": "The verification type provided is not supported for the merchant." } }, - "AccountSensitive": { + "AccountVerificationSession": { "type": "object", - "description": "Sensitive data for an account.", + "description": "A verification session for an account.", "required": [ "id", "account_id", "status", "type", - "fields", "error", "created_at", "updated_at" @@ -13416,1389 +10164,1401 @@ "properties": { "id": { "type": "string", - "description": "Unique identifier for the sensitive record.", - "pattern": "^astv_\\w+$", - "example": "astv_aTJMbnCjw34yQ" + "description": "Unique identifier for the verification session.", + "pattern": "^avf_\\w+$", + "example": "avf_aTJMbnCjw34yQ" }, "account_id": { "type": "string", - "description": "The account this sensitive data belongs to.", + "description": "The account this verification session belongs to.", "pattern": "^acc_\\w+$" }, "status": { "type": "string", - "description": "Current status of the sensitive data request.", + "description": "Current status of the verification session.", "enum": [ - "completed", "pending", + "in_progress", + "verified", "failed" ] }, "type": { "type": "string", - "description": "The type of sensitive data." - }, - "fields": { - "type": "array", - "description": "List of sensitive data fields retrieved.", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Name of the field." - }, - "value": { - "type": "string", - "description": "Value of the field." - } - } - } + "description": "The type of verification.", + "enum": [ + "micro_deposits", + "mx", + "plaid", + "teller", + "auto_verify", + "trusted_provisioner", + "pre_auth", + "standard", + "issuer", + "instant", + "network", + "three_ds" + ] }, "error": { - "$ref": "#/components/schemas/AccountSensitiveResourceError" + "$ref": "#/components/schemas/AccountVerificationSessionResourceError" }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the sensitive record was created." + "description": "Timestamp when the verification session was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the sensitive record was last updated." + "description": "Timestamp when the verification session was last updated." } } }, - "AccountBase": { - "type": "object", - "description": "An Account represents a financial account (ACH, liability, clearing, or debit card) associated with an Entity. Accounts are polymorphic on the `type` field.\n", + "BalanceResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when a balance sync fails.", "required": [ - "id", - "holder_id", "type", - "status", - "consent_status", - "capabilities", - "available_capabilities", - "products", - "restricted_products", - "subscriptions", - "available_subscriptions", - "restricted_subscriptions", - "created_at", - "updated_at" + "code", + "sub_type", + "message" ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the account.", - "pattern": "^acc_\\w+$", - "example": "acc_b9q2XVAnNFbp3" - }, - "holder_id": { - "type": "string", - "description": "The entity ID that owns this account.", - "pattern": "^ent_\\w+$", - "example": "ent_au22b1fbFJbp8" - }, - "type": { - "type": "string", - "description": "The type of account.", - "enum": [ - "ach", - "liability", - "clearing", - "debit_card" - ] - }, - "status": { - "type": "string", - "description": "Current status of the account.", - "enum": [ - "active", - "disabled", - "processing", - "pending_exchange", - "closed" - ] - }, - "consent_status": { - "type": "string", - "description": "Current consent status for data access on this account.", - "enum": [ - "pending", - "withdrawn", - "approved" - ] - }, - "ach": { - "$ref": "#/components/schemas/AccountACH" - }, - "liability": { - "$ref": "#/components/schemas/AccountLiability" - }, - "clearing": { - "$ref": "#/components/schemas/AccountClearing" - }, - "debit_card": { - "$ref": "#/components/schemas/AccountDebitCard" - }, - "capabilities": { - "type": "array", - "description": "Capabilities currently enabled for this account.", - "items": { - "$ref": "#/components/schemas/AccountCapability" - } - }, - "available_capabilities": { - "type": "array", - "description": "Capabilities available to be enabled for this account.", - "items": { - "$ref": "#/components/schemas/AccountCapability" - } - }, - "error": { - "$ref": "#/components/schemas/AccountResourceError" - }, - "metadata": { - "$ref": "#/components/schemas/Metadata" - }, - "products": { - "type": "array", - "description": "Products currently active for this account.", - "items": { - "type": "string" - } - }, - "restricted_products": { - "type": "array", - "description": "Products restricted from this account.", - "items": { - "type": "string" - } - }, - "subscriptions": { - "type": "array", - "description": "Subscriptions currently active for this account.", - "items": { - "type": "string" - } - }, - "available_subscriptions": { - "type": "array", - "description": "Subscriptions available to be enrolled for this account.", - "items": { - "type": "string" - } - }, - "restricted_subscriptions": { - "type": "array", - "description": "Subscriptions restricted from this account.", - "items": { - "type": "string" - } - }, - "latest_verification_session": { - "description": "The latest verification session ID. This field is expandable. When expanded, returns the full AccountVerificationSession object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^avf_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountVerificationSession" - } - ] - }, - "balance": { - "description": "The latest balance ID. This field is expandable. When expanded, returns the full AccountBalance object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^bal_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountBalance" - } - ] - }, - "payoff": { - "description": "The latest payoff ID. This field is expandable. When expanded, returns the full AccountPayoff object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^pyf_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountPayoff" - } - ] - }, - "payment_instrument": { - "description": "The latest payment instrument ID. This field is expandable. When expanded, returns the full AccountPaymentInstrument object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^pmt_inst_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountPaymentInstrument" - } + "properties": { + "type": { + "type": "string", + "description": "The category of balance error.", + "enum": [ + "BALANCE_FAILED" ] }, - "card_brand": { - "description": "The latest card brand ID. This field is expandable. When expanded, returns the full AccountCardBrand object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^cbrd_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountCardBrand" - } + "code": { + "type": "integer", + "description": "Numeric error code (20XXX range).", + "enum": [ + 20001 ] }, - "update": { - "description": "The latest update ID. This field is expandable. When expanded, returns the full AccountUpdate object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^upd_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountUpdate" - } + "sub_type": { + "type": "string", + "description": "Specific balance error classification.", + "enum": [ + "BALANCE_TEMPORARILY_UNAVAILABLE" ] }, - "attribute": { - "description": "The latest attribute ID. This field is expandable. When expanded, returns the full AccountAttribute object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^acc_attr_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountAttribute" - } - ] + "message": { + "type": "string", + "description": "Human-readable error description." + } + }, + "example": { + "type": "BALANCE_FAILED", + "code": 20001, + "sub_type": "BALANCE_TEMPORARILY_UNAVAILABLE", + "message": "Balance is temporarily unavailable for this account." + } + }, + "AccountBalance": { + "type": "object", + "description": "A balance record for an account.", + "required": [ + "id", + "account_id", + "status", + "amount", + "error", + "created_at", + "updated_at" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the balance.", + "pattern": "^bal_\\w+$", + "example": "bal_dKe9ehC3hEBYy" }, - "sensitive": { - "description": "The latest sensitive ID. This field is expandable. When expanded, returns the full AccountSensitive object.\n", - "oneOf": [ - { - "type": "string", - "pattern": "^astv_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/AccountSensitive" - } + "account_id": { + "type": "string", + "description": "The account this balance belongs to.", + "pattern": "^acc_\\w+$" + }, + "status": { + "type": "string", + "description": "Current status of the balance request.", + "enum": [ + "completed", + "pending", + "failed" ] }, + "amount": { + "type": [ + "number", + "null" + ], + "description": "The balance amount in cents." + }, + "error": { + "$ref": "#/components/schemas/BalanceResourceError" + }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the account was created." + "description": "Timestamp when the balance was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the account was last updated." + "description": "Timestamp when the balance was last updated." } } }, - "AccountACHResource": { - "allOf": [ - { - "$ref": "#/components/schemas/AccountBase" + "PayoffResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when a payoff sync fails.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], + "properties": { + "type": { + "type": "string", + "description": "The category of payoff error.", + "enum": [ + "PAYOFF_FAILED" + ] }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ach" - ] - } - } - } - ] - }, - "AccountLiabilityResource": { - "allOf": [ - { - "$ref": "#/components/schemas/AccountBase" + "code": { + "type": "integer", + "description": "Numeric error code (18XXX range).", + "enum": [ + 18001 + ] }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "liability" - ] - } - } + "sub_type": { + "type": "string", + "description": "Specific payoff error classification.", + "enum": [ + "PAYOFF_TEMPORARILY_UNAVAILABLE" + ] + }, + "message": { + "type": "string", + "description": "Human-readable error description." } - ] + }, + "example": { + "type": "PAYOFF_FAILED", + "code": 18001, + "sub_type": "PAYOFF_TEMPORARILY_UNAVAILABLE", + "message": "Payoff is temporarily unavailable for this account." + } }, - "AccountClearingResource": { - "allOf": [ - { - "$ref": "#/components/schemas/AccountBase" + "AccountPayoff": { + "type": "object", + "description": "A payoff record for an account.", + "required": [ + "id", + "account_id", + "status", + "amount", + "term", + "per_diem_amount", + "error", + "created_at", + "updated_at" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the payoff.", + "pattern": "^pyf_\\w+$", + "example": "pyf_dKe9ehC3hEBYy" + }, + "account_id": { + "type": "string", + "description": "The account this payoff belongs to.", + "pattern": "^acc_\\w+$" + }, + "status": { + "type": "string", + "description": "Current status of the payoff request.", + "enum": [ + "completed", + "pending", + "failed" + ] + }, + "amount": { + "type": [ + "number", + "null" + ], + "description": "The payoff amount in cents." + }, + "term": { + "type": [ + "number", + "null" + ], + "description": "Number of days the payoff amount is valid." + }, + "per_diem_amount": { + "type": [ + "number", + "null" + ], + "description": "Per diem interest amount in cents." }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "clearing" - ] - } - } - } - ] - }, - "AccountDebitCardResource": { - "allOf": [ - { - "$ref": "#/components/schemas/AccountBase" + "error": { + "$ref": "#/components/schemas/PayoffResourceError" }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "debit_card" - ] - } - } + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the payoff was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the payoff was last updated." } - ] + } }, - "Account": { - "description": "An Account represents a financial account (ACH, liability, clearing, or debit card) associated with an Entity.\n", - "oneOf": [ - { - "$ref": "#/components/schemas/AccountACHResource" + "ResourceError": { + "type": [ + "object", + "null" + ], + "required": [ + "type", + "code", + "message" + ], + "properties": { + "type": { + "type": "string" }, - { - "$ref": "#/components/schemas/AccountLiabilityResource" + "code": { + "type": "integer" }, - { - "$ref": "#/components/schemas/AccountClearingResource" + "sub_type": { + "type": [ + "string", + "null" + ] }, - { - "$ref": "#/components/schemas/AccountDebitCardResource" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "ach": "#/components/schemas/AccountACHResource", - "liability": "#/components/schemas/AccountLiabilityResource", - "clearing": "#/components/schemas/AccountClearingResource", - "debit_card": "#/components/schemas/AccountDebitCardResource" + "message": { + "type": "string" } } }, - "AccountListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "AccountPaymentInstrument": { + "type": "object", + "description": "A payment instrument for an account.", + "required": [ + "id", + "account_id", + "status", + "type", + "error", + "created_at", + "updated_at" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the payment instrument.", + "pattern": "^pmt_inst_\\w+$", + "example": "pmt_inst_aTJMbnCjw34yQ" }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Account" - } - } - } + "account_id": { + "type": "string", + "description": "The account this payment instrument belongs to.", + "pattern": "^acc_\\w+$" + }, + "status": { + "type": "string", + "description": "Current status of the payment instrument.", + "enum": [ + "active", + "pending", + "failed", + "closed" + ] + }, + "type": { + "type": "string", + "description": "The type of payment instrument." + }, + "error": { + "$ref": "#/components/schemas/ResourceError" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the payment instrument was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the payment instrument was last updated." } - ] + } }, - "CreateAchAccountRequest": { + "AccountCardBrand": { "type": "object", - "description": "Create an ACH account.", + "description": "Card brand information for an account.", "required": [ - "holder_id", - "ach" + "id", + "account_id", + "network", + "issuer", + "last4", + "status", + "error", + "created_at", + "updated_at" ], "properties": { - "type": { + "id": { + "type": "string", + "description": "Unique identifier for the card brand.", + "pattern": "^cbrd_\\w+$", + "example": "cbrd_aTJMbnCjw34yQ" + }, + "account_id": { "type": "string", + "description": "The account this card brand belongs to.", + "pattern": "^acc_\\w+$" + }, + "network": { + "type": [ + "string", + "null" + ], + "description": "The card network.", "enum": [ - "ach" + "visa", + "mastercard", + "amex", + "discover", + null ] }, - "holder_id": { - "type": "string", - "description": "The entity ID that will own this account.", - "pattern": "^ent_\\w+$" + "issuer": { + "type": [ + "string", + "null" + ], + "description": "The card issuer." }, - "ach": { - "type": "object", - "description": "ACH account details.", - "required": [ - "routing", - "number", - "type" + "last4": { + "type": [ + "string", + "null" ], - "properties": { - "routing": { - "type": "string", - "description": "The ACH routing number.", - "pattern": "^\\d{9}$" - }, - "number": { - "type": "string", - "description": "The ACH account number.", - "pattern": "^\\d+$" - }, - "type": { - "type": "string", - "description": "The type of ACH account.", - "enum": [ - "checking", - "savings" - ] - } - } + "description": "Last 4 digits of the card number." }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "status": { + "type": "string", + "description": "Current status of the card brand request.", + "enum": [ + "completed", + "pending", + "failed" + ] + }, + "error": { + "$ref": "#/components/schemas/ResourceError" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the card brand was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the card brand was last updated." } } }, - "CreateLiabilityAccountRequest": { - "type": "object", - "description": "Create a liability account.", + "UpdateResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when an account update fails.", "required": [ - "holder_id", - "liability" + "type", + "code", + "sub_type", + "message" ], "properties": { "type": { "type": "string", + "description": "The category of update error.", "enum": [ - "liability" + "UPDATE_FAILED" ] }, - "holder_id": { - "type": "string", - "description": "The entity ID that will own this account.", - "pattern": "^ent_\\w+$" + "code": { + "type": "integer", + "description": "Numeric error code (21XXX range).", + "enum": [ + 21001 + ] }, - "liability": { - "type": "object", - "description": "Liability account details.", - "properties": { - "mch_id": { - "type": "string", - "description": "The merchant ID for the liability.", - "pattern": "^mch_\\w+$" - }, - "account_number": { - "type": "string", - "description": "Full account number for the liability." - }, - "number": { - "type": "string", - "description": "Alternative liability account number field." - }, - "credit_card": { - "type": "object", - "description": "Optional supplemental card details for liability accounts.", - "required": [ - "exp_month", - "exp_year" - ], - "properties": { - "billing_zip_code": { - "type": "string" - }, - "cvv": { - "type": "string" - }, - "exp_month": { - "type": "string", - "pattern": "^(0[1-9]|1[0-2])$" - }, - "exp_year": { - "type": "integer" - } - } - } - }, - "oneOf": [ - { - "required": [ - "account_number" - ] - }, - { - "required": [ - "number" - ] - } + "sub_type": { + "type": "string", + "description": "Specific update error classification.", + "enum": [ + "UPDATE_TEMPORARILY_UNAVAILABLE" ] }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "message": { + "type": "string", + "description": "Human-readable error description." } + }, + "example": { + "type": "UPDATE_FAILED", + "code": 21001, + "sub_type": "UPDATE_TEMPORARILY_UNAVAILABLE", + "message": "Update is temporarily unavailable for this account." } }, - "CreateClearingAccountRequest": { + "AccountUpdate": { "type": "object", - "description": "Create a clearing account.", + "description": "An update record for an account.", "required": [ - "holder_id", - "clearing" + "id", + "account_id", + "status", + "type", + "error", + "created_at", + "updated_at" ], "properties": { - "type": { + "id": { + "type": "string", + "description": "Unique identifier for the update.", + "pattern": "^upd_\\w+$", + "example": "upd_aTJMbnCjw34yQ" + }, + "account_id": { + "type": "string", + "description": "The account this update belongs to.", + "pattern": "^acc_\\w+$" + }, + "status": { "type": "string", + "description": "Current status of the update.", "enum": [ - "clearing" + "completed", + "pending", + "failed" ] }, - "holder_id": { + "type": { "type": "string", - "description": "The entity ID that will own this account.", - "pattern": "^ent_\\w+$" + "description": "The type of update." }, - "clearing": { - "type": "object", - "description": "Clearing account details.", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "description": "The type of clearing account to create.", - "enum": [ - "single_use", - "multi_use" - ] - } - } + "error": { + "$ref": "#/components/schemas/UpdateResourceError" }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the update was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the update was last updated." } } }, - "CreateDebitCardAccountRequest": { + "AccountAttribute": { "type": "object", - "description": "Create a debit card account.", + "description": "An attribute record for an account containing financial data attributes.", "required": [ - "holder_id", - "debit_card" + "id", + "account_id", + "status", + "attributes", + "error", + "created_at", + "updated_at" ], "properties": { - "type": { + "id": { "type": "string", - "enum": [ - "debit_card" - ] + "description": "Unique identifier for the account attribute.", + "pattern": "^acc_attr_\\w+$", + "example": "acc_attr_eTJMbnCjw34yQ" }, - "holder_id": { + "account_id": { "type": "string", - "description": "The entity ID that will own this account.", - "pattern": "^ent_\\w+$" - }, - "debit_card": { - "type": "object", - "description": "Debit card details.", - "required": [ - "number", - "exp_month", - "exp_year" - ], - "properties": { - "number": { - "type": "string", - "minLength": 15, - "maxLength": 16 - }, - "exp_month": { - "type": "string", - "pattern": "^(0[1-9]|1[0-2])$" - }, - "exp_year": { - "type": "integer" - }, - "cvv": { - "type": "string" - }, - "billing_zip_code": { - "type": "string" - } - } - }, - "metadata": { - "$ref": "#/components/schemas/Metadata" - } - } - }, - "AccountCreateRequest": { - "description": "Request body for creating an account.\n`type` is recommended and used for discrimination in generated clients, but\nthe API can also infer the account type from the nested object you provide.\n", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateAchAccountRequest" - }, - { - "$ref": "#/components/schemas/CreateLiabilityAccountRequest" - }, - { - "$ref": "#/components/schemas/CreateClearingAccountRequest" + "description": "The account this attribute belongs to.", + "pattern": "^acc_\\w+$" }, - { - "$ref": "#/components/schemas/CreateDebitCardAccountRequest" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "ach": "#/components/schemas/CreateAchAccountRequest", - "liability": "#/components/schemas/CreateLiabilityAccountRequest", - "clearing": "#/components/schemas/CreateClearingAccountRequest", - "debit_card": "#/components/schemas/CreateDebitCardAccountRequest" - } - } - }, - "AccountResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" + "status": { + "type": "string", + "description": "Current status of the attribute request.", + "enum": [ + "completed", + "pending", + "failed" + ] }, - { + "attributes": { "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Account" - } - } + "description": "Financial data attributes for the account.", + "additionalProperties": true + }, + "error": { + "$ref": "#/components/schemas/ResourceError" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the attribute was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the attribute was last updated." } - ] + } }, - "AccountUpdateRequest": { - "type": "object", - "description": "Request body for updating an account.", + "AccountSensitiveResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when retrieving account sensitive data fails.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], "properties": { - "metadata": { - "$ref": "#/components/schemas/Metadata" + "type": { + "type": "string", + "description": "The category of sensitive data error.", + "enum": [ + "ACCOUNT_SENSITIVE_FAILED" + ] }, - "liability": { - "type": "object", - "description": "Liability-specific update fields. Use either mortgage or credit_card (mutually exclusive).", - "properties": { - "mortgage": { - "type": "object", - "description": "Mortgage address update.", - "properties": { - "address_street": { - "type": "string" - }, - "address_city": { - "type": "string" - }, - "address_state": { - "type": "string" - }, - "address_zip": { - "type": "string" - } - } - }, - "credit_card": { - "type": "object", - "description": "Credit card update. Provide either number alone, or expiration + CVV.", - "properties": { - "number": { - "type": "string", - "description": "The credit card number." - }, - "expiration_month": { - "type": "string", - "description": "Card expiration month." - }, - "expiration_year": { - "type": "string", - "description": "Card expiration year." - }, - "cvv": { - "type": "string", - "description": "Card CVV." - } - } - } - } + "code": { + "type": "integer", + "description": "Numeric error code (17XXX range).", + "enum": [ + 17001 + ] + }, + "sub_type": { + "type": "string", + "description": "Specific sensitive data error classification.", + "enum": [ + "ACCOUNT_SENSITIVE_FAILED_VERIFICATION_REQUIRED" + ] + }, + "message": { + "type": "string", + "description": "Human-readable error description." } + }, + "example": { + "type": "ACCOUNT_SENSITIVE_FAILED", + "code": 17001, + "sub_type": "ACCOUNT_SENSITIVE_FAILED_VERIFICATION_REQUIRED", + "message": "Account sensitive failed due to missing required verification." } }, - "AccountAttributeListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "AccountSensitive": { + "type": "object", + "description": "Sensitive data for an account.", + "required": [ + "id", + "account_id", + "status", + "type", + "fields", + "error", + "created_at", + "updated_at" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the sensitive record.", + "pattern": "^astv_\\w+$", + "example": "astv_aTJMbnCjw34yQ" }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AccountAttribute" - } - } - } - } - ] - }, - "AccountAttributeResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" + "account_id": { + "type": "string", + "description": "The account this sensitive data belongs to.", + "pattern": "^acc_\\w+$" }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/AccountAttribute" - } - } - } - ] - }, - "AccountBalanceListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "status": { + "type": "string", + "description": "Current status of the sensitive data request.", + "enum": [ + "completed", + "pending", + "failed" + ] }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AccountBalance" + "type": { + "type": "string", + "description": "The type of sensitive data." + }, + "fields": { + "type": "array", + "description": "List of sensitive data fields retrieved.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the field." + }, + "value": { + "type": "string", + "description": "Value of the field." } } } - } - ] - }, - "AccountBalanceResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/AccountBalance" - } - } - } - ] - }, - "AccountCardBrandListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "error": { + "$ref": "#/components/schemas/AccountSensitiveResourceError" }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AccountCardBrand" - } - } - } - } - ] - }, - "AccountCardBrandResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the sensitive record was created." }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/AccountCardBrand" - } - } + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the sensitive record was last updated." } - ] + } }, - "AccountConsentUpdateRequest": { + "AccountBase": { "type": "object", - "description": "Request body for updating account consent.", + "description": "An Account represents a financial account (ACH, liability, clearing, or debit card) associated with an Entity. Accounts are polymorphic on the `type` field.\n", "required": [ - "type" + "id", + "holder_id", + "type", + "status", + "consent_status", + "capabilities", + "available_capabilities", + "products", + "restricted_products", + "subscriptions", + "available_subscriptions", + "restricted_subscriptions", + "created_at", + "updated_at" ], "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the account.", + "pattern": "^acc_\\w+$", + "example": "acc_b9q2XVAnNFbp3" + }, + "holder_id": { + "type": "string", + "description": "The entity ID that owns this account.", + "pattern": "^ent_\\w+$", + "example": "ent_au22b1fbFJbp8" + }, "type": { "type": "string", - "description": "The consent action to take.", + "description": "The type of account.", "enum": [ - "withdraw" + "ach", + "liability", + "clearing", + "debit_card" ] }, - "reason": { + "status": { "type": "string", - "description": "Optional reason for the consent action." - } - } - }, - "AccountPaymentInstrumentListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "description": "Current status of the account.", + "enum": [ + "active", + "disabled", + "processing", + "pending_exchange", + "closed" + ] }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AccountPaymentInstrument" - } - } + "consent_status": { + "type": "string", + "description": "Current consent status for data access on this account.", + "enum": [ + "pending", + "withdrawn", + "approved" + ] + }, + "ach": { + "$ref": "#/components/schemas/AccountACH" + }, + "liability": { + "$ref": "#/components/schemas/AccountLiability" + }, + "clearing": { + "$ref": "#/components/schemas/AccountClearing" + }, + "debit_card": { + "$ref": "#/components/schemas/AccountDebitCard" + }, + "capabilities": { + "type": "array", + "description": "Capabilities currently enabled for this account.", + "items": { + "$ref": "#/components/schemas/AccountCapability" } - } - ] - }, - "AccountPaymentInstrumentResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/AccountPaymentInstrument" - } + "available_capabilities": { + "type": "array", + "description": "Capabilities available to be enabled for this account.", + "items": { + "$ref": "#/components/schemas/AccountCapability" } - } - ] - }, - "AccountPayoffListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AccountPayoff" - } - } + "error": { + "$ref": "#/components/schemas/AccountResourceError" + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" + }, + "products": { + "type": "array", + "description": "Products currently active for this account.", + "items": { + "type": "string" } - } - ] - }, - "AccountPayoffResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" }, - { - "type": "object", - "properties": { - "data": { + "restricted_products": { + "type": "array", + "description": "Products restricted from this account.", + "items": { + "type": "string" + } + }, + "subscriptions": { + "type": "array", + "description": "Subscriptions currently active for this account.", + "items": { + "type": "string" + } + }, + "available_subscriptions": { + "type": "array", + "description": "Subscriptions available to be enrolled for this account.", + "items": { + "type": "string" + } + }, + "restricted_subscriptions": { + "type": "array", + "description": "Subscriptions restricted from this account.", + "items": { + "type": "string" + } + }, + "latest_verification_session": { + "description": "The latest verification session ID. This field is expandable. When expanded, returns the full AccountVerificationSession object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^avf_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/AccountVerificationSession" + } + ] + }, + "balance": { + "description": "The latest balance ID. This field is expandable. When expanded, returns the full AccountBalance object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^bal_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/AccountBalance" + } + ] + }, + "payoff": { + "description": "The latest payoff ID. This field is expandable. When expanded, returns the full AccountPayoff object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^pyf_\\w+$" + }, + { + "type": "null" + }, + { "$ref": "#/components/schemas/AccountPayoff" } - } - } - ] - }, - "ProductResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when a product execution fails.", - "required": [ - "type", - "code", - "sub_type", - "message" - ], - "properties": { - "type": { - "type": "string", - "description": "The category of product error.", - "enum": [ - "PRODUCT_EXECUTION_FAILED" ] }, - "code": { - "type": "integer", - "description": "Numeric error code (24XXX range).", - "enum": [ - 24001 + "payment_instrument": { + "description": "The latest payment instrument ID. This field is expandable. When expanded, returns the full AccountPaymentInstrument object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^pmt_inst_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/AccountPaymentInstrument" + } + ] + }, + "card_brand": { + "description": "The latest card brand ID. This field is expandable. When expanded, returns the full AccountCardBrand object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^cbrd_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/AccountCardBrand" + } ] }, - "sub_type": { - "type": "string", - "description": "Specific product error classification.", - "enum": [ - "PRODUCT_EXECUTION_FAILED" + "update": { + "description": "The latest update ID. This field is expandable. When expanded, returns the full AccountUpdate object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^upd_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/AccountUpdate" + } ] }, - "message": { - "type": "string", - "description": "Human-readable error description." - } - }, - "example": { - "type": "PRODUCT_EXECUTION_FAILED", - "code": 24001, - "sub_type": "PRODUCT_EXECUTION_FAILED", - "message": "Product execution failed." - } - }, - "AccountProduct": { - "type": "object", - "description": "A product associated with an account.", - "required": [ - "id", - "name", - "status", - "status_error", - "capabilities", - "reportable", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the product.", - "pattern": "^prd_\\w+$", - "example": "prd_aTJMbnCjw34yQ" - }, - "name": { - "type": "string", - "description": "Name of the product." - }, - "status": { - "type": "string", - "description": "Current status of the product.", - "enum": [ - "available", - "unavailable", - "restricted" + "attribute": { + "description": "The latest attribute ID. This field is expandable. When expanded, returns the full AccountAttribute object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^acc_attr_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/AccountAttribute" + } ] }, - "status_error": { - "$ref": "#/components/schemas/ProductResourceError" - }, - "capabilities": { - "type": "array", - "description": "Capabilities provided by this product.", - "items": { - "type": "string" - } - }, - "reportable": { - "type": "boolean", - "description": "Whether this product generates reportable data." + "sensitive": { + "description": "The latest sensitive ID. This field is expandable. When expanded, returns the full AccountSensitive object.\n", + "oneOf": [ + { + "type": "string", + "pattern": "^astv_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/AccountSensitive" + } + ] }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the product was created." + "description": "Timestamp when the account was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the product was last updated." + "description": "Timestamp when the account was last updated." } } }, - "AccountProductListResponse": { + "AccountACHResource": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/AccountBase" }, { "type": "object", "properties": { - "data": { - "type": "object", - "description": "Object keyed by product name.", - "additionalProperties": { - "$ref": "#/components/schemas/AccountProduct" - } + "type": { + "type": "string", + "enum": [ + "ach" + ] } } } ] }, - "AccountProductResponse": { + "AccountLiabilityResource": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/AccountBase" }, { "type": "object", "properties": { - "data": { - "$ref": "#/components/schemas/AccountProduct" + "type": { + "type": "string", + "enum": [ + "liability" + ] } } } ] }, - "AccountSensitiveListResponse": { + "AccountClearingResource": { "allOf": [ { - "$ref": "#/components/schemas/ListEnvelope" + "$ref": "#/components/schemas/AccountBase" }, { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AccountSensitive" - } + "type": { + "type": "string", + "enum": [ + "clearing" + ] } } } ] }, - "AccountSensitiveCreateRequest": { - "type": "object", - "description": "Request body for creating an account sensitive data request.", - "required": [ - "expand" - ], - "properties": { - "expand": { - "type": "array", - "description": "List of sensitive field names to retrieve.", - "items": { - "type": "string" - } - } - } - }, - "AccountSensitiveResponse": { + "AccountDebitCardResource": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/AccountBase" }, { "type": "object", "properties": { - "data": { - "$ref": "#/components/schemas/AccountSensitive" + "type": { + "type": "string", + "enum": [ + "debit_card" + ] } } } ] }, - "AccountSubscription": { - "type": "object", - "description": "A subscription for an account.", - "required": [ - "id", - "name", - "status", - "latest_request_id", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the subscription.", - "pattern": "^sub_\\w+$", - "example": "sub_aTJMbnCjw34yQ" - }, - "name": { - "type": "string", - "description": "Name of the subscription." - }, - "status": { - "type": "string", - "description": "Current status of the subscription.", - "enum": [ - "active", - "inactive" - ] + "Account": { + "description": "An Account represents a financial account (ACH, liability, clearing, or debit card) associated with an Entity.\n", + "oneOf": [ + { + "$ref": "#/components/schemas/AccountACHResource" }, - "latest_request_id": { - "type": [ - "string", - "null" - ], - "description": "ID of the latest request triggered by this subscription." + { + "$ref": "#/components/schemas/AccountLiabilityResource" }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the subscription was created." + { + "$ref": "#/components/schemas/AccountClearingResource" }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the subscription was last updated." + { + "$ref": "#/components/schemas/AccountDebitCardResource" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "ach": "#/components/schemas/AccountACHResource", + "liability": "#/components/schemas/AccountLiabilityResource", + "clearing": "#/components/schemas/AccountClearingResource", + "debit_card": "#/components/schemas/AccountDebitCardResource" } } }, - "AccountSubscriptionListResponse": { + "AccountListResponse": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/ListEnvelope" }, { "type": "object", "properties": { "data": { - "type": "object", - "description": "Object keyed by subscription name.", - "additionalProperties": { - "$ref": "#/components/schemas/AccountSubscription" + "type": "array", + "items": { + "$ref": "#/components/schemas/Account" } } } } ] }, - "AccountSubscriptionCreateRequest": { + "CreateAchAccountRequest": { "type": "object", - "description": "Request body for creating an account subscription.", + "description": "Create an ACH account.", "required": [ - "enroll" + "holder_id", + "ach" ], "properties": { - "enroll": { - "type": "array", - "description": "Array of subscription names to enroll.", - "items": { - "type": "string" - }, - "minItems": 1 - } - } - }, - "AccountSubscriptionResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" + "type": { + "type": "string", + "enum": [ + "ach" + ] }, - { + "holder_id": { + "type": "string", + "description": "The entity ID that will own this account.", + "pattern": "^ent_\\w+$" + }, + "ach": { "type": "object", + "description": "ACH account details.", + "required": [ + "routing", + "number", + "type" + ], "properties": { - "data": { - "$ref": "#/components/schemas/AccountSubscription" + "routing": { + "type": "string", + "description": "The ACH routing number.", + "pattern": "^\\d{9}$" + }, + "number": { + "type": "string", + "description": "The ACH account number.", + "pattern": "^\\d+$" + }, + "type": { + "type": "string", + "description": "The type of ACH account.", + "enum": [ + "checking", + "savings" + ] } } + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" } - ] + } }, - "AccountTransaction": { + "CreateLiabilityAccountRequest": { "type": "object", - "description": "A transaction for an account.", + "description": "Create a liability account.", "required": [ - "id", - "account_id", - "merchant", - "amount", - "auth_amount", - "currency_code", - "transaction_amount", - "transaction_auth_amount", - "transaction_currency_code", - "status", - "descriptor", - "transacted_at", - "posted_at", - "voided_at", - "original_txn_id", - "created_at", - "updated_at" + "holder_id", + "liability" ], "properties": { - "id": { + "type": { "type": "string", - "pattern": "^txn_\\w+$", - "description": "Unique identifier for the transaction.", - "example": "txn_aTJMbnCjw34yQ" + "enum": [ + "liability" + ] }, - "account_id": { + "holder_id": { "type": "string", - "description": "The ID of the account this transaction belongs to." + "description": "The entity ID that will own this account.", + "pattern": "^ent_\\w+$" }, - "merchant": { - "type": [ - "object", - "null" - ], - "description": "Merchant information for this transaction.", + "liability": { + "type": "object", + "description": "Liability account details.", "properties": { - "name": { - "type": [ - "string", - "null" - ], - "description": "The merchant name." + "mch_id": { + "type": "string", + "description": "The merchant ID for the liability.", + "pattern": "^mch_\\w+$" }, - "logo": { - "type": [ - "string", - "null" + "account_number": { + "type": "string", + "description": "Full account number for the liability." + }, + "number": { + "type": "string", + "description": "Alternative liability account number field." + }, + "credit_card": { + "type": "object", + "description": "Optional supplemental card details for liability accounts.", + "required": [ + "exp_month", + "exp_year" ], - "description": "URL of the merchant logo." + "properties": { + "billing_zip_code": { + "type": "string" + }, + "cvv": { + "type": "string" + }, + "exp_month": { + "type": "string", + "pattern": "^(0[1-9]|1[0-2])$" + }, + "exp_year": { + "type": "integer" + } + } } - } - }, - "amount": { - "type": [ - "number", - "null" - ], - "description": "The transaction amount in cents." - }, - "auth_amount": { - "type": [ - "number", - "null" - ], - "description": "The authorized amount in cents." - }, - "currency_code": { - "type": [ - "string", - "null" - ], - "description": "The ISO 4217 currency code." + }, + "oneOf": [ + { + "required": [ + "account_number" + ] + }, + { + "required": [ + "number" + ] + } + ] }, - "transaction_amount": { - "type": [ - "number", - "null" - ], - "description": "The transaction amount in the transaction currency." + "metadata": { + "$ref": "#/components/schemas/Metadata" + } + } + }, + "CreateClearingAccountRequest": { + "type": "object", + "description": "Create a clearing account.", + "required": [ + "holder_id", + "clearing" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "clearing" + ] }, - "transaction_auth_amount": { - "type": [ - "number", - "null" - ], - "description": "The authorized amount in the transaction currency." + "holder_id": { + "type": "string", + "description": "The entity ID that will own this account.", + "pattern": "^ent_\\w+$" }, - "transaction_currency_code": { - "type": [ - "string", - "null" + "clearing": { + "type": "object", + "description": "Clearing account details.", + "required": [ + "type" ], - "description": "The ISO 4217 currency code of the transaction currency." + "properties": { + "type": { + "type": "string", + "description": "The type of clearing account to create.", + "enum": [ + "single_use", + "multi_use" + ] + } + } }, - "status": { + "metadata": { + "$ref": "#/components/schemas/Metadata" + } + } + }, + "CreateDebitCardAccountRequest": { + "type": "object", + "description": "Create a debit card account.", + "required": [ + "holder_id", + "debit_card" + ], + "properties": { + "type": { "type": "string", - "description": "The current status of the transaction.", "enum": [ - "pending", - "posted", - "voided" + "debit_card" ] }, - "descriptor": { - "type": [ - "string", - "null" - ], - "description": "The transaction descriptor." + "holder_id": { + "type": "string", + "description": "The entity ID that will own this account.", + "pattern": "^ent_\\w+$" }, - "transacted_at": { - "type": [ - "string", - "null" + "debit_card": { + "type": "object", + "description": "Debit card details.", + "required": [ + "number", + "exp_month", + "exp_year" ], - "format": "date-time", - "description": "Timestamp when the transaction occurred." + "properties": { + "number": { + "type": "string", + "minLength": 15, + "maxLength": 16 + }, + "exp_month": { + "type": "string", + "pattern": "^(0[1-9]|1[0-2])$" + }, + "exp_year": { + "type": "integer" + }, + "cvv": { + "type": "string" + }, + "billing_zip_code": { + "type": "string" + } + } }, - "posted_at": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Timestamp when the transaction was posted." + "metadata": { + "$ref": "#/components/schemas/Metadata" + } + } + }, + "AccountCreateRequest": { + "description": "Request body for creating an account.\n`type` is recommended and used for discrimination in generated clients, but\nthe API can also infer the account type from the nested object you provide.\n", + "oneOf": [ + { + "$ref": "#/components/schemas/CreateAchAccountRequest" }, - "voided_at": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Timestamp when the transaction was voided." + { + "$ref": "#/components/schemas/CreateLiabilityAccountRequest" }, - "original_txn_id": { - "type": [ - "string", - "null" - ], - "description": "The ID of the original transaction if this is a related transaction." + { + "$ref": "#/components/schemas/CreateClearingAccountRequest" }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the transaction record was created." + { + "$ref": "#/components/schemas/CreateDebitCardAccountRequest" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "ach": "#/components/schemas/CreateAchAccountRequest", + "liability": "#/components/schemas/CreateLiabilityAccountRequest", + "clearing": "#/components/schemas/CreateClearingAccountRequest", + "debit_card": "#/components/schemas/CreateDebitCardAccountRequest" + } + } + }, + "AccountResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the transaction record was last updated." + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Account" + } + } + } + ] + }, + "AccountUpdateRequest": { + "type": "object", + "description": "Request body for updating an account.", + "properties": { + "metadata": { + "$ref": "#/components/schemas/Metadata" + }, + "liability": { + "type": "object", + "description": "Liability-specific update fields. Use either mortgage or credit_card (mutually exclusive).", + "properties": { + "mortgage": { + "type": "object", + "description": "Mortgage address update.", + "properties": { + "address_street": { + "type": "string" + }, + "address_city": { + "type": "string" + }, + "address_state": { + "type": "string" + }, + "address_zip": { + "type": "string" + } + } + }, + "credit_card": { + "type": "object", + "description": "Credit card update. Provide either number alone, or expiration + CVV.", + "properties": { + "number": { + "type": "string", + "description": "The credit card number." + }, + "expiration_month": { + "type": "string", + "description": "Card expiration month." + }, + "expiration_year": { + "type": "string", + "description": "Card expiration year." + }, + "cvv": { + "type": "string", + "description": "Card CVV." + } + } + } + } } } }, - "AccountTransactionListResponse": { + "AccountAttributeListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -14809,14 +11569,14 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/AccountTransaction" + "$ref": "#/components/schemas/AccountAttribute" } } } } ] }, - "AccountTransactionResponse": { + "AccountAttributeResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -14825,13 +11585,13 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/AccountTransaction" + "$ref": "#/components/schemas/AccountAttribute" } } } ] }, - "AccountUpdateListResponse": { + "AccountBalanceListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -14842,14 +11602,14 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/AccountUpdate" + "$ref": "#/components/schemas/AccountBalance" } } } } ] }, - "AccountUpdateResponse": { + "AccountBalanceResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -14858,13 +11618,13 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/AccountUpdate" + "$ref": "#/components/schemas/AccountBalance" } } } ] }, - "AccountVerificationSessionListResponse": { + "AccountCardBrandListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -14875,41 +11635,67 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/AccountVerificationSession" + "$ref": "#/components/schemas/AccountCardBrand" } } } } ] }, - "AccountVerificationSessionCreateRequest": { + "AccountCardBrandResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AccountCardBrand" + } + } + } + ] + }, + "AccountConsentUpdateRequest": { "type": "object", - "description": "Request body for creating an account verification session.", + "description": "Request body for updating account consent.", "required": [ "type" ], "properties": { "type": { "type": "string", - "description": "The type of verification to perform.", + "description": "The consent action to take.", "enum": [ - "micro_deposits", - "mx", - "plaid", - "teller", - "auto_verify", - "trusted_provisioner", - "pre_auth", - "standard", - "issuer", - "instant", - "network", - "three_ds" + "withdraw" ] + }, + "reason": { + "type": "string", + "description": "Optional reason for the consent action." + } + } + }, + "AccountPaymentInstrumentListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountPaymentInstrument" + } + } + } } - } + ] }, - "AccountVerificationSessionResponse": { + "AccountPaymentInstrumentResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -14918,114 +11704,31 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/AccountVerificationSession" + "$ref": "#/components/schemas/AccountPaymentInstrument" } } } ] }, - "AccountVerificationSessionUpdateRequest": { - "type": "object", - "description": "Request body for updating an account verification session.", - "properties": { - "micro_deposits": { - "type": "object", - "description": "Micro deposit verification amounts.", - "properties": { - "amounts": { - "type": "array", - "description": "The micro deposit amounts to verify.", - "items": { - "type": "integer" - } - } - } - } - } - }, - "AccountVerificationSessionAmountsResponse": { + "AccountPayoffListResponse": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/ListEnvelope" }, { "type": "object", "properties": { "data": { - "type": "object", - "properties": { - "amounts": { - "type": "array", - "description": "The micro deposit amounts.", - "items": { - "type": "integer" - } - } + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountPayoff" } } } } ] }, - "CardProduct": { - "type": "object", - "description": "A Card Product represents a specific card program from a network and issuer.", - "required": [ - "id", - "network", - "issuer", - "name", - "type", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the card product.", - "example": "cprd_mJ3Kvx6G7hBR4" - }, - "network": { - "type": [ - "string", - "null" - ], - "description": "Card network (e.g., Visa, Mastercard)." - }, - "issuer": { - "type": [ - "string", - "null" - ], - "description": "Card issuing institution." - }, - "name": { - "type": [ - "string", - "null" - ], - "description": "Display name of the card product." - }, - "type": { - "type": [ - "string", - "null" - ], - "description": "The card product type." - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the card product was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the card product was last updated." - } - } - }, - "CardProductResponse": { + "AccountPayoffResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -15034,1139 +11737,980 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/CardProduct" + "$ref": "#/components/schemas/AccountPayoff" } } } ] }, - "EntityIndividual": { + "ProductResourceError": { "type": [ "object", "null" ], + "description": "Error details when a product execution fails.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], "properties": { - "first_name": { - "type": [ - "string", - "null" - ], - "description": "First name of the individual." - }, - "last_name": { - "type": [ - "string", - "null" - ], - "description": "Last name of the individual." - }, - "phone": { - "type": [ - "string", - "null" - ], - "description": "Phone number of the individual.", - "pattern": "^\\+\\d{10,15}$", - "example": "+15121231111" - }, - "email": { - "type": [ - "string", - "null" - ], - "description": "Email address of the individual.", - "format": "email" - }, - "dob": { - "type": [ - "string", - "null" - ], - "format": "date", - "description": "Date of birth of the individual (YYYY-MM-DD)." - }, - "ssn": { - "type": [ - "string", - "null" - ], - "description": "Social security number (masked)." - }, - "ssn_4": { - "type": [ - "string", - "null" - ], - "description": "Last 4 digits of SSN (masked)." - } - } - }, - "Address": { - "type": "object", - "description": "Postal mailing address.", - "properties": { - "line1": { - "type": [ - "string", - "null" - ], - "description": "Primary street address line.", - "example": "123 Main St" - }, - "line2": { - "type": [ - "string", - "null" - ], - "description": "Secondary address line such as apartment or suite.", - "example": "Apt 4B" + "type": { + "type": "string", + "description": "The category of product error.", + "enum": [ + "PRODUCT_EXECUTION_FAILED" + ] }, - "city": { - "type": [ - "string", - "null" - ], - "description": "City or locality.", - "example": "Austin" + "code": { + "type": "integer", + "description": "Numeric error code (24XXX range).", + "enum": [ + 24001 + ] }, - "state": { - "type": [ - "string", - "null" - ], - "description": "Two-letter state or province code when available.", - "example": "TX" + "sub_type": { + "type": "string", + "description": "Specific product error classification.", + "enum": [ + "PRODUCT_EXECUTION_FAILED" + ] }, - "zip": { - "type": [ - "string", - "null" - ], - "description": "Postal code.", - "example": "78701" + "message": { + "type": "string", + "description": "Human-readable error description." } }, "example": { - "line1": "123 Main St", - "line2": "Apt 4B", - "city": "Austin", - "state": "TX", - "zip": "78701" + "type": "PRODUCT_EXECUTION_FAILED", + "code": 24001, + "sub_type": "PRODUCT_EXECUTION_FAILED", + "message": "Product execution failed." } }, - "EntityCorporationOwner": { + "AccountProduct": { "type": "object", + "description": "A product associated with an account.", + "required": [ + "id", + "name", + "status", + "status_error", + "capabilities", + "reportable", + "created_at", + "updated_at" + ], "properties": { - "first_name": { - "type": "string", - "description": "First name of the owner." - }, - "last_name": { + "id": { "type": "string", - "description": "Last name of the owner." + "description": "Unique identifier for the product.", + "pattern": "^prd_\\w+$", + "example": "prd_aTJMbnCjw34yQ" }, - "phone": { + "name": { "type": "string", - "description": "Phone number of the owner.", - "pattern": "^\\+\\d{10,15}$" + "description": "Name of the product." }, - "email": { + "status": { "type": "string", - "description": "Email address of the owner.", - "format": "email" + "description": "Current status of the product.", + "enum": [ + "available", + "unavailable", + "restricted" + ] }, - "dob": { + "status_error": { + "$ref": "#/components/schemas/ProductResourceError" + }, + "capabilities": { + "type": "array", + "description": "Capabilities provided by this product.", + "items": { + "type": "string" + } + }, + "reportable": { + "type": "boolean", + "description": "Whether this product generates reportable data." + }, + "created_at": { "type": "string", - "format": "date", - "description": "Date of birth of the owner (YYYY-MM-DD)." + "format": "date-time", + "description": "Timestamp when the product was created." }, - "address": { - "$ref": "#/components/schemas/Address" + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the product was last updated." } } }, - "EntityCorporation": { - "type": [ - "object", - "null" - ], - "properties": { - "name": { - "type": [ - "string", - "null" - ], - "description": "Legal name of the corporation." + "AccountProductListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "dba": { - "type": [ - "string", - "null" - ], - "description": "Doing business as name." + { + "type": "object", + "properties": { + "data": { + "type": "object", + "description": "Object keyed by product name.", + "additionalProperties": { + "$ref": "#/components/schemas/AccountProduct" + } + } + } + } + ] + }, + "AccountProductResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "ein": { - "type": [ - "string", - "null" - ], - "description": "Employer Identification Number." + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AccountProduct" + } + } + } + ] + }, + "AccountSensitiveListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" }, - "owners": { - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/components/schemas/EntityCorporationOwner" - }, - "description": "List of beneficial owners." + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountSensitive" + } + } + } } - } + ] }, - "EntityReceiveOnly": { - "type": [ - "object", - "null" + "AccountSensitiveCreateRequest": { + "type": "object", + "description": "Request body for creating an account sensitive data request.", + "required": [ + "expand" ], "properties": { - "name": { - "type": "string", - "description": "Name of the receive-only entity." - }, - "phone": { - "type": [ - "string", - "null" - ], - "description": "Phone number of the receive-only entity.", - "pattern": "^\\+\\d{10,15}$" - }, - "email": { - "type": [ - "string", - "null" - ], - "description": "Email address of the receive-only entity.", - "format": "email" + "expand": { + "type": "array", + "description": "List of sensitive field names to retrieve.", + "items": { + "type": "string" + } } } }, - "EntityCapability": { - "type": "string", - "enum": [ - "payments:receive", - "payments:send", - "data:retrieve", - "data:sync" + "AccountSensitiveResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AccountSensitive" + } + } + } ] }, - "VerificationSessionResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when an entity verification session fails.", + "AccountSubscription": { + "type": "object", + "description": "A subscription for an account.", "required": [ - "type", - "code", - "sub_type", - "message" + "id", + "name", + "status", + "latest_request_id", + "created_at", + "updated_at" ], "properties": { - "type": { + "id": { "type": "string", - "description": "The category of verification session error.", - "enum": [ - "VERIFICATION_SESSION_FAILED" - ] + "description": "Unique identifier for the subscription.", + "pattern": "^sub_\\w+$", + "example": "sub_aTJMbnCjw34yQ" }, - "code": { - "type": "integer", - "description": "Numeric error code (19XXX range).", - "enum": [ - 19001, - 19002, - 19003, - 19004 - ] + "name": { + "type": "string", + "description": "Name of the subscription." }, - "sub_type": { + "status": { "type": "string", - "description": "Specific verification session error classification.", + "description": "Current status of the subscription.", "enum": [ - "VERIFICATION_SESSION_EXPIRED", - "VERIFICATION_SESSION_INCORRECT_SMS_CODE", - "VERIFICATION_SESSION_FAILED_SNA", - "VERIFICATION_SESSION_FAILED_INVALID_ANSWER" + "active", + "inactive" ] }, - "message": { + "latest_request_id": { + "type": [ + "string", + "null" + ], + "description": "ID of the latest request triggered by this subscription." + }, + "created_at": { "type": "string", - "description": "Human-readable error description." + "format": "date-time", + "description": "Timestamp when the subscription was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the subscription was last updated." + } + } + }, + "AccountSubscriptionListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "object", + "description": "Object keyed by subscription name.", + "additionalProperties": { + "$ref": "#/components/schemas/AccountSubscription" + } + } + } + } + ] + }, + "AccountSubscriptionCreateRequest": { + "type": "object", + "description": "Request body for creating an account subscription.", + "required": [ + "enroll" + ], + "properties": { + "enroll": { + "type": "array", + "description": "Array of subscription names to enroll.", + "items": { + "type": "string" + }, + "minItems": 1 } - }, - "example": { - "type": "VERIFICATION_SESSION_FAILED", - "code": 19001, - "sub_type": "VERIFICATION_SESSION_EXPIRED", - "message": "The verification session has expired. Please re-initiate the verification process." } }, - "EntityVerificationSession": { + "AccountSubscriptionResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AccountSubscription" + } + } + } + ] + }, + "AccountTransaction": { "type": "object", + "description": "A transaction for an account.", "required": [ "id", - "entity_id", + "account_id", + "merchant", + "amount", + "auth_amount", + "currency_code", + "transaction_amount", + "transaction_auth_amount", + "transaction_currency_code", "status", - "type", - "method", - "error", + "descriptor", + "transacted_at", + "posted_at", + "voided_at", + "original_txn_id", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the verification session.", - "example": "evf_TRUJMEr8kn3Nh" - }, - "entity_id": { - "type": "string", - "description": "The ID of the entity this verification session belongs to.", - "example": "ent_au22b1fbFJbp8" + "pattern": "^txn_\\w+$", + "description": "Unique identifier for the transaction.", + "example": "txn_aTJMbnCjw34yQ" }, - "status": { + "account_id": { "type": "string", - "description": "Current status of the verification session.", - "enum": [ - "pending", - "in_progress", - "verified", - "failed" - ] + "description": "The ID of the account this transaction belongs to." }, - "type": { - "type": "string", - "description": "The type of verification being performed.", - "enum": [ - "identity", - "phone" - ] + "merchant": { + "type": [ + "object", + "null" + ], + "description": "Merchant information for this transaction.", + "properties": { + "name": { + "type": [ + "string", + "null" + ], + "description": "The merchant name." + }, + "logo": { + "type": [ + "string", + "null" + ], + "description": "URL of the merchant logo." + } + } }, - "method": { + "amount": { "type": [ - "string", + "number", "null" ], - "description": "The verification method used.", - "enum": [ - "sms", - "sna", - "byo_sms", - "byo_kyc", - "kba", - "element", - "opal", - "method_verified", - null - ] + "description": "The transaction amount in cents." }, - "error": { + "auth_amount": { "type": [ - "object", + "number", "null" ], - "description": "Error details if the resource encountered an error.", - "allOf": [ - { - "$ref": "#/components/schemas/VerificationSessionResourceError" - } - ] + "description": "The authorized amount in cents." }, - "expired_at": { + "currency_code": { "type": [ "string", "null" ], - "format": "date-time", - "description": "Timestamp when the verification session expired." + "description": "The ISO 4217 currency code." }, - "sms": { + "transaction_amount": { "type": [ - "object", + "number", "null" ], - "description": "SMS verification details. Present when method is sms." + "description": "The transaction amount in the transaction currency." }, - "sna": { + "transaction_auth_amount": { "type": [ - "object", + "number", "null" ], - "description": "SNA verification details. Present when method is sna." + "description": "The authorized amount in the transaction currency." }, - "byo_sms": { + "transaction_currency_code": { "type": [ - "object", + "string", "null" ], - "description": "BYO SMS verification details. Present when method is byo_sms." + "description": "The ISO 4217 currency code of the transaction currency." }, - "byo_kyc": { + "status": { + "type": "string", + "description": "The current status of the transaction.", + "enum": [ + "pending", + "posted", + "voided" + ] + }, + "descriptor": { "type": [ - "object", + "string", "null" ], - "description": "BYO KYC verification details. Present when method is byo_kyc." + "description": "The transaction descriptor." }, - "kba": { + "transacted_at": { "type": [ - "object", + "string", "null" ], - "description": "KBA verification details. Present when method is kba." + "format": "date-time", + "description": "Timestamp when the transaction occurred." }, - "element": { + "posted_at": { "type": [ - "object", + "string", "null" ], - "description": "Element verification details. Present when method is element." + "format": "date-time", + "description": "Timestamp when the transaction was posted." }, - "opal": { + "voided_at": { "type": [ - "object", + "string", "null" ], - "description": "Opal verification details. Present when method is opal." + "format": "date-time", + "description": "Timestamp when the transaction was voided." + }, + "original_txn_id": { + "type": [ + "string", + "null" + ], + "description": "The ID of the original transaction if this is a related transaction." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the verification session was created." + "description": "Timestamp when the transaction record was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the verification session was last updated." + "description": "Timestamp when the transaction record was last updated." } } }, - "EntityVerificationIdentity": { - "type": "object", - "properties": { - "verified": { - "type": "boolean", - "description": "Whether the identity has been verified." - }, - "matched": { - "type": "boolean", - "description": "Whether the identity information matched." + "AccountTransactionListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" }, - "latest_verification_session": { - "description": "ID of the latest identity verification session. Expandable via `identity_latest_verification_session`.", - "oneOf": [ - { - "type": "string", - "pattern": "^evf_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/EntityVerificationSession" + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountTransaction" + } } - ] + } + } + ] + }, + "AccountTransactionResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "methods": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Available identity verification methods." + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AccountTransaction" + } + } } - } + ] }, - "EntityVerificationPhone": { - "type": "object", - "properties": { - "verified": { - "type": "boolean", - "description": "Whether the phone has been verified." + "AccountUpdateListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" }, - "latest_verification_session": { - "description": "ID of the latest phone verification session. Expandable via `phone_latest_verification_session`.", - "oneOf": [ - { - "type": "string", - "pattern": "^evf_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/EntityVerificationSession" + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountUpdate" + } } - ] + } + } + ] + }, + "AccountUpdateResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "methods": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Available phone verification methods." + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AccountUpdate" + } + } } - } + ] }, - "EntityVerification": { - "type": [ - "object", - "null" - ], - "properties": { - "identity": { - "$ref": "#/components/schemas/EntityVerificationIdentity" + "AccountVerificationSessionListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" }, - "phone": { - "$ref": "#/components/schemas/EntityVerificationPhone" + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountVerificationSession" + } + } + } } - } + ] }, - "EntityResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when an entity is disabled or verification fails.", + "AccountVerificationSessionCreateRequest": { + "type": "object", + "description": "Request body for creating an account verification session.", "required": [ - "type", - "code", - "sub_type", - "message" + "type" ], "properties": { "type": { "type": "string", - "description": "The category of entity error.", - "enum": [ - "ENTITY_DISABLED", - "ENTITY_VERIFICATION_FAILED" - ] - }, - "code": { - "type": "integer", - "description": "Numeric error code (12XXX range).", - "enum": [ - 12001, - 12002, - 12003, - 12004, - 12005, - 12006, - 12007 - ] - }, - "sub_type": { - "type": "string", - "description": "Specific entity error classification.", + "description": "The type of verification to perform.", "enum": [ - "ENTITY_UNAUTHORIZED_PAYMENT", - "ENTITY_INVALID_DETAILS", - "ENTITY_SSN_MISMATCH", - "ENTITY_CONSENT_WITHDRAWN", - "ENTITY_PENDING_KYC_REVIEW", - "ENTITY_CANNOT_PERFORM_ACTION" + "micro_deposits", + "mx", + "plaid", + "teller", + "auto_verify", + "trusted_provisioner", + "pre_auth", + "standard", + "issuer", + "instant", + "network", + "three_ds" ] - }, - "message": { - "type": "string", - "description": "Human-readable error description." } - }, - "example": { - "type": "ENTITY_DISABLED", - "code": 12002, - "sub_type": "ENTITY_INVALID_DETAILS", - "message": "Entity was disabled due to invalid information." } }, - "ConnectResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when a connect session fails.", - "required": [ - "type", - "code", - "sub_type", - "message" - ], - "properties": { - "type": { - "type": "string", - "description": "The category of connect error.", - "enum": [ - "CONNECT_FAILED" - ] - }, - "code": { - "type": "integer", - "description": "Numeric error code (26XXX range).", - "enum": [ - 26001, - 26002 - ] - }, - "sub_type": { - "type": "string", - "description": "Specific connect error classification.", - "enum": [ - "CONNECT_FAILED_THIN_CREDIT_FILE", - "CONNECT_FAILED_CREDIT_FREEZE" - ] + "AccountVerificationSessionResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "message": { - "type": "string", - "description": "Human-readable error description." + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/AccountVerificationSession" + } + } + } + ] + }, + "AccountVerificationSessionUpdateRequest": { + "type": "object", + "description": "Request body for updating an account verification session.", + "properties": { + "micro_deposits": { + "type": "object", + "description": "Micro deposit verification amounts.", + "properties": { + "amounts": { + "type": "array", + "description": "The micro deposit amounts to verify.", + "items": { + "type": "integer" + } + } + } } - }, - "example": { - "type": "CONNECT_FAILED", - "code": 26001, - "sub_type": "CONNECT_FAILED_THIN_CREDIT_FILE", - "message": "Entity has a thin credit file." } }, - "EntityConnect": { + "AccountVerificationSessionAmountsResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "amounts": { + "type": "array", + "description": "The micro deposit amounts.", + "items": { + "type": "integer" + } + } + } + } + } + } + ] + }, + "CardProduct": { "type": "object", + "description": "A Card Product represents a specific card program from a network and issuer.", "required": [ "id", - "entity_id", - "status", - "accounts", - "requested_products", - "requested_subscriptions", - "error", + "network", + "issuer", + "name", + "type", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the connect session.", - "example": "cxn_iENwGBMDnr7sJ" - }, - "entity_id": { - "type": "string", - "description": "The ID of the entity this connect session belongs to.", - "example": "ent_au22b1fbFJbp8" - }, - "status": { - "type": "string", - "description": "Status of the connect session.", - "enum": [ - "completed", - "in_progress", - "pending", - "failed" - ] + "description": "Unique identifier for the card product.", + "example": "cprd_mJ3Kvx6G7hBR4" }, - "accounts": { - "type": "array", - "items": { - "oneOf": [ - { - "type": "string", - "pattern": "^acc_\\w+$" - }, - { - "$ref": "#/components/schemas/Account" - } - ] - }, - "description": "Expandable. List of account IDs connected through this session." + "network": { + "type": [ + "string", + "null" + ], + "description": "Card network (e.g., Visa, Mastercard)." }, - "requested_products": { + "issuer": { "type": [ - "array", + "string", "null" ], - "description": "Products requested for this connect session.", - "items": { - "type": "string" - } + "description": "Card issuing institution." }, - "requested_subscriptions": { + "name": { "type": [ - "array", + "string", "null" ], - "description": "Subscriptions requested for this connect session.", - "items": { - "type": "string" - } + "description": "Display name of the card product." }, - "error": { + "type": { "type": [ - "object", + "string", "null" ], - "description": "Error details if the resource encountered an error.", - "allOf": [ - { - "$ref": "#/components/schemas/ConnectResourceError" - } - ] + "description": "The card product type." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the connect session was created." + "description": "Timestamp when the card product was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the connect session was last updated." + "description": "Timestamp when the card product was last updated." } } }, - "EntityCreditScoreFactor": { - "type": "object", + "CardProductResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/CardProduct" + } + } + } + ] + }, + "EntityIndividual": { + "type": [ + "object", + "null" + ], "properties": { - "code": { + "first_name": { "type": [ "string", "null" ], - "description": "Factor code." + "description": "First name of the individual." }, - "description": { + "last_name": { "type": [ "string", "null" ], - "description": "Human-readable description of the factor." - } - } - }, - "CreditScoreResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when a credit score pull fails.", - "required": [ - "type", - "code", - "sub_type", - "message" - ], - "properties": { - "type": { - "type": "string", - "description": "The category of credit score error.", - "enum": [ - "CREDIT_SCORE_FAILED" - ] - }, - "code": { - "type": "integer", - "description": "Numeric error code (23XXX range).", - "enum": [ - 23001 - ] - }, - "sub_type": { - "type": "string", - "description": "Specific credit score error classification.", - "enum": [ - "CREDIT_SCORE_FAILED_TEMPORARILY_UNAVAILABLE" - ] - }, - "message": { - "type": "string", - "description": "Human-readable error description." - } - }, - "example": { - "type": "CREDIT_SCORE_FAILED", - "code": 23001, - "sub_type": "CREDIT_SCORE_FAILED_TEMPORARILY_UNAVAILABLE", - "message": "Credit Score is temporarily unavailable for this entity." - } - }, - "EntityCreditScore": { - "type": "object", - "required": [ - "id", - "entity_id", - "status", - "scores", - "error", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the credit score.", - "example": "crs_pn4ca33GRnrJm" - }, - "entity_id": { - "type": "string", - "description": "The ID of the entity this credit score belongs to.", - "example": "ent_au22b1fbFJbp8" - }, - "status": { - "type": "string", - "description": "Status of the credit score retrieval.", - "enum": [ - "completed", - "in_progress", - "pending", - "failed" - ] + "description": "Last name of the individual." }, - "scores": { + "phone": { "type": [ - "array", + "string", "null" ], - "description": "Array of credit score results.", - "items": { - "type": "object", - "required": [ - "score", - "source", - "model", - "factors", - "created_at" - ], - "properties": { - "score": { - "type": [ - "integer", - "null" - ], - "description": "The credit score value." - }, - "source": { - "type": [ - "string", - "null" - ], - "description": "The source of the credit score." - }, - "model": { - "type": [ - "string", - "null" - ], - "description": "The scoring model used." - }, - "factors": { - "type": [ - "array", - "null" - ], - "description": "Factors affecting the credit score.", - "items": { - "$ref": "#/components/schemas/EntityCreditScoreFactor" - } - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when this score was generated." - } - } - } + "description": "Phone number of the individual.", + "pattern": "^\\+\\d{10,15}$", + "example": "+15121231111" }, - "error": { + "email": { "type": [ - "object", + "string", "null" ], - "description": "Error details if the resource encountered an error.", - "allOf": [ - { - "$ref": "#/components/schemas/CreditScoreResourceError" - } - ] + "description": "Email address of the individual.", + "format": "email" }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the credit score was created." + "dob": { + "type": [ + "string", + "null" + ], + "format": "date", + "description": "Date of birth of the individual (YYYY-MM-DD)." }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the credit score was last updated." + "ssn": { + "type": [ + "string", + "null" + ], + "description": "Social security number (masked)." + }, + "ssn_4": { + "type": [ + "string", + "null" + ], + "description": "Last 4 digits of SSN (masked)." } } }, - "EntityAttributeData": { - "type": [ - "object", - "null" - ], - "description": "Financial health and credit attribute data.", + "Address": { + "type": "object", + "description": "Postal mailing address.", "properties": { - "credit_health_credit_card_usage": { + "line1": { "type": [ - "object", + "string", "null" ], - "description": "Credit card usage health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "description": "Primary street address line.", + "example": "123 Main St" }, - "credit_health_derogatory_marks": { + "line2": { "type": [ - "object", + "string", "null" ], - "description": "Derogatory marks health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "description": "Secondary address line such as apartment or suite.", + "example": "Apt 4B" }, - "credit_health_hard_inquiries": { + "city": { "type": [ - "object", + "string", "null" ], - "description": "Hard inquiries health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "description": "City or locality.", + "example": "Austin" }, - "credit_health_soft_inquiries": { + "state": { "type": [ - "object", + "string", "null" ], - "description": "Soft inquiries health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "description": "Two-letter state or province code when available.", + "example": "TX" }, - "credit_health_total_accounts": { + "zip": { "type": [ - "object", + "string", "null" ], - "description": "Total accounts health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "description": "Postal code.", + "example": "78701" + } + }, + "example": { + "line1": "123 Main St", + "line2": "Apt 4B", + "city": "Austin", + "state": "TX", + "zip": "78701" + } + }, + "EntityCorporationOwner": { + "type": "object", + "properties": { + "first_name": { + "type": "string", + "description": "First name of the owner." }, - "credit_health_open_accounts": { + "last_name": { + "type": "string", + "description": "Last name of the owner." + }, + "phone": { + "type": "string", + "description": "Phone number of the owner.", + "pattern": "^\\+\\d{10,15}$" + }, + "email": { + "type": "string", + "description": "Email address of the owner.", + "format": "email" + }, + "dob": { + "type": "string", + "format": "date", + "description": "Date of birth of the owner (YYYY-MM-DD)." + }, + "address": { + "$ref": "#/components/schemas/Address" + } + } + }, + "EntityCorporation": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { "type": [ - "object", + "string", "null" - ], - "description": "Open accounts health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + ], + "description": "Legal name of the corporation." }, - "credit_health_credit_age": { + "dba": { "type": [ - "object", + "string", "null" ], - "description": "Credit age health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "description": "Doing business as name." }, - "credit_health_payment_history": { + "ein": { "type": [ - "object", + "string", "null" ], - "description": "Payment history health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "description": "Employer Identification Number." }, - "credit_health_entity_delinquent": { + "owners": { "type": [ - "object", + "array", "null" ], - "description": "Entity delinquency health indicator.", - "properties": { - "value": { - "type": [ - "number", - "null" - ], - "description": "The attribute value." - }, - "rating": { - "type": "string", - "description": "Rating for this attribute." - }, - "metadata": { - "type": [ - "object", - "null" - ], - "description": "Additional metadata." - } - } + "items": { + "$ref": "#/components/schemas/EntityCorporationOwner" + }, + "description": "List of beneficial owners." } } }, - "EntityAttribute": { + "EntityReceiveOnly": { + "type": [ + "object", + "null" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the receive-only entity." + }, + "phone": { + "type": [ + "string", + "null" + ], + "description": "Phone number of the receive-only entity.", + "pattern": "^\\+\\d{10,15}$" + }, + "email": { + "type": [ + "string", + "null" + ], + "description": "Email address of the receive-only entity.", + "format": "email" + } + } + }, + "EntityCapability": { + "type": "string", + "enum": [ + "payments:receive", + "payments:send", + "data:retrieve", + "data:sync" + ] + }, + "VerificationSessionResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when an entity verification session fails.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], + "properties": { + "type": { + "type": "string", + "description": "The category of verification session error.", + "enum": [ + "VERIFICATION_SESSION_FAILED" + ] + }, + "code": { + "type": "integer", + "description": "Numeric error code (19XXX range).", + "enum": [ + 19001, + 19002, + 19003, + 19004 + ] + }, + "sub_type": { + "type": "string", + "description": "Specific verification session error classification.", + "enum": [ + "VERIFICATION_SESSION_EXPIRED", + "VERIFICATION_SESSION_INCORRECT_SMS_CODE", + "VERIFICATION_SESSION_FAILED_SNA", + "VERIFICATION_SESSION_FAILED_INVALID_ANSWER" + ] + }, + "message": { + "type": "string", + "description": "Human-readable error description." + } + }, + "example": { + "type": "VERIFICATION_SESSION_FAILED", + "code": 19001, + "sub_type": "VERIFICATION_SESSION_EXPIRED", + "message": "The verification session has expired. Please re-initiate the verification process." + } + }, + "EntityVerificationSession": { "type": "object", "required": [ "id", "entity_id", "status", - "attributes", + "type", + "method", "error", "created_at", "updated_at" @@ -16174,827 +12718,904 @@ "properties": { "id": { "type": "string", - "description": "Unique identifier for the entity attribute.", - "example": "attr_QwMjMDEwMTY1" + "description": "Unique identifier for the verification session.", + "example": "evf_TRUJMEr8kn3Nh" }, "entity_id": { "type": "string", - "description": "The ID of the entity this attribute belongs to.", + "description": "The ID of the entity this verification session belongs to.", "example": "ent_au22b1fbFJbp8" }, "status": { "type": "string", - "description": "Status of the attribute retrieval.", + "description": "Current status of the verification session.", "enum": [ - "completed", - "in_progress", "pending", + "in_progress", + "verified", "failed" ] }, - "attributes": { - "$ref": "#/components/schemas/EntityAttributeData" + "type": { + "type": "string", + "description": "The type of verification being performed.", + "enum": [ + "identity", + "phone" + ] + }, + "method": { + "type": [ + "string", + "null" + ], + "description": "The verification method used.", + "enum": [ + "sms", + "sna", + "byo_sms", + "byo_kyc", + "kba", + "element", + "opal", + "method_verified", + null + ] + }, + "error": { + "type": [ + "object", + "null" + ], + "description": "Error details if the resource encountered an error.", + "allOf": [ + { + "$ref": "#/components/schemas/VerificationSessionResourceError" + } + ] + }, + "expired_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "Timestamp when the verification session expired." + }, + "sms": { + "type": [ + "object", + "null" + ], + "description": "SMS verification details. Present when method is sms." + }, + "sna": { + "type": [ + "object", + "null" + ], + "description": "SNA verification details. Present when method is sna." + }, + "byo_sms": { + "type": [ + "object", + "null" + ], + "description": "BYO SMS verification details. Present when method is byo_sms." + }, + "byo_kyc": { + "type": [ + "object", + "null" + ], + "description": "BYO KYC verification details. Present when method is byo_kyc." }, - "error": { + "kba": { "type": [ "object", "null" ], - "description": "Error details if the resource encountered an error.", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceError" - } - ] + "description": "KBA verification details. Present when method is kba." + }, + "element": { + "type": [ + "object", + "null" + ], + "description": "Element verification details. Present when method is element." + }, + "opal": { + "type": [ + "object", + "null" + ], + "description": "Opal verification details. Present when method is opal." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the attribute was created." + "description": "Timestamp when the verification session was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the attribute was last updated." + "description": "Timestamp when the verification session was last updated." } } }, - "EntityVehicle": { + "EntityVerificationIdentity": { + "type": "object", + "properties": { + "verified": { + "type": "boolean", + "description": "Whether the identity has been verified." + }, + "matched": { + "type": "boolean", + "description": "Whether the identity information matched." + }, + "latest_verification_session": { + "description": "ID of the latest identity verification session. Expandable via `identity_latest_verification_session`.", + "oneOf": [ + { + "type": "string", + "pattern": "^evf_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/EntityVerificationSession" + } + ] + }, + "methods": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Available identity verification methods." + } + } + }, + "EntityVerificationPhone": { "type": "object", + "properties": { + "verified": { + "type": "boolean", + "description": "Whether the phone has been verified." + }, + "latest_verification_session": { + "description": "ID of the latest phone verification session. Expandable via `phone_latest_verification_session`.", + "oneOf": [ + { + "type": "string", + "pattern": "^evf_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/EntityVerificationSession" + } + ] + }, + "methods": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Available phone verification methods." + } + } + }, + "EntityVerification": { + "type": [ + "object", + "null" + ], + "properties": { + "identity": { + "$ref": "#/components/schemas/EntityVerificationIdentity" + }, + "phone": { + "$ref": "#/components/schemas/EntityVerificationPhone" + } + } + }, + "EntityResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when an entity is disabled or verification fails.", "required": [ - "id", - "entity_id", - "status", - "vehicles", - "error", - "created_at", - "updated_at" + "type", + "code", + "sub_type", + "message" ], "properties": { - "id": { + "type": { "type": "string", - "description": "Unique identifier for the vehicle record.", - "example": "vhl_JMDEwMTY1Qw4c" + "description": "The category of entity error.", + "enum": [ + "ENTITY_DISABLED", + "ENTITY_VERIFICATION_FAILED" + ] }, - "entity_id": { - "type": "string", - "description": "The ID of the entity this vehicle belongs to.", - "example": "ent_au22b1fbFJbp8" + "code": { + "type": "integer", + "description": "Numeric error code (12XXX range).", + "enum": [ + 12001, + 12002, + 12003, + 12004, + 12005, + 12006, + 12007 + ] }, - "status": { + "sub_type": { "type": "string", - "description": "Status of the vehicle data retrieval.", + "description": "Specific entity error classification.", "enum": [ - "completed", - "in_progress", - "pending", - "failed" + "ENTITY_UNAUTHORIZED_PAYMENT", + "ENTITY_INVALID_DETAILS", + "ENTITY_SSN_MISMATCH", + "ENTITY_CONSENT_WITHDRAWN", + "ENTITY_PENDING_KYC_REVIEW", + "ENTITY_CANNOT_PERFORM_ACTION" ] }, - "vehicles": { - "type": [ - "array", - "null" - ], - "description": "Array of vehicles associated with this entity.", - "items": { - "type": "object", - "properties": { - "vin": { - "type": [ - "string", - "null" - ], - "description": "Vehicle identification number." - }, - "year": { - "type": [ - "string", - "null" - ], - "description": "Model year." - }, - "make": { - "type": [ - "string", - "null" - ], - "description": "Vehicle make." - }, - "model": { - "type": [ - "string", - "null" - ], - "description": "Vehicle model." - }, - "series": { - "type": [ - "string", - "null" - ], - "description": "Vehicle series." - }, - "major_color": { - "type": [ - "string", - "null" - ], - "description": "Primary color of the vehicle." - }, - "style": { - "type": [ - "string", - "null" - ], - "description": "Body style." - } - } - } + "message": { + "type": "string", + "description": "Human-readable error description." + } + }, + "example": { + "type": "ENTITY_DISABLED", + "code": 12002, + "sub_type": "ENTITY_INVALID_DETAILS", + "message": "Entity was disabled due to invalid information." + } + }, + "ConnectResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when a connect session fails.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], + "properties": { + "type": { + "type": "string", + "description": "The category of connect error.", + "enum": [ + "CONNECT_FAILED" + ] }, - "error": { - "type": [ - "object", - "null" - ], - "description": "Error details if the resource encountered an error.", - "allOf": [ - { - "$ref": "#/components/schemas/ResourceError" - } + "code": { + "type": "integer", + "description": "Numeric error code (26XXX range).", + "enum": [ + 26001, + 26002 ] }, - "created_at": { + "sub_type": { "type": "string", - "format": "date-time", - "description": "Timestamp when the vehicle record was created." + "description": "Specific connect error classification.", + "enum": [ + "CONNECT_FAILED_THIN_CREDIT_FILE", + "CONNECT_FAILED_CREDIT_FREEZE" + ] }, - "updated_at": { + "message": { "type": "string", - "format": "date-time", - "description": "Timestamp when the vehicle record was last updated." + "description": "Human-readable error description." } + }, + "example": { + "type": "CONNECT_FAILED", + "code": 26001, + "sub_type": "CONNECT_FAILED_THIN_CREDIT_FILE", + "message": "Entity has a thin credit file." } }, - "EntityBase": { + "EntityConnect": { "type": "object", "required": [ "id", - "type", - "capabilities", - "available_capabilities", - "pending_capabilities", + "entity_id", "status", - "verification", - "products", - "restricted_products", - "subscriptions", - "available_subscriptions", - "restricted_subscriptions", + "accounts", + "requested_products", + "requested_subscriptions", + "error", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the entity.", - "pattern": "^ent_\\w+$", + "description": "Unique identifier for the connect session.", + "example": "cxn_iENwGBMDnr7sJ" + }, + "entity_id": { + "type": "string", + "description": "The ID of the entity this connect session belongs to.", "example": "ent_au22b1fbFJbp8" }, - "type": { + "status": { "type": "string", - "description": "The type of entity.", + "description": "Status of the connect session.", "enum": [ - "individual", - "c_corporation", - "s_corporation", - "llc", - "partnership", - "sole_proprietorship", - "receive_only", - "corporation" - ] - }, - "individual": { - "$ref": "#/components/schemas/EntityIndividual" - }, - "corporation": { - "$ref": "#/components/schemas/EntityCorporation" - }, - "receive_only": { - "$ref": "#/components/schemas/EntityReceiveOnly" - }, - "address": { - "type": [ - "object", - "null" - ], - "description": "The entity's address.", - "allOf": [ - { - "$ref": "#/components/schemas/Address" - } + "completed", + "in_progress", + "pending", + "failed" ] }, - "capabilities": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityCapability" - }, - "description": "Capabilities currently enabled for this entity." - }, - "available_capabilities": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityCapability" - }, - "description": "Capabilities available to be enabled for this entity." - }, - "pending_capabilities": { + "accounts": { "type": "array", "items": { - "$ref": "#/components/schemas/EntityCapability" + "oneOf": [ + { + "type": "string", + "pattern": "^acc_\\w+$" + }, + { + "$ref": "#/components/schemas/Account" + } + ] }, - "description": "Capabilities pending activation for this entity." - }, - "status": { - "type": "string", - "description": "Current status of the entity.", - "enum": [ - "active", - "incomplete", - "disabled" - ] - }, - "verification": { - "$ref": "#/components/schemas/EntityVerification" + "description": "Expandable. List of account IDs connected through this session." }, - "error": { + "requested_products": { "type": [ - "object", + "array", "null" ], - "description": "Error details if the entity encountered an error.", - "allOf": [ - { - "$ref": "#/components/schemas/EntityResourceError" - } - ] - }, - "metadata": { - "$ref": "#/components/schemas/Metadata" - }, - "products": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Products currently active for this entity." - }, - "restricted_products": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Products restricted for this entity." - }, - "subscriptions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Active subscriptions for this entity." - }, - "available_subscriptions": { - "type": "array", + "description": "Products requested for this connect session.", "items": { "type": "string" - }, - "description": "Subscriptions available for this entity." + } }, - "restricted_subscriptions": { - "type": "array", + "requested_subscriptions": { + "type": [ + "array", + "null" + ], + "description": "Subscriptions requested for this connect session.", "items": { "type": "string" - }, - "description": "Subscriptions restricted for this entity." - }, - "connect": { - "description": "Expandable. The entity connect session ID or expanded connect object.", - "example": "cxn_iENwGBMDnr7sJ", - "oneOf": [ - { - "type": "string", - "pattern": "^cxn_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/EntityConnect" - } - ] - }, - "credit_score": { - "description": "Expandable. The entity credit score ID or expanded credit score object.", - "example": "crs_pn4ca33GRnrJm", - "oneOf": [ - { - "type": "string", - "pattern": "^crs_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/EntityCreditScore" - } - ] - }, - "attribute": { - "description": "Expandable. The entity attribute ID or expanded attribute object.", - "example": "attr_QwMjMDEwMTY1", - "oneOf": [ - { - "type": "string", - "pattern": "^attr_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/EntityAttribute" - } - ] - }, - "vehicle": { - "description": "Expandable. The entity vehicle ID or expanded vehicle object.", - "example": "vhl_JMDEwMTY1Qw4c", - "oneOf": [ - { - "type": "string", - "pattern": "^vhl_\\w+$" - }, - { - "type": "null" - }, + } + }, + "error": { + "type": [ + "object", + "null" + ], + "description": "Error details if the resource encountered an error.", + "allOf": [ { - "$ref": "#/components/schemas/EntityVehicle" + "$ref": "#/components/schemas/ConnectResourceError" } ] }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the entity was created." + "description": "Timestamp when the connect session was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the entity was last updated." + "description": "Timestamp when the connect session was last updated." } } }, - "EntityIndividualResource": { - "allOf": [ - { - "$ref": "#/components/schemas/EntityBase" - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "individual" - ] - } - } - } - ] - }, - "EntityCorporationResource": { - "allOf": [ - { - "$ref": "#/components/schemas/EntityBase" + "EntityCreditScoreFactor": { + "type": "object", + "properties": { + "code": { + "type": [ + "string", + "null" + ], + "description": "Factor code." }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "corporation", - "c_corporation", - "s_corporation", - "llc", - "partnership", - "sole_proprietorship" - ] - } - } + "description": { + "type": [ + "string", + "null" + ], + "description": "Human-readable description of the factor." } - ] + } }, - "EntityReceiveOnlyResource": { - "allOf": [ - { - "$ref": "#/components/schemas/EntityBase" + "CreditScoreResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when a credit score pull fails.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], + "properties": { + "type": { + "type": "string", + "description": "The category of credit score error.", + "enum": [ + "CREDIT_SCORE_FAILED" + ] }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "receive_only" - ] - } - } - } - ] - }, - "Entity": { - "description": "An Entity represents an individual or business profile within Method.", - "oneOf": [ - { - "$ref": "#/components/schemas/EntityIndividualResource" + "code": { + "type": "integer", + "description": "Numeric error code (23XXX range).", + "enum": [ + 23001 + ] }, - { - "$ref": "#/components/schemas/EntityCorporationResource" + "sub_type": { + "type": "string", + "description": "Specific credit score error classification.", + "enum": [ + "CREDIT_SCORE_FAILED_TEMPORARILY_UNAVAILABLE" + ] }, - { - "$ref": "#/components/schemas/EntityReceiveOnlyResource" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "individual": "#/components/schemas/EntityIndividualResource", - "corporation": "#/components/schemas/EntityCorporationResource", - "c_corporation": "#/components/schemas/EntityCorporationResource", - "s_corporation": "#/components/schemas/EntityCorporationResource", - "llc": "#/components/schemas/EntityCorporationResource", - "partnership": "#/components/schemas/EntityCorporationResource", - "sole_proprietorship": "#/components/schemas/EntityCorporationResource", - "receive_only": "#/components/schemas/EntityReceiveOnlyResource" + "message": { + "type": "string", + "description": "Human-readable error description." } + }, + "example": { + "type": "CREDIT_SCORE_FAILED", + "code": 23001, + "sub_type": "CREDIT_SCORE_FAILED_TEMPORARILY_UNAVAILABLE", + "message": "Credit Score is temporarily unavailable for this entity." } }, - "EntityListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Entity" - } - } - } - } - ] - }, - "CreateEntityIndividual": { + "EntityCreditScore": { "type": "object", + "required": [ + "id", + "entity_id", + "status", + "scores", + "error", + "created_at", + "updated_at" + ], "properties": { - "first_name": { - "type": "string", - "description": "First name of the individual." - }, - "last_name": { - "type": "string", - "description": "Last name of the individual." - }, - "phone": { + "id": { "type": "string", - "description": "Phone number of the individual.", - "pattern": "^\\+\\d{10,15}$", - "example": "+15121231111" + "description": "Unique identifier for the credit score.", + "example": "crs_pn4ca33GRnrJm" }, - "email": { + "entity_id": { "type": "string", - "description": "Email address of the individual.", - "format": "email" + "description": "The ID of the entity this credit score belongs to.", + "example": "ent_au22b1fbFJbp8" }, - "dob": { + "status": { "type": "string", - "format": "date", - "description": "Date of birth of the individual (YYYY-MM-DD)." + "description": "Status of the credit score retrieval.", + "enum": [ + "completed", + "in_progress", + "pending", + "failed" + ] }, - "ssn": { - "type": "string", - "pattern": "^\\d{9}$", - "description": "Social security number (9 digits). Mutually exclusive with ssn_4." + "scores": { + "type": [ + "array", + "null" + ], + "description": "Array of credit score results.", + "items": { + "type": "object", + "required": [ + "score", + "source", + "model", + "factors", + "created_at" + ], + "properties": { + "score": { + "type": [ + "integer", + "null" + ], + "description": "The credit score value." + }, + "source": { + "type": [ + "string", + "null" + ], + "description": "The source of the credit score." + }, + "model": { + "type": [ + "string", + "null" + ], + "description": "The scoring model used." + }, + "factors": { + "type": [ + "array", + "null" + ], + "description": "Factors affecting the credit score.", + "items": { + "$ref": "#/components/schemas/EntityCreditScoreFactor" + } + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when this score was generated." + } + } + } }, - "ssn_4": { - "type": "string", - "pattern": "^\\d{4}$", - "description": "Last 4 digits of SSN. Mutually exclusive with ssn." - } - } - }, - "CreateIndividualEntityRequest": { - "type": "object", - "required": [ - "type", - "individual" - ], - "properties": { - "type": { - "type": "string", - "description": "The type of entity to create.", - "enum": [ - "individual" + "error": { + "type": [ + "object", + "null" + ], + "description": "Error details if the resource encountered an error.", + "allOf": [ + { + "$ref": "#/components/schemas/CreditScoreResourceError" + } ] }, - "individual": { - "$ref": "#/components/schemas/CreateEntityIndividual" - }, - "address": { - "$ref": "#/components/schemas/Address" - }, - "metadata": { - "$ref": "#/components/schemas/Metadata" - } - } - }, - "CreateEntityCorporation": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Legal name of the corporation." - }, - "dba": { + "created_at": { "type": "string", - "description": "Doing business as name." + "format": "date-time", + "description": "Timestamp when the credit score was created." }, - "ein": { + "updated_at": { "type": "string", - "description": "Employer Identification Number." - }, - "owners": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityCorporationOwner" - }, - "description": "List of beneficial owners." + "format": "date-time", + "description": "Timestamp when the credit score was last updated." } } }, - "CreateCorporationEntityRequest": { - "type": "object", - "required": [ - "type", - "corporation" + "EntityAttributeData": { + "type": [ + "object", + "null" ], + "description": "Financial health and credit attribute data.", "properties": { - "type": { - "type": "string", - "description": "The type of entity to create.", - "enum": [ - "corporation" - ] + "credit_health_credit_card_usage": { + "type": [ + "object", + "null" + ], + "description": "Credit card usage health indicator.", + "properties": { + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." + } + } }, - "corporation": { - "$ref": "#/components/schemas/CreateEntityCorporation" + "credit_health_derogatory_marks": { + "type": [ + "object", + "null" + ], + "description": "Derogatory marks health indicator.", + "properties": { + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." + } + } }, - "address": { - "$ref": "#/components/schemas/Address" + "credit_health_hard_inquiries": { + "type": [ + "object", + "null" + ], + "description": "Hard inquiries health indicator.", + "properties": { + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." + } + } }, - "metadata": { - "$ref": "#/components/schemas/Metadata" - } - } - }, - "CreateEntityRequest": { - "description": "Request body for creating an entity.", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateIndividualEntityRequest" + "credit_health_soft_inquiries": { + "type": [ + "object", + "null" + ], + "description": "Soft inquiries health indicator.", + "properties": { + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." + } + } }, - { - "$ref": "#/components/schemas/CreateCorporationEntityRequest" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "individual": "#/components/schemas/CreateIndividualEntityRequest", - "corporation": "#/components/schemas/CreateCorporationEntityRequest" - } - } - }, - "EntityResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" + "credit_health_total_accounts": { + "type": [ + "object", + "null" + ], + "description": "Total accounts health indicator.", + "properties": { + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." + } + } }, - { - "type": "object", + "credit_health_open_accounts": { + "type": [ + "object", + "null" + ], + "description": "Open accounts health indicator.", "properties": { - "data": { - "$ref": "#/components/schemas/Entity" + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." } } - } - ], - "example": { - "success": true, - "data": { - "id": "ent_au22b1fbFJbp8", - "type": "individual", - "individual": { - "first_name": "Jane", - "last_name": "Doe", - "phone": "+15125550123", - "email": "jane@example.com", - "dob": "1990-05-21" - }, - "corporation": null, - "receive_only": null, - "address": { - "line1": "123 Main St", - "line2": null, - "city": "Austin", - "state": "TX", - "zip": "78701" - }, - "capabilities": [], - "available_capabilities": [ - "payments:send", - "payments:receive" - ], - "pending_capabilities": [], - "status": "active", - "verification": null, - "error": null, - "metadata": { - "customer_reference": "ent-001" - }, - "products": [], - "restricted_products": [], - "subscriptions": [], - "available_subscriptions": [], - "restricted_subscriptions": [], - "connect": null, - "credit_score": null, - "attribute": null, - "vehicle": null, - "created_at": "2026-01-15T18:30:00.000Z", - "updated_at": "2026-01-15T18:30:00.000Z" - }, - "message": null - } - }, - "UpdateEntityRequest": { - "type": "object", - "properties": { - "individual": { - "$ref": "#/components/schemas/CreateEntityIndividual" - }, - "corporation": { - "$ref": "#/components/schemas/CreateEntityCorporation" - }, - "address": { - "$ref": "#/components/schemas/Address" }, - "metadata": { - "$ref": "#/components/schemas/Metadata" - } - } - }, - "EntityAttributeListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "credit_health_credit_age": { + "type": [ + "object", + "null" + ], + "description": "Credit age health indicator.", + "properties": { + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." + } + } }, - { - "type": "object", + "credit_health_payment_history": { + "type": [ + "object", + "null" + ], + "description": "Payment history health indicator.", "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityAttribute" - } + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." } } - } - ] - }, - "EntityAttributeResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" }, - { - "type": "object", + "credit_health_entity_delinquent": { + "type": [ + "object", + "null" + ], + "description": "Entity delinquency health indicator.", "properties": { - "data": { - "$ref": "#/components/schemas/EntityAttribute" + "value": { + "type": [ + "number", + "null" + ], + "description": "The attribute value." + }, + "rating": { + "type": "string", + "description": "Rating for this attribute." + }, + "metadata": { + "type": [ + "object", + "null" + ], + "description": "Additional metadata." } } } - ] + } }, - "UpdateEntityConsentRequest": { + "EntityAttribute": { "type": "object", "required": [ - "type" + "id", + "entity_id", + "status", + "attributes", + "error", + "created_at", + "updated_at" ], "properties": { - "type": { + "id": { "type": "string", - "description": "The consent action type.", - "enum": [ - "grant", - "withdraw" - ] + "description": "Unique identifier for the entity attribute.", + "example": "attr_QwMjMDEwMTY1" }, - "reason": { + "entity_id": { "type": "string", - "description": "Optional reason for the consent action." - } - } - }, - "EntityConnectListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "description": "The ID of the entity this attribute belongs to.", + "example": "ent_au22b1fbFJbp8" }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityConnect" - } - } - } - } - ] - }, - "EntityConnectResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" + "status": { + "type": "string", + "description": "Status of the attribute retrieval.", + "enum": [ + "completed", + "in_progress", + "pending", + "failed" + ] }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/EntityConnect" - } - } - } - ] - }, - "EntityCreditScoreListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" + "attributes": { + "$ref": "#/components/schemas/EntityAttributeData" }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityCreditScore" - } + "error": { + "type": [ + "object", + "null" + ], + "description": "Error details if the resource encountered an error.", + "allOf": [ + { + "$ref": "#/components/schemas/ResourceError" } - } - } - ] - }, - "EntityCreditScoreResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" + ] }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/EntityCreditScore" - } - } + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the attribute was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the attribute was last updated." } - ] + } }, - "EntityIdentity": { + "EntityVehicle": { "type": "object", "required": [ "id", "entity_id", "status", - "identities", + "vehicles", "error", "created_at", "updated_at" @@ -17002,17 +13623,17 @@ "properties": { "id": { "type": "string", - "description": "Unique identifier for the identity record.", - "example": "idn_NhTRUJMEr8kn3" + "description": "Unique identifier for the vehicle record.", + "example": "vhl_JMDEwMTY1Qw4c" }, "entity_id": { "type": "string", - "description": "The ID of the entity this identity belongs to.", + "description": "The ID of the entity this vehicle belongs to.", "example": "ent_au22b1fbFJbp8" }, "status": { "type": "string", - "description": "Status of the identity retrieval.", + "description": "Status of the vehicle data retrieval.", "enum": [ "completed", "in_progress", @@ -17020,86 +13641,63 @@ "failed" ] }, - "identities": { + "vehicles": { "type": [ "array", "null" ], - "description": "Array of identity records found for this entity.", + "description": "Array of vehicles associated with this entity.", "items": { "type": "object", "properties": { - "first_name": { + "vin": { "type": [ "string", "null" ], - "description": "First name." + "description": "Vehicle identification number." }, - "last_name": { + "year": { "type": [ "string", "null" ], - "description": "Last name." + "description": "Model year." }, - "phone": { + "make": { "type": [ "string", "null" ], - "description": "Phone number." + "description": "Vehicle make." }, - "dob": { + "model": { "type": [ "string", "null" ], - "description": "Date of birth." + "description": "Vehicle model." }, - "address": { + "series": { "type": [ - "object", + "string", "null" ], - "description": "Address information.", - "properties": { - "address": { - "type": [ - "string", - "null" - ], - "description": "Street address." - }, - "city": { - "type": [ - "string", - "null" - ], - "description": "City." - }, - "state": { - "type": [ - "string", - "null" - ], - "description": "State." - }, - "zip": { - "type": [ - "string", - "null" - ], - "description": "ZIP code." - } - } + "description": "Vehicle series." }, - "ssn": { + "major_color": { "type": [ "string", "null" ], - "description": "Social security number (masked)." + "description": "Primary color of the vehicle." + }, + "style": { + "type": [ + "string", + "null" + ], + "description": "Body style." } } } @@ -17119,287 +13717,321 @@ "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the identity record was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the identity record was last updated." - } - } - }, - "EntityIdentityListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityIdentity" - } - } - } - } - ] - }, - "EntityIdentityResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/EntityIdentity" - } - } - } - ] - }, - "EntityProduct": { - "type": "object", - "required": [ - "name", - "status", - "created_at", - "updated_at" - ], - "properties": { - "name": { - "type": "string", - "description": "Name of the product." - }, - "status": { - "type": "string", - "description": "Availability status of the product.", - "enum": [ - "available", - "restricted", - "unavailable" - ] - }, - "status_error": { - "type": [ - "object", - "null" - ], - "description": "Error details about the product status." - }, - "latest_request_id": { - "type": [ - "string", - "null" - ], - "description": "ID of the latest request for this product." - }, - "latest_successful_request_id": { - "type": [ - "string", - "null" - ], - "description": "ID of the latest successful request for this product." - }, - "is_subscribable": { - "type": "boolean", - "description": "Whether this product can be subscribed to." - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the product was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the product was last updated." - } - } - }, - "EntityProductListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "object", - "description": "Object keyed by product name with EntityProduct values.", - "additionalProperties": { - "$ref": "#/components/schemas/EntityProduct" - } - } - } - } - ] - }, - "EntityProductResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/EntityProduct" - } - } + "description": "Timestamp when the vehicle record was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the vehicle record was last updated." } - ] + } }, - "EntitySubscription": { + "EntityBase": { "type": "object", "required": [ "id", - "name", + "type", + "capabilities", + "available_capabilities", + "pending_capabilities", "status", + "verification", + "products", + "restricted_products", + "subscriptions", + "available_subscriptions", + "restricted_subscriptions", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the entity subscription.", - "example": "sub_JMDEwMTY1QwMj" + "description": "Unique identifier for the entity.", + "pattern": "^ent_\\w+$", + "example": "ent_au22b1fbFJbp8" }, - "name": { + "type": { "type": "string", - "description": "Name of the subscription." + "description": "The type of entity.", + "enum": [ + "individual", + "c_corporation", + "s_corporation", + "llc", + "partnership", + "sole_proprietorship", + "receive_only", + "corporation" + ] + }, + "individual": { + "$ref": "#/components/schemas/EntityIndividual" + }, + "corporation": { + "$ref": "#/components/schemas/EntityCorporation" + }, + "receive_only": { + "$ref": "#/components/schemas/EntityReceiveOnly" + }, + "address": { + "type": [ + "object", + "null" + ], + "description": "The entity's address.", + "allOf": [ + { + "$ref": "#/components/schemas/Address" + } + ] + }, + "capabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityCapability" + }, + "description": "Capabilities currently enabled for this entity." + }, + "available_capabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityCapability" + }, + "description": "Capabilities available to be enabled for this entity." + }, + "pending_capabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityCapability" + }, + "description": "Capabilities pending activation for this entity." }, "status": { "type": "string", - "description": "Current status of the subscription.", + "description": "Current status of the entity.", "enum": [ "active", - "inactive" + "incomplete", + "disabled" ] }, - "payload": { + "verification": { + "$ref": "#/components/schemas/EntityVerification" + }, + "error": { "type": [ "object", "null" ], - "description": "Subscription payload data." + "description": "Error details if the entity encountered an error.", + "allOf": [ + { + "$ref": "#/components/schemas/EntityResourceError" + } + ] }, - "latest_request_id": { - "type": [ - "string", - "null" - ], - "description": "ID of the latest request for this subscription." + "metadata": { + "$ref": "#/components/schemas/Metadata" + }, + "products": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Products currently active for this entity." + }, + "restricted_products": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Products restricted for this entity." + }, + "subscriptions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Active subscriptions for this entity." + }, + "available_subscriptions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Subscriptions available for this entity." + }, + "restricted_subscriptions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Subscriptions restricted for this entity." + }, + "connect": { + "description": "Expandable. The entity connect session ID or expanded connect object.", + "example": "cxn_iENwGBMDnr7sJ", + "oneOf": [ + { + "type": "string", + "pattern": "^cxn_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/EntityConnect" + } + ] + }, + "credit_score": { + "description": "Expandable. The entity credit score ID or expanded credit score object.", + "example": "crs_pn4ca33GRnrJm", + "oneOf": [ + { + "type": "string", + "pattern": "^crs_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/EntityCreditScore" + } + ] + }, + "attribute": { + "description": "Expandable. The entity attribute ID or expanded attribute object.", + "example": "attr_QwMjMDEwMTY1", + "oneOf": [ + { + "type": "string", + "pattern": "^attr_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/EntityAttribute" + } + ] + }, + "vehicle": { + "description": "Expandable. The entity vehicle ID or expanded vehicle object.", + "example": "vhl_JMDEwMTY1Qw4c", + "oneOf": [ + { + "type": "string", + "pattern": "^vhl_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/EntityVehicle" + } + ] }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the subscription was created." + "description": "Timestamp when the entity was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the subscription was last updated." - } - } - }, - "EntitySubscriptionListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "object", - "description": "Object keyed by subscription name with EntitySubscription values.", - "additionalProperties": { - "$ref": "#/components/schemas/EntitySubscription" - } - } - } - } - ] - }, - "CreateEntitySubscriptionRequest": { - "type": "object", - "required": [ - "enroll" - ], - "properties": { - "enroll": { - "type": "array", - "description": "Array of subscription names to enroll.", - "items": { - "type": "string", - "enum": [ - "attribute", - "connect", - "credit_score" - ] - }, - "minItems": 1 + "description": "Timestamp when the entity was last updated." } } }, - "EntitySubscriptionResponse": { + "EntityIndividualResource": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/EntityBase" }, { "type": "object", "properties": { - "data": { - "$ref": "#/components/schemas/EntitySubscription" + "type": { + "type": "string", + "enum": [ + "individual" + ] } } } ] }, - "EntityVehicleListResponse": { + "EntityCorporationResource": { "allOf": [ { - "$ref": "#/components/schemas/ListEnvelope" + "$ref": "#/components/schemas/EntityBase" }, { "type": "object", "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EntityVehicle" - } + "type": { + "type": "string", + "enum": [ + "corporation", + "c_corporation", + "s_corporation", + "llc", + "partnership", + "sole_proprietorship" + ] } } } ] }, - "SearchEntityVehiclesRequest": { - "type": "object", - "description": "Request body for searching entity vehicles. Treated as a product execution." - }, - "EntityVehicleResponse": { + "EntityReceiveOnlyResource": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/EntityBase" }, { "type": "object", "properties": { - "data": { - "$ref": "#/components/schemas/EntityVehicle" + "type": { + "type": "string", + "enum": [ + "receive_only" + ] } } } ] }, - "EntityVerificationSessionListResponse": { + "Entity": { + "description": "An Entity represents an individual or business profile within Method.", + "oneOf": [ + { + "$ref": "#/components/schemas/EntityIndividualResource" + }, + { + "$ref": "#/components/schemas/EntityCorporationResource" + }, + { + "$ref": "#/components/schemas/EntityReceiveOnlyResource" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "individual": "#/components/schemas/EntityIndividualResource", + "corporation": "#/components/schemas/EntityCorporationResource", + "c_corporation": "#/components/schemas/EntityCorporationResource", + "s_corporation": "#/components/schemas/EntityCorporationResource", + "llc": "#/components/schemas/EntityCorporationResource", + "partnership": "#/components/schemas/EntityCorporationResource", + "sole_proprietorship": "#/components/schemas/EntityCorporationResource", + "receive_only": "#/components/schemas/EntityReceiveOnlyResource" + } + } + }, + "EntityListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -17410,293 +14042,310 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/EntityVerificationSession" + "$ref": "#/components/schemas/Entity" } } } } ] }, - "CreateEntityVerificationSessionRequest": { + "CreateEntityIndividual": { + "type": "object", + "properties": { + "first_name": { + "type": "string", + "description": "First name of the individual." + }, + "last_name": { + "type": "string", + "description": "Last name of the individual." + }, + "phone": { + "type": "string", + "description": "Phone number of the individual.", + "pattern": "^\\+\\d{10,15}$", + "example": "+15121231111" + }, + "email": { + "type": "string", + "description": "Email address of the individual.", + "format": "email" + }, + "dob": { + "type": "string", + "format": "date", + "description": "Date of birth of the individual (YYYY-MM-DD)." + }, + "ssn": { + "type": "string", + "pattern": "^\\d{9}$", + "description": "Social security number (9 digits). Mutually exclusive with ssn_4." + }, + "ssn_4": { + "type": "string", + "pattern": "^\\d{4}$", + "description": "Last 4 digits of SSN. Mutually exclusive with ssn." + } + } + }, + "CreateIndividualEntityRequest": { "type": "object", "required": [ "type", - "method" + "individual" ], "properties": { "type": { "type": "string", - "description": "The type of verification to perform.", + "description": "The type of entity to create.", "enum": [ - "identity", - "phone" + "individual" ] }, - "method": { + "individual": { + "$ref": "#/components/schemas/CreateEntityIndividual" + }, + "address": { + "$ref": "#/components/schemas/Address" + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" + } + } + }, + "CreateEntityCorporation": { + "type": "object", + "properties": { + "name": { "type": "string", - "description": "The verification method to use.", + "description": "Legal name of the corporation." + }, + "dba": { + "type": "string", + "description": "Doing business as name." + }, + "ein": { + "type": "string", + "description": "Employer Identification Number." + }, + "owners": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityCorporationOwner" + }, + "description": "List of beneficial owners." + } + } + }, + "CreateCorporationEntityRequest": { + "type": "object", + "required": [ + "type", + "corporation" + ], + "properties": { + "type": { + "type": "string", + "description": "The type of entity to create.", "enum": [ - "sms", - "sna", - "byo_sms", - "byo_kyc", - "kba", - "element", - "opal" + "corporation" ] }, - "sms": { + "corporation": { + "$ref": "#/components/schemas/CreateEntityCorporation" + }, + "address": { + "$ref": "#/components/schemas/Address" + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" + } + } + }, + "CreateEntityRequest": { + "description": "Request body for creating an entity.", + "oneOf": [ + { + "$ref": "#/components/schemas/CreateIndividualEntityRequest" + }, + { + "$ref": "#/components/schemas/CreateCorporationEntityRequest" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "individual": "#/components/schemas/CreateIndividualEntityRequest", + "corporation": "#/components/schemas/CreateCorporationEntityRequest" + } + } + }, + "EntityResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { "type": "object", - "description": "SMS-specific options. Required when method is sms." + "properties": { + "data": { + "$ref": "#/components/schemas/Entity" + } + } + } + ], + "example": { + "success": true, + "data": { + "id": "ent_au22b1fbFJbp8", + "type": "individual", + "individual": { + "first_name": "Jane", + "last_name": "Doe", + "phone": "+15125550123", + "email": "jane@example.com", + "dob": "1990-05-21" + }, + "corporation": null, + "receive_only": null, + "address": { + "line1": "123 Main St", + "line2": null, + "city": "Austin", + "state": "TX", + "zip": "78701" + }, + "capabilities": [], + "available_capabilities": [ + "payments:send", + "payments:receive" + ], + "pending_capabilities": [], + "status": "active", + "verification": null, + "error": null, + "metadata": { + "customer_reference": "ent-001" + }, + "products": [], + "restricted_products": [], + "subscriptions": [], + "available_subscriptions": [], + "restricted_subscriptions": [], + "connect": null, + "credit_score": null, + "attribute": null, + "vehicle": null, + "created_at": "2026-01-15T18:30:00.000Z", + "updated_at": "2026-01-15T18:30:00.000Z" }, - "sna": { - "type": "object", - "description": "SNA-specific options. Required when method is sna." + "message": null + } + }, + "UpdateEntityRequest": { + "type": "object", + "properties": { + "individual": { + "$ref": "#/components/schemas/CreateEntityIndividual" }, - "byo_sms": { - "type": "object", - "description": "BYO SMS-specific options. Required when method is byo_sms.", - "properties": { - "timestamp": { - "type": "string", - "description": "Timestamp of the SMS verification." - } - } + "corporation": { + "$ref": "#/components/schemas/CreateEntityCorporation" }, - "byo_kyc": { - "type": "object", - "description": "BYO KYC-specific options. Required when method is byo_kyc." + "address": { + "$ref": "#/components/schemas/Address" }, - "kba": { - "type": "object", - "description": "KBA-specific options. Required when method is kba." + "metadata": { + "$ref": "#/components/schemas/Metadata" } } }, - "EntityVerificationSessionResponse": { + "EntityAttributeListResponse": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/ListEnvelope" }, { "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/EntityVerificationSession" + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityAttribute" + } } } } ] }, - "UpdateEntityVerificationSessionRequest": { - "type": "object", - "required": [ - "type", - "method" - ], - "properties": { - "type": { - "type": "string", - "description": "The verification session type." - }, - "method": { - "type": "string", - "description": "The verification method.", - "enum": [ - "sms", - "sna", - "byo_sms", - "byo_kyc", - "kba", - "element", - "opal" - ] - }, - "sms": { - "type": "object", - "description": "SMS verification data.", - "properties": { - "sms_code": { - "type": "string", - "description": "The 6-character SMS verification code.", - "minLength": 6, - "maxLength": 6 - } - } - }, - "sna": { - "type": "object", - "description": "SNA verification data." + "EntityAttributeResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "kba": { + { "type": "object", - "description": "KBA verification data.", "properties": { - "answers": { - "type": "array", - "description": "Array of KBA question answers.", - "items": { - "type": "object", - "required": [ - "question_id", - "answer_id" - ], - "properties": { - "question_id": { - "type": "string", - "description": "The question identifier." - }, - "answer_id": { - "type": "string", - "description": "The selected answer identifier." - } - } - } + "data": { + "$ref": "#/components/schemas/EntityAttribute" } } } - } - }, - "WebhookType": { - "type": "string", - "description": "The event type this webhook subscribes to.", - "enum": [ - "payment.create", - "payment.update", - "account.create", - "account.update", - "account.opened", - "account.closed", - "account.balance_increased", - "account.balance_decreased", - "account.credit_limit_increased", - "account.credit_limit_decreased", - "account.number.update", - "entity.create", - "entity.update", - "entity.new_accounts_pending_consent", - "account_verification.create", - "account_verification.update", - "entity_verification_session.create", - "entity_verification_session.update", - "payment_reversal.create", - "payment_reversal.update", - "connection.create", - "connection.update", - "connect.create", - "connect.available", - "connect.update", - "manual_connect.create", - "manual_connect.update", - "report.create", - "report.update", - "product.create", - "product.update", - "subscription.create", - "subscription.update", - "credit_score.create", - "credit_score.update", - "credit_score.available", - "credit_score.increased", - "credit_score.decreased", - "payoff.create", - "payoff.update", - "balance.create", - "balance.update", - "identity.create", - "identity.update", - "account_verification_session.create", - "account_verification_session.update", - "card_brand.create", - "card_brand.available", - "card_brand.update", - "payment_instrument.create", - "payment_instrument.update", - "sensitive.create", - "sensitive.update", - "update.create", - "update.update", - "attribute.create", - "attribute.update", - "entity_attribute.create", - "entity_attribute.update", - "account_attribute.create", - "account_attribute.update", - "transaction.create", - "transaction.update", - "entity_vehicle.create", - "entity_vehicle.update", - "method_jwk.create", - "method_jwk.update" ] }, - "JsonObject": { - "type": "object", - "description": "Arbitrary JSON object.", - "additionalProperties": true - }, - "Event": { + "UpdateEntityConsentRequest": { "type": "object", "required": [ - "id", - "type", - "resource_id", - "resource_type", - "related_ids", - "data", - "diff", - "created_at", - "updated_at" + "type" ], "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the event.", - "example": "evt_HnEJMFWS8rJbh" - }, "type": { - "description": "The webhook event type.", - "example": "payment.create", - "$ref": "#/components/schemas/WebhookType" - }, - "resource_id": { "type": "string", - "description": "Identifier of the resource that triggered the event.", - "example": "pmt_rPrDPEwyCVUFm" + "description": "The consent action type.", + "enum": [ + "grant", + "withdraw" + ] }, - "resource_type": { + "reason": { "type": "string", - "description": "Type of the resource that triggered the event.", - "example": "payment" - }, - "related_ids": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Identifiers of related resources." - }, - "data": { - "description": "Current state of the resource at the time of the event.", - "$ref": "#/components/schemas/JsonObject" - }, - "diff": { - "description": "Changes from the previous state of the resource.", - "$ref": "#/components/schemas/JsonObject" + "description": "Optional reason for the consent action." + } + } + }, + "EntityConnectListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the event was created." + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityConnect" + } + } + } + } + ] + }, + "EntityConnectResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the event was last updated." + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/EntityConnect" + } + } } - } + ] }, - "EventListResponse": { + "EntityCreditScoreListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -17707,14 +14356,14 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/Event" + "$ref": "#/components/schemas/EntityCreditScore" } } } } ] }, - "EventResponse": { + "EntityCreditScoreResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -17723,244 +14372,171 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/Event" + "$ref": "#/components/schemas/EntityCreditScore" } } } - ], - "example": { - "success": true, - "data": { - "id": "evt_HnEJMFWS8rJbh", - "type": "payment.create", - "resource_id": "pmt_rPrDPEwyCVUcm", - "resource_type": "payment", - "related_ids": [ - "acc_b9q2XVAnNFbp3", - "acc_Y8u3qL9mNa1Bz" - ], - "data": { - "id": "pmt_rPrDPEwyCVUcm", - "status": "pending", - "amount": 5000 - }, - "diff": {}, - "created_at": "2026-01-15T18:30:00.000Z", - "updated_at": "2026-01-15T18:30:00.000Z" - }, - "message": null - } + ] }, - "ForwardingRequestCreateRequest": { + "EntityIdentity": { "type": "object", "required": [ - "url", - "method", - "bindings", - "headers", - "body" + "id", + "entity_id", + "status", + "identities", + "error", + "created_at", + "updated_at" ], "properties": { - "url": { + "id": { "type": "string", - "description": "The destination URL for the forwarded request." + "description": "Unique identifier for the identity record.", + "example": "idn_NhTRUJMEr8kn3" }, - "method": { + "entity_id": { "type": "string", - "enum": [ - "GET", - "POST", - "PUT", - "PATCH", - "DELETE" - ], - "description": "HTTP method to use." - }, - "headers": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "HTTP headers to include in the forwarded request." + "description": "The ID of the entity this identity belongs to.", + "example": "ent_au22b1fbFJbp8" }, - "body": { + "status": { "type": "string", - "description": "Body to send with the forwarded request." - }, - "bindings": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Key-value map of secret bindings to inject into the request." + "description": "Status of the identity retrieval.", + "enum": [ + "completed", + "in_progress", + "pending", + "failed" + ] }, - "metadata": { + "identities": { "type": [ - "object", + "array", "null" ], - "description": "Optional metadata to attach to the forwarding request." - } - } - }, - "ForwardingRequestDetail": { - "type": "object", - "required": [ - "url", - "method", - "headers", - "body" - ], - "properties": { - "url": { - "type": "string", - "description": "The destination URL for the forwarded request." - }, - "method": { - "type": "string", - "enum": [ - "GET", - "POST", - "PUT", - "PATCH", - "DELETE" - ], - "description": "HTTP method of the forwarded request." - }, - "headers": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "HTTP headers sent with the forwarded request." - }, - "body": { - "type": "string", - "description": "Body of the forwarded request." - } - } - }, - "JsonValue": { - "description": "Arbitrary JSON value.", - "oneOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "null" - }, - { - "type": "object", - "additionalProperties": true - }, - { - "type": "array", - "items": {} - } - ] - }, - "ForwardingResponseDetail": { - "type": "object", - "description": "Details of the upstream response captured for the forwarding request.", - "properties": { - "status_code": { + "description": "Array of identity records found for this entity.", + "items": { + "type": "object", + "properties": { + "first_name": { + "type": [ + "string", + "null" + ], + "description": "First name." + }, + "last_name": { + "type": [ + "string", + "null" + ], + "description": "Last name." + }, + "phone": { + "type": [ + "string", + "null" + ], + "description": "Phone number." + }, + "dob": { + "type": [ + "string", + "null" + ], + "description": "Date of birth." + }, + "address": { + "type": [ + "object", + "null" + ], + "description": "Address information.", + "properties": { + "address": { + "type": [ + "string", + "null" + ], + "description": "Street address." + }, + "city": { + "type": [ + "string", + "null" + ], + "description": "City." + }, + "state": { + "type": [ + "string", + "null" + ], + "description": "State." + }, + "zip": { + "type": [ + "string", + "null" + ], + "description": "ZIP code." + } + } + }, + "ssn": { + "type": [ + "string", + "null" + ], + "description": "Social security number (masked)." + } + } + } + }, + "error": { "type": [ - "integer", + "object", "null" ], - "description": "HTTP status code returned by the destination." - }, - "headers": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "HTTP headers returned by the destination." + "description": "Error details if the resource encountered an error.", + "allOf": [ + { + "$ref": "#/components/schemas/ResourceError" + } + ] }, - "body": { - "$ref": "#/components/schemas/JsonValue", - "description": "Body returned by the destination." - } - } - }, - "ForwardingRequestStatus": { - "type": "string", - "enum": [ - "completed", - "failed" - ] - }, - "StatusHistoryItem": { - "type": "object", - "properties": { - "status": { - "type": "string" + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the identity record was created." }, - "timestamp": { + "updated_at": { "type": "string", - "format": "date-time" + "format": "date-time", + "description": "Timestamp when the identity record was last updated." } } }, - "ForwardingRequest": { - "type": "object", - "required": [ - "id", - "bindings", - "request", - "response", - "duration_ms", - "status", - "status_history", - "created_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the forwarding request.", - "example": "freq_yVf3mkzbhz9tj" + "EntityIdentityListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" }, - "bindings": { + { "type": "object", - "additionalProperties": { - "type": "string" - }, - "description": "Key-value map of secret bindings used in the request." - }, - "request": { - "$ref": "#/components/schemas/ForwardingRequestDetail" - }, - "response": { - "$ref": "#/components/schemas/ForwardingResponseDetail" - }, - "duration_ms": { - "type": "number", - "description": "Total duration of the forwarded request in milliseconds." - }, - "status": { - "$ref": "#/components/schemas/ForwardingRequestStatus" - }, - "status_history": { - "type": "array", - "items": { - "$ref": "#/components/schemas/StatusHistoryItem" - }, - "description": "History of status transitions." - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the forwarding request was created." + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityIdentity" + } + } + } } - } + ] }, - "ForwardingRequestResponse": { + "EntityIdentityResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -17969,92 +14545,91 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/ForwardingRequest" + "$ref": "#/components/schemas/EntityIdentity" } } } ] }, - "ManagedAccount": { + "EntityProduct": { "type": "object", - "description": "A Managed Account is a Method-managed financial account used for fund operations.", "required": [ - "id", - "type", + "name", "status", - "routing_number", - "account_number", - "balance", "created_at", "updated_at" ], "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the managed account.", - "pattern": "^macc_\\w+$", - "example": "macc_3mDnkR8Ft6Bx7" - }, - "type": { + "name": { "type": "string", - "description": "The type of managed account." + "description": "Name of the product." }, "status": { "type": "string", - "description": "Current status of the managed account." + "description": "Availability status of the product.", + "enum": [ + "available", + "restricted", + "unavailable" + ] }, - "routing_number": { + "status_error": { "type": [ - "string", + "object", "null" ], - "description": "Bank routing number for the managed account." + "description": "Error details about the product status." }, - "account_number": { + "latest_request_id": { "type": [ "string", "null" ], - "description": "Bank account number for the managed account." + "description": "ID of the latest request for this product." }, - "balance": { + "latest_successful_request_id": { "type": [ - "number", + "string", "null" ], - "description": "Current balance of the managed account in cents." + "description": "ID of the latest successful request for this product." + }, + "is_subscribable": { + "type": "boolean", + "description": "Whether this product can be subscribed to." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the managed account was created." + "description": "Timestamp when the product was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the managed account was last updated." + "description": "Timestamp when the product was last updated." } } }, - "ManagedAccountListResponse": { + "EntityProductListResponse": { "allOf": [ { - "$ref": "#/components/schemas/ListEnvelope" + "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ManagedAccount" + "type": "object", + "description": "Object keyed by product name with EntityProduct values.", + "additionalProperties": { + "$ref": "#/components/schemas/EntityProduct" } } } } ] }, - "ManagedAccountResponse": { + "EntityProductResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -18063,85 +14638,121 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/ManagedAccount" + "$ref": "#/components/schemas/EntityProduct" } } } ] }, - "ManagedAccountTransaction": { + "EntitySubscription": { "type": "object", - "description": "A transaction on a managed account.", "required": [ "id", - "managed_account_id", - "amount", - "type", + "name", "status", - "description", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the transaction." - }, - "managed_account_id": { - "type": "string", - "description": "Identifier of the managed account this transaction belongs to.", - "pattern": "^macc_\\w+$" - }, - "amount": { - "type": "number", - "description": "Transaction amount in cents." + "description": "Unique identifier for the entity subscription.", + "example": "sub_JMDEwMTY1QwMj" }, - "type": { + "name": { "type": "string", - "description": "The type of transaction." + "description": "Name of the subscription." }, "status": { "type": "string", - "description": "Current status of the transaction." + "description": "Current status of the subscription.", + "enum": [ + "active", + "inactive" + ] }, - "description": { + "payload": { + "type": [ + "object", + "null" + ], + "description": "Subscription payload data." + }, + "latest_request_id": { "type": [ "string", "null" ], - "description": "Human-readable description of the transaction." + "description": "ID of the latest request for this subscription." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the transaction was created." + "description": "Timestamp when the subscription was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the transaction was last updated." + "description": "Timestamp when the subscription was last updated." + } + } + }, + "EntitySubscriptionListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "object", + "description": "Object keyed by subscription name with EntitySubscription values.", + "additionalProperties": { + "$ref": "#/components/schemas/EntitySubscription" + } + } + } + } + ] + }, + "CreateEntitySubscriptionRequest": { + "type": "object", + "required": [ + "enroll" + ], + "properties": { + "enroll": { + "type": "array", + "description": "Array of subscription names to enroll.", + "items": { + "type": "string", + "enum": [ + "attribute", + "connect", + "credit_score" + ] + }, + "minItems": 1 } } }, - "ManagedAccountTransactionListResponse": { + "EntitySubscriptionResponse": { "allOf": [ { - "$ref": "#/components/schemas/ListEnvelope" + "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ManagedAccountTransaction" - } + "$ref": "#/components/schemas/EntitySubscription" } } } ] }, - "MerchantListResponse": { + "EntityVehicleListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -18152,14 +14763,18 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/Merchant" + "$ref": "#/components/schemas/EntityVehicle" } } } } ] }, - "MerchantResponse": { + "SearchEntityVehiclesRequest": { + "type": "object", + "description": "Request body for searching entity vehicles. Treated as a product execution." + }, + "EntityVehicleResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -18168,296 +14783,310 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/Merchant" + "$ref": "#/components/schemas/EntityVehicle" } } } ] }, - "PaymentResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when a payment fails or is canceled.", + "EntityVerificationSessionListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EntityVerificationSession" + } + } + } + } + ] + }, + "CreateEntityVerificationSessionRequest": { + "type": "object", "required": [ "type", - "code", - "sub_type", - "message" + "method" ], "properties": { "type": { "type": "string", - "description": "The category of payment error.", + "description": "The type of verification to perform.", "enum": [ - "PAYMENT_FAILED", - "PAYMENT_CANCELED" + "identity", + "phone" ] }, - "code": { - "type": "integer", - "description": "Numeric error code (10XXX range).", + "method": { + "type": "string", + "description": "The verification method to use.", "enum": [ - 10001, - 10002, - 10003, - 10004, - 10005, - 10006, - 10007, - 10008, - 10009, - 10010 + "sms", + "sna", + "byo_sms", + "byo_kyc", + "kba", + "element", + "opal" ] }, - "sub_type": { + "sms": { + "type": "object", + "description": "SMS-specific options. Required when method is sms." + }, + "sna": { + "type": "object", + "description": "SNA-specific options. Required when method is sna." + }, + "byo_sms": { + "type": "object", + "description": "BYO SMS-specific options. Required when method is byo_sms.", + "properties": { + "timestamp": { + "type": "string", + "description": "Timestamp of the SMS verification." + } + } + }, + "byo_kyc": { + "type": "object", + "description": "BYO KYC-specific options. Required when method is byo_kyc." + }, + "kba": { + "type": "object", + "description": "KBA-specific options. Required when method is kba." + } + } + }, + "EntityVerificationSessionResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/EntityVerificationSession" + } + } + } + ] + }, + "UpdateEntityVerificationSessionRequest": { + "type": "object", + "required": [ + "type", + "method" + ], + "properties": { + "type": { "type": "string", - "description": "Specific payment error classification.", + "description": "The verification session type." + }, + "method": { + "type": "string", + "description": "The verification method.", "enum": [ - "PAYMENT_INSUFFICIENT_FUNDS", - "PAYMENT_UNAUTHORIZED", - "PAYMENT_INVALID_ACCOUNT", - "PAYMENT_UNAUTHORIZED_SOURCE", - "PAYMENT_UNAUTHORIZED_DESTINATION", - "PAYMENT_INVALID_SOURCE_ACCOUNT", - "PAYMENT_INVALID_DESTINATION_ACCOUNT", - "PAYMENT_REJECTED_BY_DESTINATION_INSTITUTION", - "PAYMENT_REJECTED_INVALID_AMOUNT" + "sms", + "sna", + "byo_sms", + "byo_kyc", + "kba", + "element", + "opal" ] }, - "message": { - "type": "string", - "description": "Human-readable error description." + "sms": { + "type": "object", + "description": "SMS verification data.", + "properties": { + "sms_code": { + "type": "string", + "description": "The 6-character SMS verification code.", + "minLength": 6, + "maxLength": 6 + } + } + }, + "sna": { + "type": "object", + "description": "SNA verification data." + }, + "kba": { + "type": "object", + "description": "KBA verification data.", + "properties": { + "answers": { + "type": "array", + "description": "Array of KBA question answers.", + "items": { + "type": "object", + "required": [ + "question_id", + "answer_id" + ], + "properties": { + "question_id": { + "type": "string", + "description": "The question identifier." + }, + "answer_id": { + "type": "string", + "description": "The selected answer identifier." + } + } + } + } + } } - }, - "example": { - "type": "PAYMENT_FAILED", - "code": 10001, - "sub_type": "PAYMENT_INSUFFICIENT_FUNDS", - "message": "Payment failed due to insufficient funds from the source account." } }, - "Payment": { + "WebhookType": { + "type": "string", + "description": "The event type this webhook subscribes to.", + "enum": [ + "payment.create", + "payment.update", + "account.create", + "account.update", + "account.opened", + "account.closed", + "account.balance_increased", + "account.balance_decreased", + "account.credit_limit_increased", + "account.credit_limit_decreased", + "account.number.update", + "entity.create", + "entity.update", + "entity.new_accounts_pending_consent", + "account_verification.create", + "account_verification.update", + "entity_verification_session.create", + "entity_verification_session.update", + "payment_reversal.create", + "payment_reversal.update", + "connection.create", + "connection.update", + "connect.create", + "connect.available", + "connect.update", + "manual_connect.create", + "manual_connect.update", + "report.create", + "report.update", + "product.create", + "product.update", + "subscription.create", + "subscription.update", + "credit_score.create", + "credit_score.update", + "credit_score.available", + "credit_score.increased", + "credit_score.decreased", + "payoff.create", + "payoff.update", + "balance.create", + "balance.update", + "identity.create", + "identity.update", + "account_verification_session.create", + "account_verification_session.update", + "card_brand.create", + "card_brand.available", + "card_brand.update", + "payment_instrument.create", + "payment_instrument.update", + "sensitive.create", + "sensitive.update", + "update.create", + "update.update", + "attribute.create", + "attribute.update", + "entity_attribute.create", + "entity_attribute.update", + "account_attribute.create", + "account_attribute.update", + "transaction.create", + "transaction.update", + "entity_vehicle.create", + "entity_vehicle.update", + "method_jwk.create", + "method_jwk.update" + ] + }, + "JsonObject": { + "type": "object", + "description": "Arbitrary JSON object.", + "additionalProperties": true + }, + "Event": { "type": "object", - "description": "A Payment represents a transfer of funds between two accounts.", "required": [ "id", - "source", - "destination", - "amount", - "status", "type", + "resource_id", + "resource_type", + "related_ids", + "data", + "diff", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the payment.", - "pattern": "^pmt_\\w+$", - "example": "pmt_rPrDPEwyCVUcm" - }, - "reversal_id": { - "type": [ - "string", - "null" - ], - "description": "Identifier of the associated reversal, if any.", - "pattern": "^rvs_\\w+$" - }, - "source_trace_id": { - "type": [ - "string", - "null" - ], - "description": "Trace identifier for the source side of the payment." - }, - "destination_trace_id": { - "type": [ - "string", - "null" - ], - "description": "Trace identifier for the destination side of the payment." - }, - "source": { - "description": "The source account ID. This field is expandable. When expanded, returns the full Account object.\n", - "anyOf": [ - { - "type": "string", - "pattern": "^acc_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/Account" - } - ] - }, - "destination": { - "description": "The destination account ID. This field is expandable. When expanded, returns the full Account object.\n", - "anyOf": [ - { - "type": "string", - "pattern": "^acc_\\w+$" - }, - { - "type": "null" - }, - { - "$ref": "#/components/schemas/Account" - } - ] - }, - "amount": { - "type": "integer", - "description": "Payment amount in cents.", - "minimum": 0, - "example": 5000 + "description": "Unique identifier for the event.", + "example": "evt_HnEJMFWS8rJbh" }, - "description": { - "type": [ - "string", - "null" - ], - "description": "Human-readable description for the payment." + "type": { + "description": "The webhook event type.", + "example": "payment.create", + "$ref": "#/components/schemas/WebhookType" }, - "status": { + "resource_id": { "type": "string", - "description": "Current status of the payment.", - "enum": [ - "pending", - "processing", - "sent", - "posted", - "settled", - "failed", - "reversed", - "canceled", - "cashed" - ] - }, - "fund_status": { - "type": [ - "string", - "null" - ], - "description": "The current status of the payment funds.", - "enum": [ - "transmitting", - "transmitted", - "requested", - "clearing", - "pending", - "hold", - "sent", - "posted", - "cashed", - "unknown", - "pending_consolidation", - "pending_clearing", - "failed", - null - ] - }, - "estimated_completion_date": { - "type": [ - "string", - "null" - ], - "format": "date", - "description": "Estimated date when the payment will be completed (YYYY-MM-DD)." - }, - "source_settlement_date": { - "type": [ - "string", - "null" - ], - "format": "date", - "description": "The expected or actual settlement date for the source side of the payment." - }, - "destination_settlement_date": { - "type": [ - "string", - "null" - ], - "format": "date", - "description": "The expected or actual settlement date for the destination side of the payment." - }, - "source_status": { - "type": [ - "string", - "null" - ], - "description": "The status of the source side of the payment." - }, - "destination_status": { - "type": [ - "string", - "null" - ], - "description": "The status of the destination side of the payment." - }, - "destination_payment_method": { - "type": [ - "string", - "null" - ], - "description": "The payment method used for the destination." - }, - "fee": { - "type": [ - "object", - "null" - ], - "description": "Fee associated with the payment.", - "required": [ - "type", - "amount" - ], - "properties": { - "type": { - "type": "string", - "description": "The fee type.", - "enum": [ - "total" - ] - }, - "amount": { - "type": "integer", - "description": "Fee amount in cents.", - "minimum": 0 - } - } + "description": "Identifier of the resource that triggered the event.", + "example": "pmt_rPrDPEwyCVUFm" }, - "type": { + "resource_type": { "type": "string", - "description": "The type of payment.", - "enum": [ - "standard", - "clearing" - ] + "description": "Type of the resource that triggered the event.", + "example": "payment" }, - "error": { - "$ref": "#/components/schemas/PaymentResourceError" + "related_ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Identifiers of related resources." }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "data": { + "description": "Current state of the resource at the time of the event.", + "$ref": "#/components/schemas/JsonObject" + }, + "diff": { + "description": "Changes from the previous state of the resource.", + "$ref": "#/components/schemas/JsonObject" }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the payment was created." + "description": "Timestamp when the event was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the payment was last updated." + "description": "Timestamp when the event was last updated." } } }, - "PaymentListResponse": { + "EventListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -18468,251 +15097,260 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/Payment" + "$ref": "#/components/schemas/Event" } } } } ] }, - "PaymentCreateRequest": { + "EventResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Event" + } + } + } + ], + "example": { + "success": true, + "data": { + "id": "evt_HnEJMFWS8rJbh", + "type": "payment.create", + "resource_id": "pmt_rPrDPEwyCVUcm", + "resource_type": "payment", + "related_ids": [ + "acc_b9q2XVAnNFbp3", + "acc_Y8u3qL9mNa1Bz" + ], + "data": { + "id": "pmt_rPrDPEwyCVUcm", + "status": "pending", + "amount": 5000 + }, + "diff": {}, + "created_at": "2026-01-15T18:30:00.000Z", + "updated_at": "2026-01-15T18:30:00.000Z" + }, + "message": null + } + }, + "ForwardingRequestCreateRequest": { "type": "object", - "description": "Request body for creating a payment.", "required": [ - "source", - "destination", - "amount", - "description" + "url", + "method", + "bindings", + "headers", + "body" ], "properties": { - "source": { + "url": { "type": "string", - "description": "The source account ID.", - "pattern": "^acc_\\w+$" + "description": "The destination URL for the forwarded request." }, - "destination": { + "method": { "type": "string", - "description": "The destination account ID.", - "pattern": "^acc_\\w+$" + "enum": [ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE" + ], + "description": "HTTP method to use." }, - "amount": { - "type": "integer", - "description": "Payment amount in cents.", - "minimum": 1, - "example": 5000 + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "HTTP headers to include in the forwarded request." }, - "description": { + "body": { "type": "string", - "description": "Human-readable description for the payment." + "description": "Body to send with the forwarded request." + }, + "bindings": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of secret bindings to inject into the request." }, "metadata": { - "$ref": "#/components/schemas/Metadata" + "type": [ + "object", + "null" + ], + "description": "Optional metadata to attach to the forwarding request." + } + } + }, + "ForwardingRequestDetail": { + "type": "object", + "required": [ + "url", + "method", + "headers", + "body" + ], + "properties": { + "url": { + "type": "string", + "description": "The destination URL for the forwarded request." }, - "dry_run": { - "type": "boolean", - "description": "Validate the payment request without moving funds." + "method": { + "type": "string", + "enum": [ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE" + ], + "description": "HTTP method of the forwarded request." }, - "fee": { + "headers": { "type": "object", - "description": "Optional fee configuration for the payment.", - "properties": { - "type": { - "type": "string", - "description": "The fee type.", - "enum": [ - "total" - ] - }, - "amount": { - "type": "integer", - "description": "Fee amount in cents.", - "minimum": 0 - } - } + "additionalProperties": { + "type": "string" + }, + "description": "HTTP headers sent with the forwarded request." + }, + "body": { + "type": "string", + "description": "Body of the forwarded request." } } }, - "PaymentResponse": { - "allOf": [ + "JsonValue": { + "description": "Arbitrary JSON value.", + "oneOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" }, { "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Payment" - } - } + "additionalProperties": true + }, + { + "type": "array", + "items": {} } ] }, - "PaymentReversalResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when a payment reversal fails.", - "required": [ - "type", - "code", - "sub_type", - "message" - ], + "ForwardingResponseDetail": { + "type": "object", + "description": "Details of the upstream response captured for the forwarding request.", "properties": { - "type": { - "type": "string", - "description": "The category of reversal error.", - "enum": [ - "PAYMENT_REVERSAL_FAILED" - ] + "status_code": { + "type": [ + "integer", + "null" + ], + "description": "HTTP status code returned by the destination." }, - "code": { - "type": "integer", - "description": "Numeric error code (14XXX range).", - "enum": [ - 14001, - 14002, - 14003 - ] + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "HTTP headers returned by the destination." }, - "sub_type": { - "type": "string", - "description": "Specific reversal error classification.", - "enum": [ - "PAYMENT_REVERSAL_INSUFFICIENT_FUNDS", - "PAYMENT_REVERSAL_UNAUTHORIZED", - "PAYMENT_REVERSAL_INVALID_ACCOUNT" - ] + "body": { + "$ref": "#/components/schemas/JsonValue", + "description": "Body returned by the destination." + } + } + }, + "ForwardingRequestStatus": { + "type": "string", + "enum": [ + "completed", + "failed" + ] + }, + "StatusHistoryItem": { + "type": "object", + "properties": { + "status": { + "type": "string" }, - "message": { + "timestamp": { "type": "string", - "description": "Human-readable error description." + "format": "date-time" } - }, - "example": { - "type": "PAYMENT_REVERSAL_FAILED", - "code": 14001, - "sub_type": "PAYMENT_REVERSAL_INSUFFICIENT_FUNDS", - "message": "Payment reversal failed due to insufficient funds from the account." } }, - "PaymentReversal": { + "ForwardingRequest": { "type": "object", - "description": "A reversal for a payment, representing a return of funds.", "required": [ "id", - "pmt_id", + "bindings", + "request", + "response", + "duration_ms", "status", - "direction", - "trace_id", - "target_account", - "amount", - "description", - "fee", - "error", - "created_at", - "updated_at" + "status_history", + "created_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the reversal.", - "pattern": "^rvs_\\w+$", - "example": "rvs_dKe9ehC3hEBYy" - }, - "pmt_id": { - "type": "string", - "description": "Identifier of the payment being reversed.", - "pattern": "^pmt_\\w+$" - }, - "status": { - "type": "string", - "description": "Current status of the reversal.", - "enum": [ - "pending_approval", - "pending", - "processing", - "failed", - "sent", - "pending_settlement" - ] - }, - "direction": { - "type": "string", - "description": "Direction of the reversal relative to the original payment.", - "enum": [ - "credit", - "debit" - ] + "description": "Unique identifier for the forwarding request.", + "example": "freq_yVf3mkzbhz9tj" }, - "trace_id": { - "type": [ - "string", - "null" - ], - "description": "Trace identifier for the reversal." + "bindings": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Key-value map of secret bindings used in the request." }, - "target_account": { - "type": [ - "string", - "null" - ], - "description": "The target account for the reversal." + "request": { + "$ref": "#/components/schemas/ForwardingRequestDetail" }, - "amount": { - "type": "integer", - "description": "Reversal amount in cents.", - "minimum": 0 + "response": { + "$ref": "#/components/schemas/ForwardingResponseDetail" }, - "description": { - "type": [ - "string", - "null" - ], - "description": "Human-readable description for the reversal." + "duration_ms": { + "type": "number", + "description": "Total duration of the forwarded request in milliseconds." }, - "fee": { - "type": [ - "object", - "null" - ], - "description": "Fee information for the reversal." + "status": { + "$ref": "#/components/schemas/ForwardingRequestStatus" }, - "error": { - "$ref": "#/components/schemas/PaymentReversalResourceError" + "status_history": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StatusHistoryItem" + }, + "description": "History of status transitions." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the reversal was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the reversal was last updated." + "description": "Timestamp when the forwarding request was created." } } }, - "PaymentReversalListResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/ListEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/PaymentReversal" - } - } - } - } - ] - }, - "PaymentReversalResponse": { + "ForwardingRequestResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -18721,119 +15359,92 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/PaymentReversal" + "$ref": "#/components/schemas/ForwardingRequest" } } } ] }, - "PaymentReversalUpdateRequest": { - "type": "object", - "description": "Request body for updating a payment reversal.", - "properties": { - "status": { - "type": "string", - "description": "Updated status for the reversal." - } - } - }, - "ReportCreateRequest": { - "type": "object", - "description": "Request body for creating a report.", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "description": "The type of report to generate.", - "enum": [ - "payments.created.current", - "payments.created.previous", - "payments.created.previous_day", - "payments.updated.current", - "payments.updated.previous", - "payments.failed.previous_day", - "ach.pull.upcoming", - "ach.pull.previous", - "ach.pull.nightly", - "ach.reversals.nightly", - "ach.debit.daily", - "entities.created.previous_day", - "reserve_fbo_balance.created.previous_day" - ] - } - } - }, - "Report": { + "ManagedAccount": { "type": "object", - "description": "A Report is a downloadable file containing aggregated data about payments, entities, or other resources.", + "description": "A Managed Account is a Method-managed financial account used for fund operations.", "required": [ "id", "type", - "url", "status", - "metadata", + "routing_number", + "account_number", + "balance", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the report.", - "pattern": "^rpt_\\w+$", - "example": "rpt_cj2mkA3hFyHT5" + "description": "Unique identifier for the managed account.", + "pattern": "^macc_\\w+$", + "example": "macc_3mDnkR8Ft6Bx7" }, "type": { "type": "string", - "description": "The type of report.", - "enum": [ - "payments.created.current", - "payments.created.previous", - "payments.created.previous_day", - "payments.updated.current", - "payments.updated.previous", - "payments.failed.previous_day", - "ach.pull.upcoming", - "ach.pull.previous", - "ach.pull.nightly", - "ach.reversals.nightly", - "ach.debit.daily", - "entities.created.previous_day", - "reserve_fbo_balance.created.previous_day" - ] + "description": "The type of managed account." }, - "url": { + "status": { + "type": "string", + "description": "Current status of the managed account." + }, + "routing_number": { "type": [ "string", "null" ], - "description": "Download URL for the completed report. Only available when status is `completed`." + "description": "Bank routing number for the managed account." }, - "status": { - "type": "string", - "description": "Current processing status of the report.", - "enum": [ - "processing", - "completed" - ] + "account_number": { + "type": [ + "string", + "null" + ], + "description": "Bank account number for the managed account." }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "balance": { + "type": [ + "number", + "null" + ], + "description": "Current balance of the managed account in cents." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the report was created." + "description": "Timestamp when the managed account was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the report was last updated." + "description": "Timestamp when the managed account was last updated." + } + } + }, + "ManagedAccountListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ManagedAccount" + } + } + } } - } + ] }, - "ReportResponse": { + "ManagedAccountResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -18842,53 +15453,67 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/Report" + "$ref": "#/components/schemas/ManagedAccount" } } } ] }, - "SecretStatus": { - "type": "string", - "enum": [ - "active", - "deleted" - ] - }, - "Secret": { + "ManagedAccountTransaction": { "type": "object", + "description": "A transaction on a managed account.", "required": [ "id", - "metadata", + "managed_account_id", + "amount", + "type", "status", + "description", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the secret.", - "example": "sec_dMnRPmJQ4ZkxY" + "description": "Unique identifier for the transaction." }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "managed_account_id": { + "type": "string", + "description": "Identifier of the managed account this transaction belongs to.", + "pattern": "^macc_\\w+$" + }, + "amount": { + "type": "number", + "description": "Transaction amount in cents." + }, + "type": { + "type": "string", + "description": "The type of transaction." }, "status": { - "$ref": "#/components/schemas/SecretStatus" + "type": "string", + "description": "Current status of the transaction." + }, + "description": { + "type": [ + "string", + "null" + ], + "description": "Human-readable description of the transaction." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the secret was created." + "description": "Timestamp when the transaction was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the secret was last updated." + "description": "Timestamp when the transaction was last updated." } } }, - "SecretListResponse": { + "ManagedAccountTransactionListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -18899,29 +15524,32 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/Secret" + "$ref": "#/components/schemas/ManagedAccountTransaction" } } } } ] }, - "SecretCreateRequest": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string", - "description": "The secret value to store securely." + "MerchantListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Merchant" + } + } + } } - } + ] }, - "SecretResponse": { + "MerchantResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -18930,255 +15558,533 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/Secret" + "$ref": "#/components/schemas/Merchant" } } } ] }, - "TeamProduct": { - "type": "object", + "PaymentResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when a payment fails or is canceled.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], "properties": { "type": { "type": "string", - "description": "The product type." + "description": "The category of payment error.", + "enum": [ + "PAYMENT_FAILED", + "PAYMENT_CANCELED" + ] }, - "enabled": { - "type": "boolean", - "description": "Whether this product is enabled for the team." + "code": { + "type": "integer", + "description": "Numeric error code (10XXX range).", + "enum": [ + 10001, + 10002, + 10003, + 10004, + 10005, + 10006, + 10007, + 10008, + 10009, + 10010 + ] + }, + "sub_type": { + "type": "string", + "description": "Specific payment error classification.", + "enum": [ + "PAYMENT_INSUFFICIENT_FUNDS", + "PAYMENT_UNAUTHORIZED", + "PAYMENT_INVALID_ACCOUNT", + "PAYMENT_UNAUTHORIZED_SOURCE", + "PAYMENT_UNAUTHORIZED_DESTINATION", + "PAYMENT_INVALID_SOURCE_ACCOUNT", + "PAYMENT_INVALID_DESTINATION_ACCOUNT", + "PAYMENT_REJECTED_BY_DESTINATION_INSTITUTION", + "PAYMENT_REJECTED_INVALID_AMOUNT" + ] + }, + "message": { + "type": "string", + "description": "Human-readable error description." } + }, + "example": { + "type": "PAYMENT_FAILED", + "code": 10001, + "sub_type": "PAYMENT_INSUFFICIENT_FUNDS", + "message": "Payment failed due to insufficient funds from the source account." } }, - "TeamKey": { + "Payment": { "type": "object", + "description": "A Payment represents a transfer of funds between two accounts.", + "required": [ + "id", + "source", + "destination", + "amount", + "status", + "type", + "created_at", + "updated_at" + ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the key." + "description": "Unique identifier for the payment.", + "pattern": "^pmt_\\w+$", + "example": "pmt_rPrDPEwyCVUcm" }, - "type": { + "reversal_id": { + "type": [ + "string", + "null" + ], + "description": "Identifier of the associated reversal, if any.", + "pattern": "^rvs_\\w+$" + }, + "source_trace_id": { + "type": [ + "string", + "null" + ], + "description": "Trace identifier for the source side of the payment." + }, + "destination_trace_id": { + "type": [ + "string", + "null" + ], + "description": "Trace identifier for the destination side of the payment." + }, + "source": { + "description": "The source account ID. This field is expandable. When expanded, returns the full Account object.\n", + "anyOf": [ + { + "type": "string", + "pattern": "^acc_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Account" + } + ] + }, + "destination": { + "description": "The destination account ID. This field is expandable. When expanded, returns the full Account object.\n", + "anyOf": [ + { + "type": "string", + "pattern": "^acc_\\w+$" + }, + { + "type": "null" + }, + { + "$ref": "#/components/schemas/Account" + } + ] + }, + "amount": { + "type": "integer", + "description": "Payment amount in cents.", + "minimum": 0, + "example": 5000 + }, + "description": { + "type": [ + "string", + "null" + ], + "description": "Human-readable description for the payment." + }, + "status": { "type": "string", - "description": "The key type.", + "description": "Current status of the payment.", "enum": [ - "secret", - "public" + "pending", + "processing", + "sent", + "posted", + "settled", + "failed", + "reversed", + "canceled", + "cashed" + ] + }, + "fund_status": { + "type": [ + "string", + "null" + ], + "description": "The current status of the payment funds.", + "enum": [ + "transmitting", + "transmitted", + "requested", + "clearing", + "pending", + "hold", + "sent", + "posted", + "cashed", + "unknown", + "pending_consolidation", + "pending_clearing", + "failed", + null ] }, - "deleted": { - "type": "boolean", - "description": "Whether this key has been deleted." - }, - "created_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the key was created." - }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the key was last updated." + "estimated_completion_date": { + "type": [ + "string", + "null" + ], + "format": "date", + "description": "Estimated date when the payment will be completed (YYYY-MM-DD)." }, - "last_used_at": { + "source_settlement_date": { "type": [ "string", "null" ], - "format": "date-time", - "description": "Timestamp when the key was last used, if ever." - } - } - }, - "Team": { - "type": "object", - "description": "A Team represents your organization and its API configuration.", - "required": [ - "id", - "parent_id", - "name", - "legal_name", - "logo", - "api_version", - "status", - "products", - "keys", - "created_at", - "updated_at" - ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the team.", - "example": "team_PmL8JBBnQNpYZ" + "format": "date", + "description": "The expected or actual settlement date for the source side of the payment." }, - "parent_id": { + "destination_settlement_date": { "type": [ "string", "null" ], - "description": "Identifier of the parent team, if this is a child team." + "format": "date", + "description": "The expected or actual settlement date for the destination side of the payment." }, - "name": { - "type": "string", - "description": "Display name of the team.", - "example": "My Team" + "source_status": { + "type": [ + "string", + "null" + ], + "description": "The status of the source side of the payment." }, - "legal_name": { - "type": "string", - "description": "Legal business name of the team.", - "example": "My Company Inc." + "destination_status": { + "type": [ + "string", + "null" + ], + "description": "The status of the destination side of the payment." }, - "logo": { + "destination_payment_method": { "type": [ "string", "null" ], - "description": "URL of the team logo." + "description": "The payment method used for the destination." }, - "api_version": { - "type": "string", - "description": "The API version the team is configured to use.", - "example": "2025-12-01" + "fee": { + "type": [ + "object", + "null" + ], + "description": "Fee associated with the payment.", + "required": [ + "type", + "amount" + ], + "properties": { + "type": { + "type": "string", + "description": "The fee type.", + "enum": [ + "total" + ] + }, + "amount": { + "type": "integer", + "description": "Fee amount in cents.", + "minimum": 0 + } + } }, - "status": { + "type": { "type": "string", - "description": "Current status of the team.", + "description": "The type of payment.", "enum": [ - "active", - "verified", - "disabled", - "pending_disablement" + "standard", + "clearing" ] }, - "products": { - "type": "array", - "description": "List of products enabled for this team.", - "items": { - "$ref": "#/components/schemas/TeamProduct" - } + "error": { + "$ref": "#/components/schemas/PaymentResourceError" }, - "keys": { - "type": "array", - "description": "API keys associated with this team.", - "items": { - "$ref": "#/components/schemas/TeamKey" - } + "metadata": { + "$ref": "#/components/schemas/Metadata" }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the team was created." + "description": "Timestamp when the payment was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the team was last updated." + "description": "Timestamp when the payment was last updated." } } }, - "TeamResponse": { + "PaymentListResponse": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/ListEnvelope" }, { "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/Team" + "type": "array", + "items": { + "$ref": "#/components/schemas/Payment" + } } } } - ], - "example": { - "success": true, - "data": { - "id": "team_PmL8JBBnQNpYZ", - "parent_id": null, - "name": "My Team", - "legal_name": "My Company Inc.", - "logo": null, - "api_version": "2025-12-01", - "status": "active", - "products": [ - { - "type": "payments", - "enabled": true - } - ], - "keys": [ - { - "id": "key_123", - "type": "secret", - "deleted": false, - "created_at": "2026-01-15T18:30:00.000Z", - "updated_at": "2026-01-15T18:30:00.000Z", - "last_used_at": null - } - ], - "created_at": "2026-01-15T18:30:00.000Z", - "updated_at": "2026-01-15T18:30:00.000Z" - }, - "message": null - } + ] }, - "TeamCreateRequest": { + "PaymentCreateRequest": { "type": "object", - "description": "Request body for creating a child team.", + "description": "Request body for creating a payment.", "required": [ - "name" + "source", + "destination", + "amount", + "description" ], "properties": { - "name": { + "source": { "type": "string", - "description": "Display name for the new child team." + "description": "The source account ID.", + "pattern": "^acc_\\w+$" + }, + "destination": { + "type": "string", + "description": "The destination account ID.", + "pattern": "^acc_\\w+$" + }, + "amount": { + "type": "integer", + "description": "Payment amount in cents.", + "minimum": 1, + "example": 5000 + }, + "description": { + "type": "string", + "description": "Human-readable description for the payment." + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" + }, + "dry_run": { + "type": "boolean", + "description": "Validate the payment request without moving funds." + }, + "fee": { + "type": "object", + "description": "Optional fee configuration for the payment.", + "properties": { + "type": { + "type": "string", + "description": "The fee type.", + "enum": [ + "total" + ] + }, + "amount": { + "type": "integer", + "description": "Fee amount in cents.", + "minimum": 0 + } + } + } + } + }, + "PaymentResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Payment" + } + } } - } + ] }, - "TeamEncryptionKeyRequest": { - "type": "object", - "description": "Request body for setting the default encryption key.", + "PaymentReversalResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when a payment reversal fails.", "required": [ - "key" + "type", + "code", + "sub_type", + "message" ], "properties": { - "key": { + "type": { "type": "string", - "description": "The encryption key value." + "description": "The category of reversal error.", + "enum": [ + "PAYMENT_REVERSAL_FAILED" + ] + }, + "code": { + "type": "integer", + "description": "Numeric error code (14XXX range).", + "enum": [ + 14001, + 14002, + 14003 + ] + }, + "sub_type": { + "type": "string", + "description": "Specific reversal error classification.", + "enum": [ + "PAYMENT_REVERSAL_INSUFFICIENT_FUNDS", + "PAYMENT_REVERSAL_UNAUTHORIZED", + "PAYMENT_REVERSAL_INVALID_ACCOUNT" + ] + }, + "message": { + "type": "string", + "description": "Human-readable error description." } + }, + "example": { + "type": "PAYMENT_REVERSAL_FAILED", + "code": 14001, + "sub_type": "PAYMENT_REVERSAL_INSUFFICIENT_FUNDS", + "message": "Payment reversal failed due to insufficient funds from the account." } }, - "MLEPublicKey": { + "PaymentReversal": { "type": "object", - "description": "An MLE (Message-Level Encryption) public key for the team.", + "description": "A reversal for a payment, representing a return of funds.", "required": [ "id", - "jwk", + "pmt_id", + "status", + "direction", + "trace_id", + "target_account", + "amount", + "description", + "fee", + "error", "created_at", "updated_at" ], "properties": { "id": { "type": "string", - "description": "Unique identifier for the public key." + "description": "Unique identifier for the reversal.", + "pattern": "^rvs_\\w+$", + "example": "rvs_dKe9ehC3hEBYy" }, - "jwk": { - "type": "object", - "description": "JSON Web Key (JWK) representation of the public key.", - "additionalProperties": true + "pmt_id": { + "type": "string", + "description": "Identifier of the payment being reversed.", + "pattern": "^pmt_\\w+$" + }, + "status": { + "type": "string", + "description": "Current status of the reversal.", + "enum": [ + "pending_approval", + "pending", + "processing", + "failed", + "sent", + "pending_settlement" + ] + }, + "direction": { + "type": "string", + "description": "Direction of the reversal relative to the original payment.", + "enum": [ + "credit", + "debit" + ] + }, + "trace_id": { + "type": [ + "string", + "null" + ], + "description": "Trace identifier for the reversal." + }, + "target_account": { + "type": [ + "string", + "null" + ], + "description": "The target account for the reversal." + }, + "amount": { + "type": "integer", + "description": "Reversal amount in cents.", + "minimum": 0 + }, + "description": { + "type": [ + "string", + "null" + ], + "description": "Human-readable description for the reversal." + }, + "fee": { + "type": [ + "object", + "null" + ], + "description": "Fee information for the reversal." + }, + "error": { + "$ref": "#/components/schemas/PaymentReversalResourceError" }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the public key was created." + "description": "Timestamp when the reversal was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the public key was last updated." + "description": "Timestamp when the reversal was last updated." } } }, - "MLEPublicKeyListResponse": { + "PaymentReversalListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -19189,28 +16095,14 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/MLEPublicKey" + "$ref": "#/components/schemas/PaymentReversal" } } } } ] }, - "MLEPublicKeyCreateRequest": { - "type": "object", - "description": "Request body for creating an MLE public key.", - "required": [ - "jwk" - ], - "properties": { - "jwk": { - "type": "object", - "description": "JSON Web Key (JWK) to register.", - "additionalProperties": true - } - } - }, - "MLEPublicKeyResponse": { + "PaymentReversalResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -19219,93 +16111,58 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/MLEPublicKey" + "$ref": "#/components/schemas/PaymentReversal" } } } ] }, - "WebhookStatus": { - "type": "string", - "enum": [ - "active", - "requires_attention", - "disabled", - "deleted" - ] + "PaymentReversalUpdateRequest": { + "type": "object", + "description": "Request body for updating a payment reversal.", + "properties": { + "status": { + "type": "string", + "description": "Updated status for the reversal." + } + } }, - "WebhookResourceError": { - "type": [ - "object", - "null" - ], - "description": "Error details when a webhook is disabled or requires attention.", + "ReportCreateRequest": { + "type": "object", + "description": "Request body for creating a report.", "required": [ - "type", - "code", - "sub_type", - "message" + "type" ], "properties": { "type": { "type": "string", - "description": "The category of webhook error.", - "enum": [ - "WEBHOOK_DISABLED", - "WEBHOOK_REQUIRES_ATTENTION" - ] - }, - "code": { - "type": "integer", - "description": "Numeric error code (25XXX range).", - "enum": [ - 25001, - 25002, - 25003, - 25004, - 25005, - 25006, - 25007, - 25008, - 25009 - ] - }, - "sub_type": { - "type": "string", - "description": "Specific webhook error classification.", + "description": "The type of report to generate.", "enum": [ - "WEBHOOK_DISABLED_FAILED_OTHER", - "WEBHOOK_DISABLED_RECEIVED_4XX_ERROR", - "WEBHOOK_DISABLED_RECEIVED_5XX_ERROR", - "WEBHOOK_DISABLED_TIMEOUT_ON_RESPONSE", - "WEBHOOK_DISABLED_BY_USER", - "WEBHOOK_REQUIRES_ATTENTION_FAILED_OTHER", - "WEBHOOK_REQUIRES_ATTENTION_RECEIVED_4XX_ERROR", - "WEBHOOK_REQUIRES_ATTENTION_RECEIVED_5XX_ERROR", - "WEBHOOK_REQUIRES_ATTENTION_TIMEOUT_ON_RESPONSE" + "payments.created.current", + "payments.created.previous", + "payments.created.previous_day", + "payments.updated.current", + "payments.updated.previous", + "payments.failed.previous_day", + "ach.pull.upcoming", + "ach.pull.previous", + "ach.pull.nightly", + "ach.reversals.nightly", + "ach.debit.daily", + "entities.created.previous_day", + "reserve_fbo_balance.created.previous_day" ] - }, - "message": { - "type": "string", - "description": "Human-readable error description." } - }, - "example": { - "type": "WEBHOOK_DISABLED", - "code": 25002, - "sub_type": "WEBHOOK_DISABLED_RECEIVED_4XX_ERROR", - "message": "Webhook failed 25 times with a client error (4XX type)." } }, - "Webhook": { + "Report": { "type": "object", + "description": "A Report is a downloadable file containing aggregated data about payments, entities, or other resources.", "required": [ "id", "type", "url", "status", - "expand_event", - "error", "metadata", "created_at", "updated_at" @@ -19313,27 +16170,43 @@ "properties": { "id": { "type": "string", - "description": "Unique identifier for the webhook.", - "example": "whk_cSGjA6d9N8y8v" + "description": "Unique identifier for the report.", + "pattern": "^rpt_\\w+$", + "example": "rpt_cj2mkA3hFyHT5" }, "type": { - "$ref": "#/components/schemas/WebhookType" + "type": "string", + "description": "The type of report.", + "enum": [ + "payments.created.current", + "payments.created.previous", + "payments.created.previous_day", + "payments.updated.current", + "payments.updated.previous", + "payments.failed.previous_day", + "ach.pull.upcoming", + "ach.pull.previous", + "ach.pull.nightly", + "ach.reversals.nightly", + "ach.debit.daily", + "entities.created.previous_day", + "reserve_fbo_balance.created.previous_day" + ] }, "url": { - "type": "string", - "format": "uri", - "description": "URL to receive webhook events.", - "example": "https://example.com/webhooks" + "type": [ + "string", + "null" + ], + "description": "Download URL for the completed report. Only available when status is `completed`." }, "status": { - "$ref": "#/components/schemas/WebhookStatus" - }, - "expand_event": { - "type": "boolean", - "description": "Whether to include the full resource data in the webhook payload." - }, - "error": { - "$ref": "#/components/schemas/WebhookResourceError" + "type": "string", + "description": "Current processing status of the report.", + "enum": [ + "processing", + "completed" + ] }, "metadata": { "$ref": "#/components/schemas/Metadata" @@ -19341,298 +16214,104 @@ "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the webhook was created." + "description": "Timestamp when the report was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the webhook was last updated." + "description": "Timestamp when the report was last updated." } } }, - "WebhookListResponse": { + "ReportResponse": { "allOf": [ { - "$ref": "#/components/schemas/ListEnvelope" + "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Webhook" - } + "$ref": "#/components/schemas/Report" } } } ] }, - "WebhookCreateRequest": { + "SecretStatus": { + "type": "string", + "enum": [ + "active", + "deleted" + ] + }, + "Secret": { "type": "object", "required": [ - "type", - "url" + "id", + "metadata", + "status", + "created_at", + "updated_at" ], "properties": { - "type": { - "$ref": "#/components/schemas/WebhookType" - }, - "url": { + "id": { "type": "string", - "format": "uri", - "description": "URL to receive webhook events." + "description": "Unique identifier for the secret.", + "example": "sec_dMnRPmJQ4ZkxY" }, - "auth_token": { - "type": "string", - "description": "Authentication token to include in outbound webhook request headers. This value is write-only.", - "writeOnly": true + "metadata": { + "$ref": "#/components/schemas/Metadata" }, - "hmac_secret": { - "type": "string", - "description": "HMAC secret used to sign outbound webhook deliveries. This value is write-only.", - "writeOnly": true + "status": { + "$ref": "#/components/schemas/SecretStatus" }, - "expand_event": { - "type": "boolean", - "description": "Whether to include the full resource data in the webhook payload." + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the secret was created." }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the secret was last updated." } } }, - "WebhookResponse": { - "allOf": [ - { - "$ref": "#/components/schemas/SuccessEnvelope" - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Webhook" - } - } - } - ] - }, - "WebhookDeleteResponse": { + "SecretListResponse": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/ListEnvelope" }, { "type": "object", "properties": { "data": { - "type": [ - "object", - "null" - ], - "example": null + "type": "array", + "items": { + "$ref": "#/components/schemas/Secret" + } } } } ] }, - "WebhookUpdateRequest": { - "type": "object", - "required": [ - "status" - ], - "properties": { - "status": { - "$ref": "#/components/schemas/WebhookStatus" - } - } - }, - "OpalSessionMode": { - "type": "string", - "description": "The mode that determines which flows are configured for the session.", - "enum": [ - "identity_verification", - "card_connect", - "connect", - "account_verification", - "transactions" - ] - }, - "OpalSession": { + "SecretCreateRequest": { "type": "object", - "description": "An Opal session representing a client-side workflow for identity verification, account connection, or account verification.", "required": [ - "id", - "config", - "entity", - "mode", - "idv", - "cxn", - "avf", - "txn", - "completed_at", - "created_at", - "updated_at" + "value" ], "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the session.", - "example": "osess_4kR8mNpL2xQvW7jY" - }, - "config": { - "type": "object", - "description": "Team-level configuration snapshot for the session.", - "properties": { - "name": { - "type": "string", - "description": "Team display name." - }, - "logo": { - "type": [ - "string", - "null" - ], - "description": "Team logo URL." - }, - "opal_should_prefill_entities": { - "type": "boolean", - "description": "Whether to prefill entity information." - }, - "primary_color": { - "type": [ - "string", - "null" - ], - "description": "Primary brand color." - }, - "event_channel": { - "type": [ - "string", - "null" - ], - "description": "Event channel identifier." - }, - "accounts_liability_allow_number_update": { - "type": "boolean", - "description": "Whether account number updates are allowed." - }, - "appearance": { - "type": "string", - "enum": [ - "light", - "dark", - "system" - ], - "description": "UI appearance theme." - } - } - }, - "entity": { - "type": "object", - "description": "Minimal entity representation for the session.", - "properties": { - "id": { - "type": "string", - "description": "Entity identifier." - }, - "individual": { - "type": [ - "object", - "null" - ], - "description": "Individual entity details." - }, - "address": { - "type": [ - "object", - "null" - ], - "description": "Entity address." - }, - "status": { - "type": "string", - "description": "Entity status." - }, - "verification": { - "type": "object", - "description": "Entity verification state.", - "properties": { - "identity": { - "type": "object", - "properties": { - "matched": { - "type": "boolean" - }, - "verified": { - "type": "boolean" - } - } - }, - "phone": { - "type": "object", - "properties": { - "verified": { - "type": "boolean" - } - } - } - } - } - } - }, - "mode": { - "$ref": "#/components/schemas/OpalSessionMode" - }, - "idv": { - "type": [ - "object", - "null" - ], - "description": "Identity verification flow configuration and state." - }, - "cxn": { - "type": [ - "object", - "null" - ], - "description": "Account connection flow configuration and state." - }, - "avf": { - "type": [ - "object", - "null" - ], - "description": "Account verification flow configuration and state." - }, - "txn": { - "type": [ - "object", - "null" - ], - "description": "Transactions flow configuration and state." - }, - "completed_at": { - "type": [ - "string", - "null" - ], - "format": "date-time", - "description": "Timestamp when the session was completed, or null if still in progress." - }, - "created_at": { + "value": { "type": "string", - "format": "date-time", - "description": "Timestamp when the session was created." + "description": "The secret value to store securely." }, - "updated_at": { - "type": "string", - "format": "date-time", - "description": "Timestamp when the session was last updated." + "metadata": { + "$ref": "#/components/schemas/Metadata" } } }, - "OpalSessionResponse": { + "SecretResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -19641,264 +16320,287 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/OpalSession" + "$ref": "#/components/schemas/Secret" } } } ] }, - "OpalCardConnectAccountFilters": { + "TeamProduct": { "type": "object", - "description": "Account filters for the card_connect mode.", "properties": { - "exclude": { - "type": "object", - "properties": { - "mch_ids": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Merchant IDs to exclude." - }, - "unverified_account_numbers": { - "type": "boolean", - "description": "Whether to exclude accounts with unverified numbers." - } - } + "type": { + "type": "string", + "description": "The product type." + }, + "enabled": { + "type": "boolean", + "description": "Whether this product is enabled for the team." } } }, - "OpalConnectAccountFilters": { + "TeamKey": { "type": "object", - "description": "Account filters for the connect mode.", "properties": { - "include": { - "type": "object", - "properties": { - "account_types": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Account liability types to include." - }, - "products": { - "type": "array", - "minItems": 1, - "items": { - "type": "string" - }, - "description": "Required products to filter by." - } - } + "id": { + "type": "string", + "description": "Unique identifier for the key." }, - "exclude": { - "type": "object", - "properties": { - "account_types": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Account liability types to exclude." - }, - "mch_ids": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Merchant IDs to exclude." - }, - "unverified_account_numbers": { - "type": "boolean", - "description": "Whether to exclude accounts with unverified numbers." - } - } + "type": { + "type": "string", + "description": "The key type.", + "enum": [ + "secret", + "public" + ] + }, + "deleted": { + "type": "boolean", + "description": "Whether this key has been deleted." + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the key was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the key was last updated." + }, + "last_used_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "Timestamp when the key was last used, if ever." } } }, - "OpalTokenCreateRequest": { + "Team": { "type": "object", - "description": "Request to create an Opal token. Supports three creation patterns: (A) existing entity via `entity_id`, (B) inline entity via `entity`, or (C) existing session via `session_id`. Exactly one of these three fields must be provided.", + "description": "A Team represents your organization and its API configuration.", + "required": [ + "id", + "parent_id", + "name", + "legal_name", + "logo", + "api_version", + "status", + "products", + "keys", + "created_at", + "updated_at" + ], "properties": { - "entity_id": { + "id": { "type": "string", - "description": "Pattern A: ID of an existing entity to use for the session.", - "example": "ent_au22b1fbFJbp8" + "description": "Unique identifier for the team.", + "example": "team_PmL8JBBnQNpYZ" }, - "entity": { - "type": "object", - "description": "Pattern B: Inline entity creation payload.", - "properties": { - "type": { - "type": "string", - "description": "Entity type.", - "enum": [ - "individual" - ] - }, - "individual": { - "type": "object", - "description": "Individual details for entity creation." - } - } + "parent_id": { + "type": [ + "string", + "null" + ], + "description": "Identifier of the parent team, if this is a child team." + }, + "name": { + "type": "string", + "description": "Display name of the team.", + "example": "My Team" }, - "session_id": { + "legal_name": { "type": "string", - "description": "Pattern C: ID of an existing session to create an additional token for.", - "example": "osess_4kR8mNpL2xQvW7jY" + "description": "Legal business name of the team.", + "example": "My Company Inc." + }, + "logo": { + "type": [ + "string", + "null" + ], + "description": "URL of the team logo." }, - "mode": { - "$ref": "#/components/schemas/OpalSessionMode" + "api_version": { + "type": "string", + "description": "The API version the team is configured to use.", + "example": "2025-12-01" }, - "appearance": { + "status": { "type": "string", + "description": "Current status of the team.", "enum": [ - "light", - "dark", - "system" - ], - "description": "UI appearance theme for the session." + "active", + "verified", + "disabled", + "pending_disablement" + ] }, - "identity_verification": { - "type": "object", - "description": "Configuration for the `identity_verification` mode. Required when `mode` is `identity_verification`.", - "properties": { - "skip_pii": { - "type": "array", - "items": { - "type": "string" - }, - "description": "PII fields to skip during identity verification." - } + "products": { + "type": "array", + "description": "List of products enabled for this team.", + "items": { + "$ref": "#/components/schemas/TeamProduct" } }, - "card_connect": { - "type": "object", - "description": "Configuration for the `card_connect` mode. Required when `mode` is `card_connect`.", - "required": [ - "selection_type" - ], - "properties": { - "selection_type": { - "type": "string", - "enum": [ - "single", - "multiple" - ], - "description": "Whether the user can select one or multiple cards." - }, - "account_filters": { - "$ref": "#/components/schemas/OpalCardConnectAccountFilters" - }, - "skip_pii": { - "type": "array", - "items": { - "type": "string" - }, - "description": "PII fields to skip during identity verification." - } + "keys": { + "type": "array", + "description": "API keys associated with this team.", + "items": { + "$ref": "#/components/schemas/TeamKey" } }, - "connect": { + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the team was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the team was last updated." + } + } + }, + "TeamResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { "type": "object", - "description": "Configuration for the `connect` mode. Required when `mode` is `connect`.", - "required": [ - "selection_type" - ], "properties": { - "selection_type": { - "type": "string", - "enum": [ - "single", - "multiple", - "all" - ], - "description": "Account selection behavior." - }, - "account_filters": { - "$ref": "#/components/schemas/OpalConnectAccountFilters" - }, - "skip_pii": { - "type": "array", - "items": { - "type": "string" - }, - "description": "PII fields to skip during identity verification." + "data": { + "$ref": "#/components/schemas/Team" } } - }, - "account_verification": { - "type": "object", - "description": "Configuration for the `account_verification` mode. Required when `mode` is `account_verification`.", - "required": [ - "account_id" + } + ], + "example": { + "success": true, + "data": { + "id": "team_PmL8JBBnQNpYZ", + "parent_id": null, + "name": "My Team", + "legal_name": "My Company Inc.", + "logo": null, + "api_version": "2025-12-01", + "status": "active", + "products": [ + { + "type": "payments", + "enabled": true + } ], - "properties": { - "account_id": { - "type": "string", - "description": "ID of the account to verify." - }, - "intent": { - "type": "string", - "enum": [ - "data", - "payments", - "transactions" - ], - "description": "The intent for account verification." + "keys": [ + { + "id": "key_123", + "type": "secret", + "deleted": false, + "created_at": "2026-01-15T18:30:00.000Z", + "updated_at": "2026-01-15T18:30:00.000Z", + "last_used_at": null } - } + ], + "created_at": "2026-01-15T18:30:00.000Z", + "updated_at": "2026-01-15T18:30:00.000Z" }, - "transactions": { - "type": "object", - "description": "Configuration for the `transactions` mode. Required when `mode` is `transactions`." + "message": null + } + }, + "TeamCreateRequest": { + "type": "object", + "description": "Request body for creating a child team.", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "Display name for the new child team." + } + } + }, + "TeamEncryptionKeyRequest": { + "type": "object", + "description": "Request body for setting the default encryption key.", + "required": [ + "key" + ], + "properties": { + "key": { + "type": "string", + "description": "The encryption key value." } } }, - "OpalToken": { + "MLEPublicKey": { "type": "object", - "description": "A short-lived token used to authenticate an Opal session from a client application.", + "description": "An MLE (Message-Level Encryption) public key for the team.", "required": [ - "token", - "session_id", - "valid_until" + "id", + "jwk", + "created_at", + "updated_at" ], "properties": { - "token": { + "id": { "type": "string", - "description": "The bearer token value used for Opal client authentication.", - "example": "otkn_yVf8MKZcGj3a9P2xLwR7nT" + "description": "Unique identifier for the public key." + }, + "jwk": { + "type": "object", + "description": "JSON Web Key (JWK) representation of the public key.", + "additionalProperties": true }, - "session_id": { + "created_at": { "type": "string", - "description": "Unique identifier for the associated Opal session.", - "example": "osess_4kR8mNpL2xQvW7jY" + "format": "date-time", + "description": "Timestamp when the public key was created." }, - "valid_until": { + "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when this token expires (30 minutes after creation)." + "description": "Timestamp when the public key was last updated." } } }, - "OpalTokenResponse": { + "MLEPublicKeyListResponse": { "allOf": [ { - "$ref": "#/components/schemas/SuccessEnvelope" + "$ref": "#/components/schemas/ListEnvelope" }, { "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/OpalToken" + "type": "array", + "items": { + "$ref": "#/components/schemas/MLEPublicKey" + } } } } ] }, - "OpalNullResponse": { + "MLEPublicKeyCreateRequest": { + "type": "object", + "description": "Request body for creating an MLE public key.", + "required": [ + "jwk" + ], + "properties": { + "jwk": { + "type": "object", + "description": "JSON Web Key (JWK) to register.", + "additionalProperties": true + } + } + }, + "MLEPublicKeyResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -19907,73 +16609,138 @@ "type": "object", "properties": { "data": { - "type": [ - "object", - "null" - ], - "example": null + "$ref": "#/components/schemas/MLEPublicKey" } } } ] }, - "OpalTokenUpdateRequest": { - "type": "object", - "description": "Request body for updating an Opal token session by executing a flow operation.", + "WebhookStatus": { + "type": "string", + "enum": [ + "active", + "requires_attention", + "disabled", + "deleted" + ] + }, + "WebhookResourceError": { + "type": [ + "object", + "null" + ], + "description": "Error details when a webhook is disabled or requires attention.", + "required": [ + "type", + "code", + "sub_type", + "message" + ], "properties": { - "data": { - "type": "object", - "description": "Operation-specific data payload. The shape depends on the flow type and operation being executed." + "type": { + "type": "string", + "description": "The category of webhook error.", + "enum": [ + "WEBHOOK_DISABLED", + "WEBHOOK_REQUIRES_ATTENTION" + ] + }, + "code": { + "type": "integer", + "description": "Numeric error code (25XXX range).", + "enum": [ + 25001, + 25002, + 25003, + 25004, + 25005, + 25006, + 25007, + 25008, + 25009 + ] + }, + "sub_type": { + "type": "string", + "description": "Specific webhook error classification.", + "enum": [ + "WEBHOOK_DISABLED_FAILED_OTHER", + "WEBHOOK_DISABLED_RECEIVED_4XX_ERROR", + "WEBHOOK_DISABLED_RECEIVED_5XX_ERROR", + "WEBHOOK_DISABLED_TIMEOUT_ON_RESPONSE", + "WEBHOOK_DISABLED_BY_USER", + "WEBHOOK_REQUIRES_ATTENTION_FAILED_OTHER", + "WEBHOOK_REQUIRES_ATTENTION_RECEIVED_4XX_ERROR", + "WEBHOOK_REQUIRES_ATTENTION_RECEIVED_5XX_ERROR", + "WEBHOOK_REQUIRES_ATTENTION_TIMEOUT_ON_RESPONSE" + ] + }, + "message": { + "type": "string", + "description": "Human-readable error description." } + }, + "example": { + "type": "WEBHOOK_DISABLED", + "code": 25002, + "sub_type": "WEBHOOK_DISABLED_RECEIVED_4XX_ERROR", + "message": "Webhook failed 25 times with a client error (4XX type)." } }, - "OpalEvent": { + "Webhook": { "type": "object", - "description": "An event recorded during an Opal session, following the `..` type pattern.", "required": [ + "id", "type", - "mode", - "object", - "action", - "timestamp", - "data" + "url", + "status", + "expand_event", + "error", + "metadata", + "created_at", + "updated_at" ], "properties": { - "type": { + "id": { "type": "string", - "description": "Full event type in the format `..`.", - "example": "card_connect.flow.started" + "description": "Unique identifier for the webhook.", + "example": "whk_cSGjA6d9N8y8v" }, - "mode": { - "type": "string", - "description": "The session mode that produced this event.", - "example": "card_connect" + "type": { + "$ref": "#/components/schemas/WebhookType" }, - "object": { + "url": { "type": "string", - "description": "The object within the mode that the event relates to.", - "example": "flow" + "format": "uri", + "description": "URL to receive webhook events.", + "example": "https://example.com/webhooks" }, - "action": { - "type": "string", - "description": "The action that occurred on the object.", - "example": "started" + "status": { + "$ref": "#/components/schemas/WebhookStatus" }, - "timestamp": { + "expand_event": { + "type": "boolean", + "description": "Whether to include the full resource data in the webhook payload." + }, + "error": { + "$ref": "#/components/schemas/WebhookResourceError" + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" + }, + "created_at": { "type": "string", "format": "date-time", - "description": "ISO 8601 timestamp of when the event occurred." + "description": "Timestamp when the webhook was created." }, - "data": { - "type": [ - "object", - "null" - ], - "description": "Optional event-specific data payload." + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the webhook was last updated." } } }, - "OpalEventListResponse": { + "WebhookListResponse": { "allOf": [ { "$ref": "#/components/schemas/ListEnvelope" @@ -19984,43 +16751,48 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/OpalEvent" + "$ref": "#/components/schemas/Webhook" } } } } ] }, - "OpalEventCreateRequest": { + "WebhookCreateRequest": { "type": "object", - "description": "Request to record one or more events for the current Opal session.", "required": [ - "events" + "type", + "url" ], "properties": { - "events": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "required": [ - "action" - ], - "properties": { - "action": { - "type": "string", - "description": "Event action identifier." - }, - "metadata": { - "type": "object", - "description": "Optional metadata associated with the event." - } - } - } + "type": { + "$ref": "#/components/schemas/WebhookType" + }, + "url": { + "type": "string", + "format": "uri", + "description": "URL to receive webhook events." + }, + "auth_token": { + "type": "string", + "description": "Authentication token to include in outbound webhook request headers. This value is write-only.", + "writeOnly": true + }, + "hmac_secret": { + "type": "string", + "description": "HMAC secret used to sign outbound webhook deliveries. This value is write-only.", + "writeOnly": true + }, + "expand_event": { + "type": "boolean", + "description": "Whether to include the full resource data in the webhook payload." + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" } } }, - "ObjectResponse": { + "WebhookResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -20029,44 +16801,40 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/JsonObject" + "$ref": "#/components/schemas/Webhook" } } } - ], - "example": { - "success": true, - "data": { - "id": "obj_123" - }, - "message": null - } + ] }, - "ObjectListResponse": { + "WebhookDeleteResponse": { "allOf": [ { - "$ref": "#/components/schemas/ListEnvelope" + "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/JsonObject" - } + "type": [ + "object", + "null" + ], + "example": null } } } + ] + }, + "WebhookUpdateRequest": { + "type": "object", + "required": [ + "status" ], - "example": { - "success": true, - "data": [ - { - "id": "obj_123" - } - ], - "message": null + "properties": { + "status": { + "$ref": "#/components/schemas/WebhookStatus" + } } } }, diff --git a/latest/openapi.bundled.yaml b/latest/openapi.bundled.yaml index 1886985..fc93ff1 100644 --- a/latest/openapi.bundled.yaml +++ b/latest/openapi.bundled.yaml @@ -140,10 +140,6 @@ tags: description: Sandbox event simulation - name: Simulate Payments description: Sandbox payment simulation - - name: Opal - description: Opal client-side session and token management - - name: Elements - description: Client-side Element endpoints paths: /.well-known/jwks.json: get: @@ -5018,234 +5014,6 @@ paths: $ref: '#/components/responses/RateLimited' '500': $ref: '#/components/responses/InternalError' - /opal/token: - get: - operationId: retrieveOpalToken - summary: Retrieve an Opal session - description: Returns the current state of the Opal session associated with the authenticated token. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: The current session state. - content: - application/json: - schema: - $ref: '#/components/schemas/OpalSessionResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '429': - $ref: '#/components/responses/RateLimited' - '500': - $ref: '#/components/responses/InternalError' - post: - operationId: createOpalToken - summary: Create an Opal token - description: 'Creates a new Opal token and, depending on the creation pattern, a new session. Supports three patterns: (A) provide `entity_id` + `mode` + mode config, (B) provide inline `entity` + `mode` + mode config, or (C) provide `session_id` to create an additional token for an existing session.' - tags: - - Opal - security: - - SecretKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/OpalTokenCreateRequest' - example: - entity_id: ent_au22b1fbFJbp8 - mode: card_connect - card_connect: - selection_type: single - responses: - '200': - description: The created Opal token. - content: - application/json: - schema: - $ref: '#/components/schemas/OpalTokenResponse' - example: - success: true - data: - token: otkn_yVf8MKZcGj3a9P2xLwR7nT - session_id: osess_4kR8mNpL2xQvW7jY - valid_until: '2026-03-14T19:30:00.000Z' - message: null - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '422': - $ref: '#/components/responses/UnprocessableEntity' - '429': - $ref: '#/components/responses/RateLimited' - '500': - $ref: '#/components/responses/InternalError' - delete: - operationId: deactivateOpalToken - summary: Deactivate an Opal token - description: Deactivates the authenticated Opal token, preventing further use. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: Token deactivated successfully. - content: - application/json: - schema: - $ref: '#/components/schemas/OpalNullResponse' - example: - success: true - data: null - message: null - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '429': - $ref: '#/components/responses/RateLimited' - '500': - $ref: '#/components/responses/InternalError' - /opal/token/{flow_type}/{operation}: - put: - operationId: updateOpalToken - summary: Execute an Opal flow operation - description: Executes an operation within a specific flow of the Opal session. The flow type and operation determine which step of the workflow is advanced. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: flow_type - in: path - required: true - description: The flow type to operate on. - schema: - type: string - enum: - - idv - - cxn - - avf - - txn - - name: operation - in: path - required: true - description: The operation to execute within the flow. - schema: - type: string - requestBody: - required: false - content: - application/json: - schema: - $ref: '#/components/schemas/OpalTokenUpdateRequest' - example: - data: {} - responses: - '200': - description: The updated session state. - content: - application/json: - schema: - $ref: '#/components/schemas/OpalSessionResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '422': - $ref: '#/components/responses/UnprocessableEntity' - '429': - $ref: '#/components/responses/RateLimited' - '500': - $ref: '#/components/responses/InternalError' - /opal/events: - post: - operationId: createOpalEvents - summary: Record Opal events - description: Records one or more events for the current Opal session. Events are used to track user interactions within the Opal client. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/OpalEventCreateRequest' - example: - events: - - action: card_connect.flow.started - metadata: {} - responses: - '200': - description: Events recorded successfully. - content: - application/json: - schema: - $ref: '#/components/schemas/OpalNullResponse' - example: - success: true - data: null - message: null - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '429': - $ref: '#/components/responses/RateLimited' - '500': - $ref: '#/components/responses/InternalError' - get: - operationId: listOpalEvents - summary: List Opal events - description: Returns all non-internal events for the current Opal session. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: A list of session events. - content: - application/json: - schema: - $ref: '#/components/schemas/OpalEventListResponse' - example: - success: true - data: - - type: card_connect.flow.started - mode: card_connect - object: flow - action: started - timestamp: '2026-03-14T19:00:00.000Z' - data: null - message: null - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '429': - $ref: '#/components/responses/RateLimited' - '500': - $ref: '#/components/responses/InternalError' /simulate/accounts/{accountId}/verification_sessions/{avfId}/amounts: get: operationId: simulateRetrieveVerificationAmounts @@ -5633,1387 +5401,36 @@ paths: - name: pmt_inst_id in: path required: true - description: Unique identifier for the payment instrument. - schema: - type: string - pattern: ^pmt_inst_\w+$ - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - amount - properties: - amount: - type: integer - description: Payment amount in cents. - minimum: 1 - responses: - '200': - description: The simulated payment result. - content: - application/json: - schema: - $ref: '#/components/schemas/PaymentResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/token: - post: - operationId: elementsCreateToken - deprecated: true - summary: Create an element token - description: | - Creates a new element token for client-side use. The token is scoped to a specific entity - and has an expiration. Use this server-side to generate tokens for your frontend. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - entity_id - - type - properties: - entity_id: - type: string - description: The entity ID to scope the token to. - pattern: ^ent_\w+$ - type: - type: string - description: The type of element token to create. - element_type: - type: string - description: The specific element type for the token. - responses: - '200': - description: The created element token. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/token/{pk_elem_id}/results: - get: - operationId: elementsRetrieveSessionResults - deprecated: true - summary: Retrieve element session results - description: Returns the results of a completed element session. Use this to retrieve data collected during an element flow. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: pk_elem_id - in: path - required: true - description: The element token identifier. - schema: - type: string - pattern: ^pk_elem_\w+$ - responses: - '200': - description: The session results. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/sessions/{session_id}: - get: - operationId: elementsRetrieveSession - deprecated: true - summary: Retrieve an element session - description: Returns a single element session by its identifier. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: session_id - in: path - required: true - description: Unique identifier for the element session. - schema: - type: string - responses: - '200': - description: The requested session. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - put: - operationId: elementsUpdateSession - deprecated: true - summary: Update an element session - description: Updates an element session by its identifier. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: session_id - in: path - required: true - description: Unique identifier for the element session. - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Session update parameters. - responses: - '200': - description: The updated session. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/accounts/exchange: - post: - operationId: elementsExchangeAccount - deprecated: true - summary: Exchange an account - description: Exchanges account information for use in element flows. This endpoint is called server-side. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account exchange parameters. - responses: - '200': - description: The exchanged account data. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/config: - get: - operationId: elementsRetrieveConfig - deprecated: true - summary: Retrieve element configuration - description: Returns the element configuration for the current token. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: The element configuration. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/config/{pk_elem_id}: - get: - operationId: elementsRetrieveConfigById - deprecated: true - summary: Retrieve element configuration by ID - description: Returns the element configuration for a specific element token ID. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: pk_elem_id - in: path - required: true - description: The element token identifier. - schema: - type: string - pattern: ^pk_elem_\w+$ - responses: - '200': - description: The element configuration. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/entities/me: - get: - operationId: elementsRetrieveEntity - deprecated: true - summary: Retrieve the current entity - description: Returns the entity associated with the current element token. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: The entity associated with the token. - content: - application/json: - schema: - $ref: '#/components/schemas/EntityResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/entities/me/init_mno_verification: - post: - operationId: elementsInitMnoVerification - deprecated: true - summary: Initialize MNO verification - description: Initiates a mobile network operator (MNO) verification for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: The MNO verification initialization result. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/accounts: - get: - operationId: listElementsAccounts - deprecated: true - summary: List element accounts - description: Returns a list of accounts accessible to the current element token. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: A list of accounts. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountListResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - post: - operationId: createElementsAccount - deprecated: true - summary: Create an element account - description: Creates a new account through the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account creation parameters. - responses: - '200': - description: The newly created account. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/accounts/{accountId}: - get: - operationId: retrieveElementsAccount - deprecated: true - summary: Retrieve an element account - description: Returns a single account by its identifier. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: ^acc_\w+$ - responses: - '200': - description: The requested account. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - put: - operationId: updateElementsAccount - deprecated: true - summary: Update an element account - description: Updates an account through the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: ^acc_\w+$ - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account update parameters. - responses: - '200': - description: The updated account. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/accounts/{accountId}/details: - get: - operationId: elementsRetrieveAccountDetails - deprecated: true - summary: Retrieve element account details - description: Returns detailed information for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: ^acc_\w+$ - responses: - '200': - description: Account details. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/accounts/{accountId}/transaction_stream: - post: - operationId: elementsInitTransactionStream - deprecated: true - summary: Initialize a transaction stream - description: Initiates a transaction stream for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: ^acc_\w+$ - responses: - '200': - description: The transaction stream initialization result. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/account_verification/accounts/{accountId}/avf_sessions/{avfId}: - put: - operationId: elementsUpdateAvfSession - deprecated: true - summary: Update a verification session - description: Updates a verification session for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: ^acc_\w+$ - - name: avfId - in: path - required: true - description: Unique identifier for the verification session. - schema: - type: string - pattern: ^avf_\w+$ - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Verification session update parameters. - responses: - '200': - description: The updated verification session. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountVerificationSessionResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/account_verification/avf_sessions/bulk_generate: - post: - operationId: elementsBulkGenerateAvfSessions - deprecated: true - summary: Bulk generate verification sessions - description: Generates verification sessions for multiple accounts at once. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Parameters for bulk verification session generation. - responses: - '200': - description: The generated verification sessions. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/accounts: - get: - operationId: elementsListAuthAccounts - deprecated: true - summary: List auth accounts - description: Returns a list of accounts available for authentication flows. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: A list of accounts for authentication. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountListResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/accounts/consent: - get: - operationId: elementsRetrieveAuthAccountsConsent - deprecated: true - summary: Retrieve auth accounts consent - description: Returns the current consent status for account authentication. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: The consent status. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - post: - operationId: elementsCreateAuthAccountsConsent - deprecated: true - summary: Create auth accounts consent - description: Creates or updates consent for account authentication. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Consent parameters. - responses: - '200': - description: The created consent. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/accounts_with_updatable_numbers: - get: - operationId: elementsListUpdatableNumbers - deprecated: true - summary: List accounts with updatable numbers - description: Returns accounts whose account numbers can be updated. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: A list of accounts with updatable numbers. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountListResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/accounts_with_updatable_numbers/{accountId}: - put: - operationId: elementsUpdateAccountNumber - deprecated: true - summary: Update an account number - description: Updates the account number for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: ^acc_\w+$ - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account number update parameters. - responses: - '200': - description: The updated account. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/entities: - put: - operationId: elementsUpdateAuthEntity - deprecated: true - summary: Update auth entity - description: Updates the entity associated with the current authentication session. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Entity update parameters. - responses: - '200': - description: The updated entity. - content: - application/json: - schema: - $ref: '#/components/schemas/EntityResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/entities/phone_verification: - post: - operationId: elementsCreatePhoneVerification - deprecated: true - summary: Create phone verification - description: Initiates a phone verification for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Phone verification parameters. - responses: - '200': - description: The phone verification result. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - put: - operationId: elementsUpdatePhoneVerification - deprecated: true - summary: Update phone verification - description: Completes or updates a phone verification for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Phone verification update parameters (e.g., OTP code). - responses: - '200': - description: The updated phone verification. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/entities/session: - post: - operationId: elementsCreateEntitySession - deprecated: true - summary: Create entity session - description: Creates an authentication session for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Session creation parameters. - responses: - '200': - description: The created entity session. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - put: - operationId: elementsUpdateEntitySession - deprecated: true - summary: Update entity session - description: Updates an authentication session for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Session update parameters. - responses: - '200': - description: The updated entity session. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/mortgages_with_missing_address: - get: - operationId: elementsListMortgagesMissingAddress - deprecated: true - summary: List mortgages missing address - description: Returns mortgage accounts that are missing property address information. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: A list of mortgage accounts missing address data. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountListResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/auth/mortgages_with_missing_address/{accountId}: - put: - operationId: elementsUpdateMortgageAddress - deprecated: true - summary: Update mortgage address - description: Updates the property address for a mortgage account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: accountId - in: path - required: true - description: Unique identifier for the mortgage account. - schema: - type: string - pattern: ^acc_\w+$ - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Address update parameters. - responses: - '200': - description: The updated account. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/balance_transfer/accounts: - get: - operationId: elementsListBalanceTransferAccounts - deprecated: true - summary: List balance transfer accounts - description: Returns accounts eligible for balance transfers. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: A list of accounts eligible for balance transfers. - content: - application/json: - schema: - $ref: '#/components/schemas/AccountListResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/balance_transfer/auth_token: - post: - operationId: elementsCreateBalanceTransferAuthToken - deprecated: true - summary: Create balance transfer auth token - description: Creates an authorization token for balance transfer operations. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Auth token creation parameters. - responses: - '200': - description: The created auth token. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/balance_transfer/session: - put: - operationId: elementsUpdateBalanceTransferSession - deprecated: true - summary: Update balance transfer session - description: Updates the balance transfer session state. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Balance transfer session update parameters. - responses: - '200': - description: The updated balance transfer session. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/connect/generate_next_step_token: - post: - operationId: elementsGenerateNextStepToken - deprecated: true - summary: Generate connect next step token - description: Generates a token for the next step in the connect flow. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: The generated next step token. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/connect/set_element_complete: - put: - operationId: elementsSetConnectComplete - deprecated: true - summary: Set connect element complete - description: Marks the connect element flow as complete. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: The updated connect element state. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/events: - post: - operationId: elementsCreateEvent - deprecated: true - summary: Create an element event - description: Creates an event from the element client. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Event data. - responses: - '200': - description: The created event. - content: - application/json: - schema: - $ref: '#/components/schemas/EventResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/link/credentials: - post: - operationId: elementsProcessLinkCredential - deprecated: true - summary: Process link credentials - description: Processes link credentials for account connection. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Link credential parameters. - responses: - '200': - description: The link credential processing result. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/merchants: - get: - operationId: elementsListMerchants - deprecated: true - summary: List merchants - description: Returns a list of merchants available in the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - responses: - '200': - description: A list of merchants. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectListResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/merchants/{mchId}: - get: - operationId: elementsRetrieveMerchant - deprecated: true - summary: Retrieve a merchant - description: Returns a single merchant by its identifier. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - name: mchId - in: path - required: true - description: Unique identifier for the merchant. - schema: - type: string - pattern: ^mch_\w+$ - responses: - '200': - description: The requested merchant. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '404': - $ref: '#/components/responses/NotFound' - '500': - $ref: '#/components/responses/InternalError' - /elements/merchants_parents: - get: - operationId: elementsListMerchantParents - deprecated: true - summary: List merchant parents - description: Returns a list of parent merchant groups. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - - $ref: '#/components/parameters/PageParam' - - $ref: '#/components/parameters/PageLimitParam' - - $ref: '#/components/parameters/PageCursorParam' - responses: - '200': - description: A list of parent merchants. - headers: - Pagination-Page: - description: Current page number. - schema: - type: integer - Pagination-Page-Count: - description: Total number of pages. - schema: - type: integer - Pagination-Page-Limit: - description: Number of items per page. - schema: - type: integer - Pagination-Total-Count: - description: Total number of items across all pages. - schema: - type: integer - Pagination-Page-Cursor-Prev: - description: Cursor for the previous page, if available. - schema: - type: - - string - - 'null' - Pagination-Page-Cursor-Next: - description: Cursor for the next page, if available. - schema: - type: - - string - - 'null' - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectListResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/transfer: - post: - operationId: elementsCreateTransfer - deprecated: true - summary: Create a transfer - description: Creates a transfer through the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Transfer creation parameters. - responses: - '200': - description: The created transfer. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/transfer/accounts/exchange: - post: - operationId: elementsExchangeTransferAccount - deprecated: true - summary: Exchange transfer account - description: Exchanges account information for a transfer operation. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' + description: Unique identifier for the payment instrument. + schema: + type: string + pattern: ^pmt_inst_\w+$ requestBody: required: true content: application/json: schema: type: object - description: Account exchange parameters. - responses: - '200': - description: The exchanged account data. - content: - application/json: - schema: - $ref: '#/components/schemas/ObjectResponse' - '400': - $ref: '#/components/responses/BadRequest' - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalError' - /elements/token/revoke: - delete: - operationId: elementsRevokeToken - deprecated: true - summary: Revoke element token - description: Revokes the current element token, invalidating it for future requests. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '#/components/parameters/method_version' + required: + - amount + properties: + amount: + type: integer + description: Payment amount in cents. + minimum: 1 responses: '200': - description: Token successfully revoked. + description: The simulated payment result. content: application/json: schema: - $ref: '#/components/schemas/ObjectResponse' + $ref: '#/components/schemas/PaymentResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalError' components: @@ -7024,24 +5441,6 @@ components: description: | Secret key authentication. Use your team's secret key (`sk_...`) as the Bearer token. All authenticated API endpoints require this scheme unless otherwise noted. - PublicKey: - type: http - scheme: bearer - description: | - Public key authentication for Element endpoints. Use a public element token (`pk_...`) - as the Bearer token. Element tokens are scoped to a specific entity and have an expiration. - SessionKey: - type: http - scheme: bearer - description: | - Session key authentication for Element session endpoints. Use a session element token - as the Bearer token. Created via POST /elements/token. - OpalToken: - type: http - scheme: bearer - description: | - Opal token authentication for Opal session endpoints. Use an Opal token (`otkn_...`) - as the Bearer token. Created via POST /opal/token using a secret key. parameters: MethodVersion: $ref: '#/components/parameters/method_version' @@ -12633,433 +11032,6 @@ components: properties: status: $ref: '#/components/schemas/WebhookStatus' - OpalSessionMode: - type: string - description: The mode that determines which flows are configured for the session. - enum: - - identity_verification - - card_connect - - connect - - account_verification - - transactions - OpalSession: - type: object - description: An Opal session representing a client-side workflow for identity verification, account connection, or account verification. - required: - - id - - config - - entity - - mode - - idv - - cxn - - avf - - txn - - completed_at - - created_at - - updated_at - properties: - id: - type: string - description: Unique identifier for the session. - example: osess_4kR8mNpL2xQvW7jY - config: - type: object - description: Team-level configuration snapshot for the session. - properties: - name: - type: string - description: Team display name. - logo: - type: - - string - - 'null' - description: Team logo URL. - opal_should_prefill_entities: - type: boolean - description: Whether to prefill entity information. - primary_color: - type: - - string - - 'null' - description: Primary brand color. - event_channel: - type: - - string - - 'null' - description: Event channel identifier. - accounts_liability_allow_number_update: - type: boolean - description: Whether account number updates are allowed. - appearance: - type: string - enum: - - light - - dark - - system - description: UI appearance theme. - entity: - type: object - description: Minimal entity representation for the session. - properties: - id: - type: string - description: Entity identifier. - individual: - type: - - object - - 'null' - description: Individual entity details. - address: - type: - - object - - 'null' - description: Entity address. - status: - type: string - description: Entity status. - verification: - type: object - description: Entity verification state. - properties: - identity: - type: object - properties: - matched: - type: boolean - verified: - type: boolean - phone: - type: object - properties: - verified: - type: boolean - mode: - $ref: '#/components/schemas/OpalSessionMode' - idv: - type: - - object - - 'null' - description: Identity verification flow configuration and state. - cxn: - type: - - object - - 'null' - description: Account connection flow configuration and state. - avf: - type: - - object - - 'null' - description: Account verification flow configuration and state. - txn: - type: - - object - - 'null' - description: Transactions flow configuration and state. - completed_at: - type: - - string - - 'null' - format: date-time - description: Timestamp when the session was completed, or null if still in progress. - created_at: - type: string - format: date-time - description: Timestamp when the session was created. - updated_at: - type: string - format: date-time - description: Timestamp when the session was last updated. - OpalSessionResponse: - allOf: - - $ref: '#/components/schemas/SuccessEnvelope' - - type: object - properties: - data: - $ref: '#/components/schemas/OpalSession' - OpalCardConnectAccountFilters: - type: object - description: Account filters for the card_connect mode. - properties: - exclude: - type: object - properties: - mch_ids: - type: array - items: - type: string - description: Merchant IDs to exclude. - unverified_account_numbers: - type: boolean - description: Whether to exclude accounts with unverified numbers. - OpalConnectAccountFilters: - type: object - description: Account filters for the connect mode. - properties: - include: - type: object - properties: - account_types: - type: array - items: - type: string - description: Account liability types to include. - products: - type: array - minItems: 1 - items: - type: string - description: Required products to filter by. - exclude: - type: object - properties: - account_types: - type: array - items: - type: string - description: Account liability types to exclude. - mch_ids: - type: array - items: - type: string - description: Merchant IDs to exclude. - unverified_account_numbers: - type: boolean - description: Whether to exclude accounts with unverified numbers. - OpalTokenCreateRequest: - type: object - description: 'Request to create an Opal token. Supports three creation patterns: (A) existing entity via `entity_id`, (B) inline entity via `entity`, or (C) existing session via `session_id`. Exactly one of these three fields must be provided.' - properties: - entity_id: - type: string - description: 'Pattern A: ID of an existing entity to use for the session.' - example: ent_au22b1fbFJbp8 - entity: - type: object - description: 'Pattern B: Inline entity creation payload.' - properties: - type: - type: string - description: Entity type. - enum: - - individual - individual: - type: object - description: Individual details for entity creation. - session_id: - type: string - description: 'Pattern C: ID of an existing session to create an additional token for.' - example: osess_4kR8mNpL2xQvW7jY - mode: - $ref: '#/components/schemas/OpalSessionMode' - appearance: - type: string - enum: - - light - - dark - - system - description: UI appearance theme for the session. - identity_verification: - type: object - description: Configuration for the `identity_verification` mode. Required when `mode` is `identity_verification`. - properties: - skip_pii: - type: array - items: - type: string - description: PII fields to skip during identity verification. - card_connect: - type: object - description: Configuration for the `card_connect` mode. Required when `mode` is `card_connect`. - required: - - selection_type - properties: - selection_type: - type: string - enum: - - single - - multiple - description: Whether the user can select one or multiple cards. - account_filters: - $ref: '#/components/schemas/OpalCardConnectAccountFilters' - skip_pii: - type: array - items: - type: string - description: PII fields to skip during identity verification. - connect: - type: object - description: Configuration for the `connect` mode. Required when `mode` is `connect`. - required: - - selection_type - properties: - selection_type: - type: string - enum: - - single - - multiple - - all - description: Account selection behavior. - account_filters: - $ref: '#/components/schemas/OpalConnectAccountFilters' - skip_pii: - type: array - items: - type: string - description: PII fields to skip during identity verification. - account_verification: - type: object - description: Configuration for the `account_verification` mode. Required when `mode` is `account_verification`. - required: - - account_id - properties: - account_id: - type: string - description: ID of the account to verify. - intent: - type: string - enum: - - data - - payments - - transactions - description: The intent for account verification. - transactions: - type: object - description: Configuration for the `transactions` mode. Required when `mode` is `transactions`. - OpalToken: - type: object - description: A short-lived token used to authenticate an Opal session from a client application. - required: - - token - - session_id - - valid_until - properties: - token: - type: string - description: The bearer token value used for Opal client authentication. - example: otkn_yVf8MKZcGj3a9P2xLwR7nT - session_id: - type: string - description: Unique identifier for the associated Opal session. - example: osess_4kR8mNpL2xQvW7jY - valid_until: - type: string - format: date-time - description: Timestamp when this token expires (30 minutes after creation). - OpalTokenResponse: - allOf: - - $ref: '#/components/schemas/SuccessEnvelope' - - type: object - properties: - data: - $ref: '#/components/schemas/OpalToken' - OpalNullResponse: - allOf: - - $ref: '#/components/schemas/SuccessEnvelope' - - type: object - properties: - data: - type: - - object - - 'null' - example: null - OpalTokenUpdateRequest: - type: object - description: Request body for updating an Opal token session by executing a flow operation. - properties: - data: - type: object - description: Operation-specific data payload. The shape depends on the flow type and operation being executed. - OpalEvent: - type: object - description: An event recorded during an Opal session, following the `..` type pattern. - required: - - type - - mode - - object - - action - - timestamp - - data - properties: - type: - type: string - description: Full event type in the format `..`. - example: card_connect.flow.started - mode: - type: string - description: The session mode that produced this event. - example: card_connect - object: - type: string - description: The object within the mode that the event relates to. - example: flow - action: - type: string - description: The action that occurred on the object. - example: started - timestamp: - type: string - format: date-time - description: ISO 8601 timestamp of when the event occurred. - data: - type: - - object - - 'null' - description: Optional event-specific data payload. - OpalEventListResponse: - allOf: - - $ref: '#/components/schemas/ListEnvelope' - - type: object - properties: - data: - type: array - items: - $ref: '#/components/schemas/OpalEvent' - OpalEventCreateRequest: - type: object - description: Request to record one or more events for the current Opal session. - required: - - events - properties: - events: - type: array - minItems: 1 - items: - type: object - required: - - action - properties: - action: - type: string - description: Event action identifier. - metadata: - type: object - description: Optional metadata associated with the event. - ObjectResponse: - allOf: - - $ref: '#/components/schemas/SuccessEnvelope' - - type: object - properties: - data: - $ref: '#/components/schemas/JsonObject' - example: - success: true - data: - id: obj_123 - message: null - ObjectListResponse: - allOf: - - $ref: '#/components/schemas/ListEnvelope' - - type: object - properties: - data: - type: array - items: - $ref: '#/components/schemas/JsonObject' - example: - success: true - data: - - id: obj_123 - message: null headers: Pagination-Page: description: Current page number. diff --git a/openapi/components/schemas/opal.yaml b/openapi/components/schemas/opal.yaml deleted file mode 100644 index f98a182..0000000 --- a/openapi/components/schemas/opal.yaml +++ /dev/null @@ -1,417 +0,0 @@ -OpalToken: - type: object - description: A short-lived token used to authenticate an Opal session from a client application. - required: - - token - - session_id - - valid_until - properties: - token: - type: string - description: The bearer token value used for Opal client authentication. - example: otkn_yVf8MKZcGj3a9P2xLwR7nT - session_id: - type: string - description: Unique identifier for the associated Opal session. - example: osess_4kR8mNpL2xQvW7jY - valid_until: - type: string - format: date-time - description: Timestamp when this token expires (30 minutes after creation). - -OpalSession: - type: object - description: An Opal session representing a client-side workflow for identity verification, account connection, or account verification. - required: - - id - - config - - entity - - mode - - idv - - cxn - - avf - - txn - - completed_at - - created_at - - updated_at - properties: - id: - type: string - description: Unique identifier for the session. - example: osess_4kR8mNpL2xQvW7jY - config: - type: object - description: Team-level configuration snapshot for the session. - properties: - name: - type: string - description: Team display name. - logo: - type: - - string - - 'null' - description: Team logo URL. - opal_should_prefill_entities: - type: boolean - description: Whether to prefill entity information. - primary_color: - type: - - string - - 'null' - description: Primary brand color. - event_channel: - type: - - string - - 'null' - description: Event channel identifier. - accounts_liability_allow_number_update: - type: boolean - description: Whether account number updates are allowed. - appearance: - type: string - enum: - - light - - dark - - system - description: UI appearance theme. - entity: - type: object - description: Minimal entity representation for the session. - properties: - id: - type: string - description: Entity identifier. - individual: - type: - - object - - 'null' - description: Individual entity details. - address: - type: - - object - - 'null' - description: Entity address. - status: - type: string - description: Entity status. - verification: - type: object - description: Entity verification state. - properties: - identity: - type: object - properties: - matched: - type: boolean - verified: - type: boolean - phone: - type: object - properties: - verified: - type: boolean - mode: - $ref: '#/OpalSessionMode' - idv: - type: - - object - - 'null' - description: Identity verification flow configuration and state. - cxn: - type: - - object - - 'null' - description: Account connection flow configuration and state. - avf: - type: - - object - - 'null' - description: Account verification flow configuration and state. - txn: - type: - - object - - 'null' - description: Transactions flow configuration and state. - completed_at: - type: - - string - - 'null' - format: date-time - description: Timestamp when the session was completed, or null if still in progress. - created_at: - type: string - format: date-time - description: Timestamp when the session was created. - updated_at: - type: string - format: date-time - description: Timestamp when the session was last updated. - -OpalEvent: - type: object - description: An event recorded during an Opal session, following the `..` type pattern. - required: - - type - - mode - - object - - action - - timestamp - - data - properties: - type: - type: string - description: "Full event type in the format `..`." - example: card_connect.flow.started - mode: - type: string - description: The session mode that produced this event. - example: card_connect - object: - type: string - description: The object within the mode that the event relates to. - example: flow - action: - type: string - description: The action that occurred on the object. - example: started - timestamp: - type: string - format: date-time - description: ISO 8601 timestamp of when the event occurred. - data: - type: - - object - - 'null' - description: Optional event-specific data payload. - -OpalSessionMode: - type: string - description: The mode that determines which flows are configured for the session. - enum: - - identity_verification - - card_connect - - connect - - account_verification - - transactions - -OpalTokenCreateRequest: - type: object - description: >- - Request to create an Opal token. Supports three creation patterns: - (A) existing entity via `entity_id`, (B) inline entity via `entity`, - or (C) existing session via `session_id`. Exactly one of these three - fields must be provided. - properties: - entity_id: - type: string - description: "Pattern A: ID of an existing entity to use for the session." - example: ent_au22b1fbFJbp8 - entity: - type: object - description: "Pattern B: Inline entity creation payload." - properties: - type: - type: string - description: Entity type. - enum: - - individual - individual: - type: object - description: Individual details for entity creation. - session_id: - type: string - description: "Pattern C: ID of an existing session to create an additional token for." - example: osess_4kR8mNpL2xQvW7jY - mode: - $ref: '#/OpalSessionMode' - appearance: - type: string - enum: - - light - - dark - - system - description: UI appearance theme for the session. - identity_verification: - type: object - description: Configuration for the `identity_verification` mode. Required when `mode` is `identity_verification`. - properties: - skip_pii: - type: array - items: - type: string - description: PII fields to skip during identity verification. - card_connect: - type: object - description: Configuration for the `card_connect` mode. Required when `mode` is `card_connect`. - required: - - selection_type - properties: - selection_type: - type: string - enum: - - single - - multiple - description: Whether the user can select one or multiple cards. - account_filters: - $ref: '#/OpalCardConnectAccountFilters' - skip_pii: - type: array - items: - type: string - description: PII fields to skip during identity verification. - connect: - type: object - description: Configuration for the `connect` mode. Required when `mode` is `connect`. - required: - - selection_type - properties: - selection_type: - type: string - enum: - - single - - multiple - - all - description: Account selection behavior. - account_filters: - $ref: '#/OpalConnectAccountFilters' - skip_pii: - type: array - items: - type: string - description: PII fields to skip during identity verification. - account_verification: - type: object - description: Configuration for the `account_verification` mode. Required when `mode` is `account_verification`. - required: - - account_id - properties: - account_id: - type: string - description: ID of the account to verify. - intent: - type: string - enum: - - data - - payments - - transactions - description: The intent for account verification. - transactions: - type: object - description: Configuration for the `transactions` mode. Required when `mode` is `transactions`. - -OpalTokenUpdateRequest: - type: object - description: Request body for updating an Opal token session by executing a flow operation. - properties: - data: - type: object - description: Operation-specific data payload. The shape depends on the flow type and operation being executed. - -OpalEventCreateRequest: - type: object - description: Request to record one or more events for the current Opal session. - required: - - events - properties: - events: - type: array - minItems: 1 - items: - type: object - required: - - action - properties: - action: - type: string - description: Event action identifier. - metadata: - type: object - description: Optional metadata associated with the event. - -OpalConnectAccountFilters: - type: object - description: Account filters for the connect mode. - properties: - include: - type: object - properties: - account_types: - type: array - items: - type: string - description: Account liability types to include. - products: - type: array - minItems: 1 - items: - type: string - description: Required products to filter by. - exclude: - type: object - properties: - account_types: - type: array - items: - type: string - description: Account liability types to exclude. - mch_ids: - type: array - items: - type: string - description: Merchant IDs to exclude. - unverified_account_numbers: - type: boolean - description: Whether to exclude accounts with unverified numbers. - -OpalCardConnectAccountFilters: - type: object - description: Account filters for the card_connect mode. - properties: - exclude: - type: object - properties: - mch_ids: - type: array - items: - type: string - description: Merchant IDs to exclude. - unverified_account_numbers: - type: boolean - description: Whether to exclude accounts with unverified numbers. - -OpalTokenResponse: - allOf: - - $ref: common.yaml#/SuccessEnvelope - - type: object - properties: - data: - $ref: '#/OpalToken' - -OpalSessionResponse: - allOf: - - $ref: common.yaml#/SuccessEnvelope - - type: object - properties: - data: - $ref: '#/OpalSession' - -OpalNullResponse: - allOf: - - $ref: common.yaml#/SuccessEnvelope - - type: object - properties: - data: - type: - - object - - 'null' - example: null - -OpalEventListResponse: - allOf: - - $ref: common.yaml#/ListEnvelope - - type: object - properties: - data: - type: array - items: - $ref: '#/OpalEvent' diff --git a/openapi/components/security_schemes.yaml b/openapi/components/security_schemes.yaml index 65917f4..6b4945c 100644 --- a/openapi/components/security_schemes.yaml +++ b/openapi/components/security_schemes.yaml @@ -5,23 +5,3 @@ SecretKey: Secret key authentication. Use your team's secret key (`sk_...`) as the Bearer token. All authenticated API endpoints require this scheme unless otherwise noted. -PublicKey: - type: http - scheme: bearer - description: | - Public key authentication for Element endpoints. Use a public element token (`pk_...`) - as the Bearer token. Element tokens are scoped to a specific entity and have an expiration. - -SessionKey: - type: http - scheme: bearer - description: | - Session key authentication for Element session endpoints. Use a session element token - as the Bearer token. Created via POST /elements/token. - -OpalToken: - type: http - scheme: bearer - description: | - Opal token authentication for Opal session endpoints. Use an Opal token (`otkn_...`) - as the Bearer token. Created via POST /opal/token using a secret key. diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml index 4d35a1e..4f4b2bf 100644 --- a/openapi/openapi.yaml +++ b/openapi/openapi.yaml @@ -101,10 +101,6 @@ tags: description: Sandbox event simulation - name: Simulate Payments description: Sandbox payment simulation -- name: Opal - description: Opal client-side session and token management -- name: Elements - description: Client-side Element endpoints paths: /.well-known/jwks.json: $ref: paths/well_known.yaml @@ -256,12 +252,6 @@ paths: $ref: paths/webhooks.yaml#/collection /webhooks/{webhookId}: $ref: paths/webhooks.yaml#/individual - /opal/token: - $ref: paths/opal.yaml#/token - /opal/token/{flow_type}/{operation}: - $ref: paths/opal.yaml#/token_update - /opal/events: - $ref: paths/opal.yaml#/events /simulate/accounts/{accountId}/verification_sessions/{avfId}/amounts: $ref: paths/simulate/accounts.yaml#/verification_amounts /simulate/accounts/{accountId}/transactions: @@ -280,78 +270,6 @@ paths: $ref: paths/simulate/payments.yaml#/update_status /simulate/payments/payment_instruments/{pmt_inst_id}: $ref: paths/simulate/payments.yaml#/payment_instrument - /elements/token: - $ref: paths/elements/sk.yaml#/create_token - /elements/token/{pk_elem_id}/results: - $ref: paths/elements/sk.yaml#/session_results - /elements/sessions/{session_id}: - $ref: paths/elements/sk.yaml#/sessions - /elements/accounts/exchange: - $ref: paths/elements/sk.yaml#/exchange_account - /elements/config: - $ref: paths/elements/pk.yaml#/config - /elements/config/{pk_elem_id}: - $ref: paths/elements/pk.yaml#/config_by_id - /elements/entities/me: - $ref: paths/elements/pk.yaml#/entity_me - /elements/entities/me/init_mno_verification: - $ref: paths/elements/pk.yaml#/init_mno_verification - /elements/accounts: - $ref: paths/elements/pk.yaml#/accounts - /elements/accounts/{accountId}: - $ref: paths/elements/pk.yaml#/account_by_id - /elements/accounts/{accountId}/details: - $ref: paths/elements/pk.yaml#/account_details - /elements/accounts/{accountId}/transaction_stream: - $ref: paths/elements/pk.yaml#/transaction_stream - /elements/account_verification/accounts/{accountId}/avf_sessions/{avfId}: - $ref: paths/elements/pk.yaml#/avf_session_update - /elements/account_verification/avf_sessions/bulk_generate: - $ref: paths/elements/pk.yaml#/avf_bulk_generate - /elements/auth/accounts: - $ref: paths/elements/pk.yaml#/auth_accounts - /elements/auth/accounts/consent: - $ref: paths/elements/pk.yaml#/auth_accounts_consent - /elements/auth/accounts_with_updatable_numbers: - $ref: paths/elements/pk.yaml#/auth_updatable_numbers - /elements/auth/accounts_with_updatable_numbers/{accountId}: - $ref: paths/elements/pk.yaml#/auth_updatable_number_update - /elements/auth/entities: - $ref: paths/elements/pk.yaml#/auth_entities - /elements/auth/entities/phone_verification: - $ref: paths/elements/pk.yaml#/auth_phone_verification - /elements/auth/entities/session: - $ref: paths/elements/pk.yaml#/auth_entity_session - /elements/auth/mortgages_with_missing_address: - $ref: paths/elements/pk.yaml#/auth_mortgages - /elements/auth/mortgages_with_missing_address/{accountId}: - $ref: paths/elements/pk.yaml#/auth_mortgage_update - /elements/balance_transfer/accounts: - $ref: paths/elements/pk.yaml#/balance_transfer_accounts - /elements/balance_transfer/auth_token: - $ref: paths/elements/pk.yaml#/balance_transfer_auth_token - /elements/balance_transfer/session: - $ref: paths/elements/pk.yaml#/balance_transfer_session - /elements/connect/generate_next_step_token: - $ref: paths/elements/pk.yaml#/connect_next_step_token - /elements/connect/set_element_complete: - $ref: paths/elements/pk.yaml#/connect_set_complete - /elements/events: - $ref: paths/elements/pk.yaml#/events - /elements/link/credentials: - $ref: paths/elements/pk.yaml#/link_credentials - /elements/merchants: - $ref: paths/elements/pk.yaml#/merchants - /elements/merchants/{mchId}: - $ref: paths/elements/pk.yaml#/merchant_by_id - /elements/merchants_parents: - $ref: paths/elements/pk.yaml#/merchants_parents - /elements/transfer: - $ref: paths/elements/pk.yaml#/transfer - /elements/transfer/accounts/exchange: - $ref: paths/elements/pk.yaml#/transfer_exchange - /elements/token/revoke: - $ref: paths/elements/pk.yaml#/token_revoke components: securitySchemes: $ref: components/security_schemes.yaml diff --git a/openapi/paths/elements/pk.yaml b/openapi/paths/elements/pk.yaml deleted file mode 100644 index 2feb98b..0000000 --- a/openapi/paths/elements/pk.yaml +++ /dev/null @@ -1,1175 +0,0 @@ -config: - get: - operationId: elementsRetrieveConfig - deprecated: true - summary: Retrieve element configuration - description: Returns the element configuration for the current token. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: The element configuration. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -config_by_id: - get: - operationId: elementsRetrieveConfigById - deprecated: true - summary: Retrieve element configuration by ID - description: Returns the element configuration for a specific element token ID. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: pk_elem_id - in: path - required: true - description: The element token identifier. - schema: - type: string - pattern: '^pk_elem_\w+$' - responses: - '200': - description: The element configuration. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -entity_me: - get: - operationId: elementsRetrieveEntity - deprecated: true - summary: Retrieve the current entity - description: Returns the entity associated with the current element token. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: The entity associated with the token. - content: - application/json: - schema: - $ref: '../../components/schemas/entity.yaml#/EntityResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -init_mno_verification: - post: - operationId: elementsInitMnoVerification - deprecated: true - summary: Initialize MNO verification - description: Initiates a mobile network operator (MNO) verification for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: The MNO verification initialization result. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -accounts: - get: - operationId: listElementsAccounts - deprecated: true - summary: List element accounts - description: Returns a list of accounts accessible to the current element token. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: A list of accounts. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountListResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - - post: - operationId: createElementsAccount - deprecated: true - summary: Create an element account - description: Creates a new account through the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account creation parameters. - responses: - '200': - description: The newly created account. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -account_by_id: - get: - operationId: retrieveElementsAccount - deprecated: true - summary: Retrieve an element account - description: Returns a single account by its identifier. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: '^acc_\w+$' - responses: - '200': - description: The requested account. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - - put: - operationId: updateElementsAccount - deprecated: true - summary: Update an element account - description: Updates an account through the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: '^acc_\w+$' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account update parameters. - responses: - '200': - description: The updated account. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -account_details: - get: - operationId: elementsRetrieveAccountDetails - deprecated: true - summary: Retrieve element account details - description: Returns detailed information for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: '^acc_\w+$' - responses: - '200': - description: Account details. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -transaction_stream: - post: - operationId: elementsInitTransactionStream - deprecated: true - summary: Initialize a transaction stream - description: Initiates a transaction stream for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: '^acc_\w+$' - responses: - '200': - description: The transaction stream initialization result. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -avf_session_update: - put: - operationId: elementsUpdateAvfSession - deprecated: true - summary: Update a verification session - description: Updates a verification session for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: '^acc_\w+$' - - name: avfId - in: path - required: true - description: Unique identifier for the verification session. - schema: - type: string - pattern: '^avf_\w+$' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Verification session update parameters. - responses: - '200': - description: The updated verification session. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountVerificationSessionResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -avf_bulk_generate: - post: - operationId: elementsBulkGenerateAvfSessions - deprecated: true - summary: Bulk generate verification sessions - description: Generates verification sessions for multiple accounts at once. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Parameters for bulk verification session generation. - responses: - '200': - description: The generated verification sessions. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_accounts: - get: - operationId: elementsListAuthAccounts - deprecated: true - summary: List auth accounts - description: Returns a list of accounts available for authentication flows. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: A list of accounts for authentication. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountListResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_accounts_consent: - get: - operationId: elementsRetrieveAuthAccountsConsent - deprecated: true - summary: Retrieve auth accounts consent - description: Returns the current consent status for account authentication. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: The consent status. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - - post: - operationId: elementsCreateAuthAccountsConsent - deprecated: true - summary: Create auth accounts consent - description: Creates or updates consent for account authentication. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Consent parameters. - responses: - '200': - description: The created consent. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_updatable_numbers: - get: - operationId: elementsListUpdatableNumbers - deprecated: true - summary: List accounts with updatable numbers - description: Returns accounts whose account numbers can be updated. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: A list of accounts with updatable numbers. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountListResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_updatable_number_update: - put: - operationId: elementsUpdateAccountNumber - deprecated: true - summary: Update an account number - description: Updates the account number for an account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: accountId - in: path - required: true - description: Unique identifier for the account. - schema: - type: string - pattern: '^acc_\w+$' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account number update parameters. - responses: - '200': - description: The updated account. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_entities: - put: - operationId: elementsUpdateAuthEntity - deprecated: true - summary: Update auth entity - description: Updates the entity associated with the current authentication session. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Entity update parameters. - responses: - '200': - description: The updated entity. - content: - application/json: - schema: - $ref: '../../components/schemas/entity.yaml#/EntityResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_phone_verification: - post: - operationId: elementsCreatePhoneVerification - deprecated: true - summary: Create phone verification - description: Initiates a phone verification for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Phone verification parameters. - responses: - '200': - description: The phone verification result. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - - put: - operationId: elementsUpdatePhoneVerification - deprecated: true - summary: Update phone verification - description: Completes or updates a phone verification for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Phone verification update parameters (e.g., OTP code). - responses: - '200': - description: The updated phone verification. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_entity_session: - post: - operationId: elementsCreateEntitySession - deprecated: true - summary: Create entity session - description: Creates an authentication session for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Session creation parameters. - responses: - '200': - description: The created entity session. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - - put: - operationId: elementsUpdateEntitySession - deprecated: true - summary: Update entity session - description: Updates an authentication session for the current entity. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Session update parameters. - responses: - '200': - description: The updated entity session. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_mortgages: - get: - operationId: elementsListMortgagesMissingAddress - deprecated: true - summary: List mortgages missing address - description: Returns mortgage accounts that are missing property address information. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: A list of mortgage accounts missing address data. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountListResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -auth_mortgage_update: - put: - operationId: elementsUpdateMortgageAddress - deprecated: true - summary: Update mortgage address - description: Updates the property address for a mortgage account. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: accountId - in: path - required: true - description: Unique identifier for the mortgage account. - schema: - type: string - pattern: '^acc_\w+$' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Address update parameters. - responses: - '200': - description: The updated account. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -balance_transfer_accounts: - get: - operationId: elementsListBalanceTransferAccounts - deprecated: true - summary: List balance transfer accounts - description: Returns accounts eligible for balance transfers. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: A list of accounts eligible for balance transfers. - content: - application/json: - schema: - $ref: '../../components/schemas/account.yaml#/AccountListResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -balance_transfer_auth_token: - post: - operationId: elementsCreateBalanceTransferAuthToken - deprecated: true - summary: Create balance transfer auth token - description: Creates an authorization token for balance transfer operations. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Auth token creation parameters. - responses: - '200': - description: The created auth token. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -balance_transfer_session: - put: - operationId: elementsUpdateBalanceTransferSession - deprecated: true - summary: Update balance transfer session - description: Updates the balance transfer session state. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Balance transfer session update parameters. - responses: - '200': - description: The updated balance transfer session. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -connect_next_step_token: - post: - operationId: elementsGenerateNextStepToken - deprecated: true - summary: Generate connect next step token - description: Generates a token for the next step in the connect flow. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: The generated next step token. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -connect_set_complete: - put: - operationId: elementsSetConnectComplete - deprecated: true - summary: Set connect element complete - description: Marks the connect element flow as complete. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: The updated connect element state. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -events: - post: - operationId: elementsCreateEvent - deprecated: true - summary: Create an element event - description: Creates an event from the element client. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Event data. - responses: - '200': - description: The created event. - content: - application/json: - schema: - $ref: '../../components/schemas/event.yaml#/EventResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -link_credentials: - post: - operationId: elementsProcessLinkCredential - deprecated: true - summary: Process link credentials - description: Processes link credentials for account connection. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Link credential parameters. - responses: - '200': - description: The link credential processing result. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -merchants: - get: - operationId: elementsListMerchants - deprecated: true - summary: List merchants - description: Returns a list of merchants available in the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: A list of merchants. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectListResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -merchant_by_id: - get: - operationId: elementsRetrieveMerchant - deprecated: true - summary: Retrieve a merchant - description: Returns a single merchant by its identifier. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: mchId - in: path - required: true - description: Unique identifier for the merchant. - schema: - type: string - pattern: '^mch_\w+$' - responses: - '200': - description: The requested merchant. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -merchants_parents: - get: - operationId: elementsListMerchantParents - deprecated: true - summary: List merchant parents - description: Returns a list of parent merchant groups. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - $ref: '../../components/parameters/pagination.yaml#/PageParam' - - $ref: '../../components/parameters/pagination.yaml#/PageLimitParam' - - $ref: '../../components/parameters/pagination.yaml#/PageCursorParam' - responses: - '200': - description: A list of parent merchants. - headers: - $ref: '../../components/responses/pagination_headers.yaml#/PaginationHeaders' - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectListResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -transfer: - post: - operationId: elementsCreateTransfer - deprecated: true - summary: Create a transfer - description: Creates a transfer through the element. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Transfer creation parameters. - responses: - '200': - description: The created transfer. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -transfer_exchange: - post: - operationId: elementsExchangeTransferAccount - deprecated: true - summary: Exchange transfer account - description: Exchanges account information for a transfer operation. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account exchange parameters. - responses: - '200': - description: The exchanged account data. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -token_revoke: - delete: - operationId: elementsRevokeToken - deprecated: true - summary: Revoke element token - description: Revokes the current element token, invalidating it for future requests. Requires a `pk_...` token. - tags: - - Elements - security: - - PublicKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - responses: - '200': - description: Token successfully revoked. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' diff --git a/openapi/paths/elements/sk.yaml b/openapi/paths/elements/sk.yaml deleted file mode 100644 index 680b6d8..0000000 --- a/openapi/paths/elements/sk.yaml +++ /dev/null @@ -1,189 +0,0 @@ -create_token: - post: - operationId: elementsCreateToken - deprecated: true - summary: Create an element token - description: | - Creates a new element token for client-side use. The token is scoped to a specific entity - and has an expiration. Use this server-side to generate tokens for your frontend. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - required: - - entity_id - - type - properties: - entity_id: - type: string - description: The entity ID to scope the token to. - pattern: '^ent_\w+$' - type: - type: string - description: The type of element token to create. - element_type: - type: string - description: The specific element type for the token. - responses: - '200': - description: The created element token. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -session_results: - get: - operationId: elementsRetrieveSessionResults - deprecated: true - summary: Retrieve element session results - description: Returns the results of a completed element session. Use this to retrieve data collected during an element flow. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: pk_elem_id - in: path - required: true - description: The element token identifier. - schema: - type: string - pattern: '^pk_elem_\w+$' - responses: - '200': - description: The session results. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -sessions: - get: - operationId: elementsRetrieveSession - deprecated: true - summary: Retrieve an element session - description: Returns a single element session by its identifier. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: session_id - in: path - required: true - description: Unique identifier for the element session. - schema: - type: string - responses: - '200': - description: The requested session. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - - put: - operationId: elementsUpdateSession - deprecated: true - summary: Update an element session - description: Updates an element session by its identifier. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - - name: session_id - in: path - required: true - description: Unique identifier for the element session. - schema: - type: string - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Session update parameters. - responses: - '200': - description: The updated session. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '404': - $ref: '../../components/responses/error.yaml#/NotFound' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' - -exchange_account: - post: - operationId: elementsExchangeAccount - deprecated: true - summary: Exchange an account - description: Exchanges account information for use in element flows. This endpoint is called server-side. - tags: - - Elements - security: - - SecretKey: [] - parameters: - - $ref: '../../components/parameters/method_version.yaml' - requestBody: - required: true - content: - application/json: - schema: - type: object - description: Account exchange parameters. - responses: - '200': - description: The exchanged account data. - content: - application/json: - schema: - $ref: '../../components/schemas/common.yaml#/ObjectResponse' - '400': - $ref: '../../components/responses/error.yaml#/BadRequest' - '401': - $ref: '../../components/responses/error.yaml#/Unauthorized' - '500': - $ref: '../../components/responses/error.yaml#/InternalError' diff --git a/openapi/paths/opal.yaml b/openapi/paths/opal.yaml deleted file mode 100644 index 6f9b3fe..0000000 --- a/openapi/paths/opal.yaml +++ /dev/null @@ -1,236 +0,0 @@ -token: - get: - operationId: retrieveOpalToken - summary: Retrieve an Opal session - description: Returns the current state of the Opal session associated with the authenticated token. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: ../components/parameters/method_version.yaml - responses: - '200': - description: The current session state. - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalSessionResponse - '400': - $ref: ../components/responses/error.yaml#/BadRequest - '401': - $ref: ../components/responses/error.yaml#/Unauthorized - '429': - $ref: ../components/responses/error.yaml#/RateLimited - '500': - $ref: ../components/responses/error.yaml#/InternalError - post: - operationId: createOpalToken - summary: Create an Opal token - description: >- - Creates a new Opal token and, depending on the creation pattern, a new session. - Supports three patterns: (A) provide `entity_id` + `mode` + mode config, - (B) provide inline `entity` + `mode` + mode config, or (C) provide `session_id` - to create an additional token for an existing session. - tags: - - Opal - security: - - SecretKey: [] - parameters: - - $ref: ../components/parameters/method_version.yaml - requestBody: - required: true - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalTokenCreateRequest - example: - entity_id: ent_au22b1fbFJbp8 - mode: card_connect - card_connect: - selection_type: single - responses: - '200': - description: The created Opal token. - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalTokenResponse - example: - success: true - data: - token: otkn_yVf8MKZcGj3a9P2xLwR7nT - session_id: osess_4kR8mNpL2xQvW7jY - valid_until: '2026-03-14T19:30:00.000Z' - message: null - '400': - $ref: ../components/responses/error.yaml#/BadRequest - '401': - $ref: ../components/responses/error.yaml#/Unauthorized - '422': - $ref: ../components/responses/error.yaml#/UnprocessableEntity - '429': - $ref: ../components/responses/error.yaml#/RateLimited - '500': - $ref: ../components/responses/error.yaml#/InternalError - delete: - operationId: deactivateOpalToken - summary: Deactivate an Opal token - description: Deactivates the authenticated Opal token, preventing further use. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: ../components/parameters/method_version.yaml - responses: - '200': - description: Token deactivated successfully. - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalNullResponse - example: - success: true - data: null - message: null - '400': - $ref: ../components/responses/error.yaml#/BadRequest - '401': - $ref: ../components/responses/error.yaml#/Unauthorized - '429': - $ref: ../components/responses/error.yaml#/RateLimited - '500': - $ref: ../components/responses/error.yaml#/InternalError - -token_update: - put: - operationId: updateOpalToken - summary: Execute an Opal flow operation - description: >- - Executes an operation within a specific flow of the Opal session. - The flow type and operation determine which step of the workflow is advanced. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: ../components/parameters/method_version.yaml - - name: flow_type - in: path - required: true - description: The flow type to operate on. - schema: - type: string - enum: - - idv - - cxn - - avf - - txn - - name: operation - in: path - required: true - description: The operation to execute within the flow. - schema: - type: string - requestBody: - required: false - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalTokenUpdateRequest - example: - data: {} - responses: - '200': - description: The updated session state. - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalSessionResponse - '400': - $ref: ../components/responses/error.yaml#/BadRequest - '401': - $ref: ../components/responses/error.yaml#/Unauthorized - '422': - $ref: ../components/responses/error.yaml#/UnprocessableEntity - '429': - $ref: ../components/responses/error.yaml#/RateLimited - '500': - $ref: ../components/responses/error.yaml#/InternalError - -events: - post: - operationId: createOpalEvents - summary: Record Opal events - description: Records one or more events for the current Opal session. Events are used to track user interactions within the Opal client. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: ../components/parameters/method_version.yaml - requestBody: - required: true - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalEventCreateRequest - example: - events: - - action: card_connect.flow.started - metadata: {} - responses: - '200': - description: Events recorded successfully. - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalNullResponse - example: - success: true - data: null - message: null - '400': - $ref: ../components/responses/error.yaml#/BadRequest - '401': - $ref: ../components/responses/error.yaml#/Unauthorized - '429': - $ref: ../components/responses/error.yaml#/RateLimited - '500': - $ref: ../components/responses/error.yaml#/InternalError - get: - operationId: listOpalEvents - summary: List Opal events - description: Returns all non-internal events for the current Opal session. - tags: - - Opal - security: - - OpalToken: [] - parameters: - - $ref: ../components/parameters/method_version.yaml - responses: - '200': - description: A list of session events. - content: - application/json: - schema: - $ref: ../components/schemas/opal.yaml#/OpalEventListResponse - example: - success: true - data: - - type: card_connect.flow.started - mode: card_connect - object: flow - action: started - timestamp: '2026-03-14T19:00:00.000Z' - data: null - message: null - '400': - $ref: ../components/responses/error.yaml#/BadRequest - '401': - $ref: ../components/responses/error.yaml#/Unauthorized - '429': - $ref: ../components/responses/error.yaml#/RateLimited - '500': - $ref: ../components/responses/error.yaml#/InternalError From 5d53992902a1e8d25f2ea6e62e9c3a7c86cfc92e Mon Sep 17 00:00:00 2001 From: Michael Ossig Date: Tue, 24 Mar 2026 13:26:59 -0400 Subject: [PATCH 3/5] fix bundle --- manifests/mounted-routes.json | 192 ---------------------------------- manifests/operation-ids.json | 48 --------- 2 files changed, 240 deletions(-) diff --git a/manifests/mounted-routes.json b/manifests/mounted-routes.json index 662ac4b..b093207 100644 --- a/manifests/mounted-routes.json +++ b/manifests/mounted-routes.json @@ -171,174 +171,6 @@ "method": "GET", "path": "/card_products/{product_id}" }, - { - "method": "PUT", - "path": "/elements/account_verification/accounts/{accountId}/avf_sessions/{avfId}" - }, - { - "method": "POST", - "path": "/elements/account_verification/avf_sessions/bulk_generate" - }, - { - "method": "GET", - "path": "/elements/accounts" - }, - { - "method": "POST", - "path": "/elements/accounts" - }, - { - "method": "GET", - "path": "/elements/accounts/{accountId}" - }, - { - "method": "PUT", - "path": "/elements/accounts/{accountId}" - }, - { - "method": "GET", - "path": "/elements/accounts/{accountId}/details" - }, - { - "method": "POST", - "path": "/elements/accounts/{accountId}/transaction_stream" - }, - { - "method": "POST", - "path": "/elements/accounts/exchange" - }, - { - "method": "GET", - "path": "/elements/auth/accounts" - }, - { - "method": "GET", - "path": "/elements/auth/accounts_with_updatable_numbers" - }, - { - "method": "PUT", - "path": "/elements/auth/accounts_with_updatable_numbers/{accountId}" - }, - { - "method": "GET", - "path": "/elements/auth/accounts/consent" - }, - { - "method": "POST", - "path": "/elements/auth/accounts/consent" - }, - { - "method": "PUT", - "path": "/elements/auth/entities" - }, - { - "method": "POST", - "path": "/elements/auth/entities/phone_verification" - }, - { - "method": "PUT", - "path": "/elements/auth/entities/phone_verification" - }, - { - "method": "POST", - "path": "/elements/auth/entities/session" - }, - { - "method": "PUT", - "path": "/elements/auth/entities/session" - }, - { - "method": "GET", - "path": "/elements/auth/mortgages_with_missing_address" - }, - { - "method": "PUT", - "path": "/elements/auth/mortgages_with_missing_address/{accountId}" - }, - { - "method": "GET", - "path": "/elements/balance_transfer/accounts" - }, - { - "method": "POST", - "path": "/elements/balance_transfer/auth_token" - }, - { - "method": "PUT", - "path": "/elements/balance_transfer/session" - }, - { - "method": "GET", - "path": "/elements/config" - }, - { - "method": "GET", - "path": "/elements/config/{pk_elem_id}" - }, - { - "method": "POST", - "path": "/elements/connect/generate_next_step_token" - }, - { - "method": "PUT", - "path": "/elements/connect/set_element_complete" - }, - { - "method": "GET", - "path": "/elements/entities/me" - }, - { - "method": "POST", - "path": "/elements/entities/me/init_mno_verification" - }, - { - "method": "POST", - "path": "/elements/events" - }, - { - "method": "POST", - "path": "/elements/link/credentials" - }, - { - "method": "GET", - "path": "/elements/merchants" - }, - { - "method": "GET", - "path": "/elements/merchants_parents" - }, - { - "method": "GET", - "path": "/elements/merchants/{mchId}" - }, - { - "method": "GET", - "path": "/elements/sessions/{session_id}" - }, - { - "method": "PUT", - "path": "/elements/sessions/{session_id}" - }, - { - "method": "POST", - "path": "/elements/token" - }, - { - "method": "GET", - "path": "/elements/token/{pk_elem_id}/results" - }, - { - "method": "DELETE", - "path": "/elements/token/revoke" - }, - { - "method": "POST", - "path": "/elements/transfer" - }, - { - "method": "POST", - "path": "/elements/transfer/accounts/exchange" - }, { "method": "GET", "path": "/entities" @@ -503,30 +335,6 @@ "method": "GET", "path": "/merchants/{mchId}" }, - { - "method": "GET", - "path": "/opal/events" - }, - { - "method": "POST", - "path": "/opal/events" - }, - { - "method": "DELETE", - "path": "/opal/token" - }, - { - "method": "GET", - "path": "/opal/token" - }, - { - "method": "POST", - "path": "/opal/token" - }, - { - "method": "PUT", - "path": "/opal/token/{flow_type}/{operation}" - }, { "method": "GET", "path": "/payments" diff --git a/manifests/operation-ids.json b/manifests/operation-ids.json index 9c25c8f..50797ac 100644 --- a/manifests/operation-ids.json +++ b/manifests/operation-ids.json @@ -10,7 +10,6 @@ "createAccountSubscription", "createAccountUpdate", "createAccountVerificationSession", - "createElementsAccount", "createEntity", "createEntityAttributes", "createEntityConnect", @@ -20,8 +19,6 @@ "createEntitySubscription", "createEntityVerificationSession", "createForwardingRequest", - "createOpalEvents", - "createOpalToken", "createPayment", "createReport", "createSecret", @@ -29,7 +26,6 @@ "createTeamEncryptionKey", "createTeamPublicKey", "createWebhook", - "deactivateOpalToken", "deleteAccountSubscription", "deleteEntitySubscription", "deletePayment", @@ -37,44 +33,6 @@ "deleteTeamPublicKey", "deleteWebhook", "downloadReport", - "elementsBulkGenerateAvfSessions", - "elementsCreateAuthAccountsConsent", - "elementsCreateBalanceTransferAuthToken", - "elementsCreateEntitySession", - "elementsCreateEvent", - "elementsCreatePhoneVerification", - "elementsCreateToken", - "elementsCreateTransfer", - "elementsExchangeAccount", - "elementsExchangeTransferAccount", - "elementsGenerateNextStepToken", - "elementsInitMnoVerification", - "elementsInitTransactionStream", - "elementsListAuthAccounts", - "elementsListBalanceTransferAccounts", - "elementsListMerchantParents", - "elementsListMerchants", - "elementsListMortgagesMissingAddress", - "elementsListUpdatableNumbers", - "elementsProcessLinkCredential", - "elementsRetrieveAccountDetails", - "elementsRetrieveAuthAccountsConsent", - "elementsRetrieveConfig", - "elementsRetrieveConfigById", - "elementsRetrieveEntity", - "elementsRetrieveMerchant", - "elementsRetrieveSession", - "elementsRetrieveSessionResults", - "elementsRevokeToken", - "elementsSetConnectComplete", - "elementsUpdateAccountNumber", - "elementsUpdateAuthEntity", - "elementsUpdateAvfSession", - "elementsUpdateBalanceTransferSession", - "elementsUpdateEntitySession", - "elementsUpdateMortgageAddress", - "elementsUpdatePhoneVerification", - "elementsUpdateSession", "listAccountAttributes", "listAccountBalances", "listAccountCardBrands", @@ -87,7 +45,6 @@ "listAccountUpdates", "listAccountVerificationSessions", "listAccounts", - "listElementsAccounts", "listEntities", "listEntityAttributes", "listEntityConnects", @@ -101,7 +58,6 @@ "listManagedAccountTransactions", "listManagedAccounts", "listMerchants", - "listOpalEvents", "listPaymentReversals", "listPayments", "listPublicJwks", @@ -123,7 +79,6 @@ "retrieveAccountVerificationSession", "retrieveAccountVerificationSessionAmounts", "retrieveCardProduct", - "retrieveElementsAccount", "retrieveEntity", "retrieveEntityAttribute", "retrieveEntityConnect", @@ -138,7 +93,6 @@ "retrieveForwardingRequest", "retrieveManagedAccount", "retrieveMerchant", - "retrieveOpalToken", "retrievePayment", "retrievePaymentReversal", "retrievePublicJwk", @@ -160,11 +114,9 @@ "updateAccount", "updateAccountConsent", "updateAccountVerificationSession", - "updateElementsAccount", "updateEntity", "updateEntityConsent", "updateEntityVerificationSession", - "updateOpalToken", "updatePaymentReversal", "updateWebhook" ] From 3d1069a4b540bab257016e5d990d8bdcfab84b83 Mon Sep 17 00:00:00 2001 From: Michael Ossig Date: Tue, 24 Mar 2026 14:16:38 -0400 Subject: [PATCH 4/5] add back public opal and element endpoints --- latest/openapi.bundled.json | 1217 +++++++++++++++++++--- latest/openapi.bundled.yaml | 636 +++++++++++ openapi/components/schemas/opal.yaml | 417 ++++++++ openapi/components/security_schemes.yaml | 7 + openapi/openapi.yaml | 14 + openapi/paths/elements/sk.yaml | 189 ++++ openapi/paths/opal.yaml | 104 ++ 7 files changed, 2457 insertions(+), 127 deletions(-) create mode 100644 openapi/components/schemas/opal.yaml create mode 100644 openapi/paths/elements/sk.yaml create mode 100644 openapi/paths/opal.yaml diff --git a/latest/openapi.bundled.json b/latest/openapi.bundled.json index 36c3c4c..d1f56f4 100644 --- a/latest/openapi.bundled.json +++ b/latest/openapi.bundled.json @@ -193,6 +193,14 @@ { "name": "Simulate Payments", "description": "Sandbox payment simulation" + }, + { + "name": "Opal", + "description": "Opal client-side session and token management" + }, + { + "name": "Elements", + "description": "Client-side Element endpoints" } ], "paths": { @@ -8895,85 +8903,548 @@ } } } - } - }, - "components": { - "securitySchemes": { - "SecretKey": { - "type": "http", - "scheme": "bearer", - "description": "Secret key authentication. Use your team's secret key (`sk_...`) as the Bearer token.\nAll authenticated API endpoints require this scheme unless otherwise noted.\n" - } }, - "parameters": { - "MethodVersion": { - "$ref": "#/components/parameters/method_version" - }, - "PageParam": { - "name": "page", - "in": "query", - "required": false, - "description": "Page number for pagination (1-indexed).", - "schema": { - "type": "integer", - "minimum": 1, - "default": 1 - } - }, - "PageLimitParam": { - "name": "page_limit", - "in": "query", - "required": false, - "description": "Number of items per page.", - "schema": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "default": 10 - } - }, - "PageCursorParam": { - "name": "page_cursor", - "in": "query", - "required": false, - "description": "Cursor for cursor-based pagination. Use the value from `Pagination-Page-Cursor-Next` or `Pagination-Page-Cursor-Prev` response headers.", - "schema": { - "type": "string" + "/opal/token": { + "get": { + "operationId": "retrieveOpalToken", + "summary": "Retrieve an Opal session", + "description": "Returns the current state of the Opal session associated with the authenticated token.", + "tags": [ + "Opal" + ], + "security": [ + { + "OpalToken": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + } + ], + "responses": { + "200": { + "description": "The current session state.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpalSessionResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "429": { + "$ref": "#/components/responses/RateLimited" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } } }, - "FromDateParam": { - "name": "from_date", - "in": "query", - "required": false, - "description": "Filter results from this date (inclusive, YYYY-MM-DD format).", - "schema": { - "type": "string", - "format": "date" + "post": { + "operationId": "createOpalToken", + "summary": "Create an Opal token", + "description": "Creates a new Opal token and, depending on the creation pattern, a new session. Supports three patterns: (A) provide `entity_id` + `mode` + mode config, (B) provide inline `entity` + `mode` + mode config, or (C) provide `session_id` to create an additional token for an existing session.", + "tags": [ + "Opal" + ], + "security": [ + { + "SecretKey": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpalTokenCreateRequest" + }, + "example": { + "entity_id": "ent_au22b1fbFJbp8", + "mode": "card_connect", + "card_connect": { + "selection_type": "single" + } + } + } + } + }, + "responses": { + "200": { + "description": "The created Opal token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpalTokenResponse" + }, + "example": { + "success": true, + "data": { + "token": "otkn_yVf8MKZcGj3a9P2xLwR7nT", + "session_id": "osess_4kR8mNpL2xQvW7jY", + "valid_until": "2026-03-14T19:30:00.000Z" + }, + "message": null + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "422": { + "$ref": "#/components/responses/UnprocessableEntity" + }, + "429": { + "$ref": "#/components/responses/RateLimited" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } } }, - "ToDateParam": { - "name": "to_date", - "in": "query", - "required": false, - "description": "Filter results to this date (inclusive, YYYY-MM-DD format).", - "schema": { - "type": "string", - "format": "date" + "delete": { + "operationId": "deactivateOpalToken", + "summary": "Deactivate an Opal token", + "description": "Deactivates the authenticated Opal token, preventing further use.", + "tags": [ + "Opal" + ], + "security": [ + { + "OpalToken": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + } + ], + "responses": { + "200": { + "description": "Token deactivated successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OpalNullResponse" + }, + "example": { + "success": true, + "data": null, + "message": null + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "429": { + "$ref": "#/components/responses/RateLimited" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } } - }, - "AccountIdParam": { - "name": "accountId", - "in": "path", - "required": true, - "description": "Unique identifier for the account.", - "schema": { - "type": "string", - "pattern": "^acc_\\w+$" + } + }, + "/elements/token": { + "post": { + "operationId": "elementsCreateToken", + "deprecated": true, + "summary": "Create an element token", + "description": "Creates a new element token for client-side use. The token is scoped to a specific entity\nand has an expiration. Use this server-side to generate tokens for your frontend.\n", + "tags": [ + "Elements" + ], + "security": [ + { + "SecretKey": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "entity_id", + "type" + ], + "properties": { + "entity_id": { + "type": "string", + "description": "The entity ID to scope the token to.", + "pattern": "^ent_\\w+$" + }, + "type": { + "type": "string", + "description": "The type of element token to create." + }, + "element_type": { + "type": "string", + "description": "The specific element type for the token." + } + } + } + } + } + }, + "responses": { + "200": { + "description": "The created element token.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } } - }, - "EntityIdParam": { - "name": "entityId", - "in": "path", + } + }, + "/elements/token/{pk_elem_id}/results": { + "get": { + "operationId": "elementsRetrieveSessionResults", + "deprecated": true, + "summary": "Retrieve element session results", + "description": "Returns the results of a completed element session. Use this to retrieve data collected during an element flow.", + "tags": [ + "Elements" + ], + "security": [ + { + "SecretKey": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + }, + { + "name": "pk_elem_id", + "in": "path", + "required": true, + "description": "The element token identifier.", + "schema": { + "type": "string", + "pattern": "^pk_elem_\\w+$" + } + } + ], + "responses": { + "200": { + "description": "The session results.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } + } + } + }, + "/elements/sessions/{session_id}": { + "get": { + "operationId": "elementsRetrieveSession", + "deprecated": true, + "summary": "Retrieve an element session", + "description": "Returns a single element session by its identifier.", + "tags": [ + "Elements" + ], + "security": [ + { + "SecretKey": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + }, + { + "name": "session_id", + "in": "path", + "required": true, + "description": "Unique identifier for the element session.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The requested session.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } + } + }, + "put": { + "operationId": "elementsUpdateSession", + "deprecated": true, + "summary": "Update an element session", + "description": "Updates an element session by its identifier.", + "tags": [ + "Elements" + ], + "security": [ + { + "SecretKey": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + }, + { + "name": "session_id", + "in": "path", + "required": true, + "description": "Unique identifier for the element session.", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Session update parameters." + } + } + } + }, + "responses": { + "200": { + "description": "The updated session.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } + } + } + }, + "/elements/accounts/exchange": { + "post": { + "operationId": "elementsExchangeAccount", + "deprecated": true, + "summary": "Exchange an account", + "description": "Exchanges account information for use in element flows. This endpoint is called server-side.", + "tags": [ + "Elements" + ], + "security": [ + { + "SecretKey": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/method_version" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "Account exchange parameters." + } + } + } + }, + "responses": { + "200": { + "description": "The exchanged account data.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ObjectResponse" + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "500": { + "$ref": "#/components/responses/InternalError" + } + } + } + } + }, + "components": { + "securitySchemes": { + "OpalToken": { + "type": "http", + "scheme": "bearer", + "description": "Opal token authentication for Opal session endpoints. Use an Opal token (`otkn_...`)\nas the Bearer token. Created via POST /opal/token using a secret key.\n" + }, + "SecretKey": { + "type": "http", + "scheme": "bearer", + "description": "Secret key authentication. Use your team's secret key (`sk_...`) as the Bearer token.\nAll authenticated API endpoints require this scheme unless otherwise noted.\n" + } + }, + "parameters": { + "MethodVersion": { + "$ref": "#/components/parameters/method_version" + }, + "PageParam": { + "name": "page", + "in": "query", + "required": false, + "description": "Page number for pagination (1-indexed).", + "schema": { + "type": "integer", + "minimum": 1, + "default": 1 + } + }, + "PageLimitParam": { + "name": "page_limit", + "in": "query", + "required": false, + "description": "Number of items per page.", + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 10 + } + }, + "PageCursorParam": { + "name": "page_cursor", + "in": "query", + "required": false, + "description": "Cursor for cursor-based pagination. Use the value from `Pagination-Page-Cursor-Next` or `Pagination-Page-Cursor-Prev` response headers.", + "schema": { + "type": "string" + } + }, + "FromDateParam": { + "name": "from_date", + "in": "query", + "required": false, + "description": "Filter results from this date (inclusive, YYYY-MM-DD format).", + "schema": { + "type": "string", + "format": "date" + } + }, + "ToDateParam": { + "name": "to_date", + "in": "query", + "required": false, + "description": "Filter results to this date (inclusive, YYYY-MM-DD format).", + "schema": { + "type": "string", + "format": "date" + } + }, + "AccountIdParam": { + "name": "accountId", + "in": "path", + "required": true, + "description": "Unique identifier for the account.", + "schema": { + "type": "string", + "pattern": "^acc_\\w+$" + } + }, + "EntityIdParam": { + "name": "entityId", + "in": "path", "required": true, "description": "Unique identifier for the entity.", "schema": { @@ -16706,93 +17177,574 @@ "description": "Unique identifier for the webhook.", "example": "whk_cSGjA6d9N8y8v" }, - "type": { - "$ref": "#/components/schemas/WebhookType" + "type": { + "$ref": "#/components/schemas/WebhookType" + }, + "url": { + "type": "string", + "format": "uri", + "description": "URL to receive webhook events.", + "example": "https://example.com/webhooks" + }, + "status": { + "$ref": "#/components/schemas/WebhookStatus" + }, + "expand_event": { + "type": "boolean", + "description": "Whether to include the full resource data in the webhook payload." + }, + "error": { + "$ref": "#/components/schemas/WebhookResourceError" + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" + }, + "created_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the webhook was created." + }, + "updated_at": { + "type": "string", + "format": "date-time", + "description": "Timestamp when the webhook was last updated." + } + } + }, + "WebhookListResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/ListEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Webhook" + } + } + } + } + ] + }, + "WebhookCreateRequest": { + "type": "object", + "required": [ + "type", + "url" + ], + "properties": { + "type": { + "$ref": "#/components/schemas/WebhookType" + }, + "url": { + "type": "string", + "format": "uri", + "description": "URL to receive webhook events." + }, + "auth_token": { + "type": "string", + "description": "Authentication token to include in outbound webhook request headers. This value is write-only.", + "writeOnly": true + }, + "hmac_secret": { + "type": "string", + "description": "HMAC secret used to sign outbound webhook deliveries. This value is write-only.", + "writeOnly": true + }, + "expand_event": { + "type": "boolean", + "description": "Whether to include the full resource data in the webhook payload." + }, + "metadata": { + "$ref": "#/components/schemas/Metadata" + } + } + }, + "WebhookResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Webhook" + } + } + } + ] + }, + "WebhookDeleteResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": [ + "object", + "null" + ], + "example": null + } + } + } + ] + }, + "WebhookUpdateRequest": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "$ref": "#/components/schemas/WebhookStatus" + } + } + }, + "OpalSessionMode": { + "type": "string", + "description": "The mode that determines which flows are configured for the session.", + "enum": [ + "identity_verification", + "card_connect", + "connect", + "account_verification", + "transactions" + ] + }, + "OpalSession": { + "type": "object", + "description": "An Opal session representing a client-side workflow for identity verification, account connection, or account verification.", + "required": [ + "id", + "config", + "entity", + "mode", + "idv", + "cxn", + "avf", + "txn", + "completed_at", + "created_at", + "updated_at" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the session.", + "example": "osess_4kR8mNpL2xQvW7jY" + }, + "config": { + "type": "object", + "description": "Team-level configuration snapshot for the session.", + "properties": { + "name": { + "type": "string", + "description": "Team display name." + }, + "logo": { + "type": [ + "string", + "null" + ], + "description": "Team logo URL." + }, + "opal_should_prefill_entities": { + "type": "boolean", + "description": "Whether to prefill entity information." + }, + "primary_color": { + "type": [ + "string", + "null" + ], + "description": "Primary brand color." + }, + "event_channel": { + "type": [ + "string", + "null" + ], + "description": "Event channel identifier." + }, + "accounts_liability_allow_number_update": { + "type": "boolean", + "description": "Whether account number updates are allowed." + }, + "appearance": { + "type": "string", + "enum": [ + "light", + "dark", + "system" + ], + "description": "UI appearance theme." + } + } + }, + "entity": { + "type": "object", + "description": "Minimal entity representation for the session.", + "properties": { + "id": { + "type": "string", + "description": "Entity identifier." + }, + "individual": { + "type": [ + "object", + "null" + ], + "description": "Individual entity details." + }, + "address": { + "type": [ + "object", + "null" + ], + "description": "Entity address." + }, + "status": { + "type": "string", + "description": "Entity status." + }, + "verification": { + "type": "object", + "description": "Entity verification state.", + "properties": { + "identity": { + "type": "object", + "properties": { + "matched": { + "type": "boolean" + }, + "verified": { + "type": "boolean" + } + } + }, + "phone": { + "type": "object", + "properties": { + "verified": { + "type": "boolean" + } + } + } + } + } + } }, - "url": { - "type": "string", - "format": "uri", - "description": "URL to receive webhook events.", - "example": "https://example.com/webhooks" + "mode": { + "$ref": "#/components/schemas/OpalSessionMode" }, - "status": { - "$ref": "#/components/schemas/WebhookStatus" + "idv": { + "type": [ + "object", + "null" + ], + "description": "Identity verification flow configuration and state." }, - "expand_event": { - "type": "boolean", - "description": "Whether to include the full resource data in the webhook payload." + "cxn": { + "type": [ + "object", + "null" + ], + "description": "Account connection flow configuration and state." }, - "error": { - "$ref": "#/components/schemas/WebhookResourceError" + "avf": { + "type": [ + "object", + "null" + ], + "description": "Account verification flow configuration and state." }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "txn": { + "type": [ + "object", + "null" + ], + "description": "Transactions flow configuration and state." + }, + "completed_at": { + "type": [ + "string", + "null" + ], + "format": "date-time", + "description": "Timestamp when the session was completed, or null if still in progress." }, "created_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the webhook was created." + "description": "Timestamp when the session was created." }, "updated_at": { "type": "string", "format": "date-time", - "description": "Timestamp when the webhook was last updated." + "description": "Timestamp when the session was last updated." } } }, - "WebhookListResponse": { + "OpalSessionResponse": { "allOf": [ { - "$ref": "#/components/schemas/ListEnvelope" + "$ref": "#/components/schemas/SuccessEnvelope" }, { "type": "object", "properties": { "data": { + "$ref": "#/components/schemas/OpalSession" + } + } + } + ] + }, + "OpalCardConnectAccountFilters": { + "type": "object", + "description": "Account filters for the card_connect mode.", + "properties": { + "exclude": { + "type": "object", + "properties": { + "mch_ids": { "type": "array", "items": { - "$ref": "#/components/schemas/Webhook" - } + "type": "string" + }, + "description": "Merchant IDs to exclude." + }, + "unverified_account_numbers": { + "type": "boolean", + "description": "Whether to exclude accounts with unverified numbers." } } } - ] + } }, - "WebhookCreateRequest": { + "OpalConnectAccountFilters": { "type": "object", - "required": [ - "type", - "url" - ], + "description": "Account filters for the connect mode.", "properties": { - "type": { - "$ref": "#/components/schemas/WebhookType" + "include": { + "type": "object", + "properties": { + "account_types": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Account liability types to include." + }, + "products": { + "type": "array", + "minItems": 1, + "items": { + "type": "string" + }, + "description": "Required products to filter by." + } + } }, - "url": { + "exclude": { + "type": "object", + "properties": { + "account_types": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Account liability types to exclude." + }, + "mch_ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Merchant IDs to exclude." + }, + "unverified_account_numbers": { + "type": "boolean", + "description": "Whether to exclude accounts with unverified numbers." + } + } + } + } + }, + "OpalTokenCreateRequest": { + "type": "object", + "description": "Request to create an Opal token. Supports three creation patterns: (A) existing entity via `entity_id`, (B) inline entity via `entity`, or (C) existing session via `session_id`. Exactly one of these three fields must be provided.", + "properties": { + "entity_id": { "type": "string", - "format": "uri", - "description": "URL to receive webhook events." + "description": "Pattern A: ID of an existing entity to use for the session.", + "example": "ent_au22b1fbFJbp8" }, - "auth_token": { + "entity": { + "type": "object", + "description": "Pattern B: Inline entity creation payload.", + "properties": { + "type": { + "type": "string", + "description": "Entity type.", + "enum": [ + "individual" + ] + }, + "individual": { + "type": "object", + "description": "Individual details for entity creation." + } + } + }, + "session_id": { "type": "string", - "description": "Authentication token to include in outbound webhook request headers. This value is write-only.", - "writeOnly": true + "description": "Pattern C: ID of an existing session to create an additional token for.", + "example": "osess_4kR8mNpL2xQvW7jY" }, - "hmac_secret": { + "mode": { + "$ref": "#/components/schemas/OpalSessionMode" + }, + "appearance": { "type": "string", - "description": "HMAC secret used to sign outbound webhook deliveries. This value is write-only.", - "writeOnly": true + "enum": [ + "light", + "dark", + "system" + ], + "description": "UI appearance theme for the session." }, - "expand_event": { - "type": "boolean", - "description": "Whether to include the full resource data in the webhook payload." + "identity_verification": { + "type": "object", + "description": "Configuration for the `identity_verification` mode. Required when `mode` is `identity_verification`.", + "properties": { + "skip_pii": { + "type": "array", + "items": { + "type": "string" + }, + "description": "PII fields to skip during identity verification." + } + } }, - "metadata": { - "$ref": "#/components/schemas/Metadata" + "card_connect": { + "type": "object", + "description": "Configuration for the `card_connect` mode. Required when `mode` is `card_connect`.", + "required": [ + "selection_type" + ], + "properties": { + "selection_type": { + "type": "string", + "enum": [ + "single", + "multiple" + ], + "description": "Whether the user can select one or multiple cards." + }, + "account_filters": { + "$ref": "#/components/schemas/OpalCardConnectAccountFilters" + }, + "skip_pii": { + "type": "array", + "items": { + "type": "string" + }, + "description": "PII fields to skip during identity verification." + } + } + }, + "connect": { + "type": "object", + "description": "Configuration for the `connect` mode. Required when `mode` is `connect`.", + "required": [ + "selection_type" + ], + "properties": { + "selection_type": { + "type": "string", + "enum": [ + "single", + "multiple", + "all" + ], + "description": "Account selection behavior." + }, + "account_filters": { + "$ref": "#/components/schemas/OpalConnectAccountFilters" + }, + "skip_pii": { + "type": "array", + "items": { + "type": "string" + }, + "description": "PII fields to skip during identity verification." + } + } + }, + "account_verification": { + "type": "object", + "description": "Configuration for the `account_verification` mode. Required when `mode` is `account_verification`.", + "required": [ + "account_id" + ], + "properties": { + "account_id": { + "type": "string", + "description": "ID of the account to verify." + }, + "intent": { + "type": "string", + "enum": [ + "data", + "payments", + "transactions" + ], + "description": "The intent for account verification." + } + } + }, + "transactions": { + "type": "object", + "description": "Configuration for the `transactions` mode. Required when `mode` is `transactions`." } } }, - "WebhookResponse": { + "OpalToken": { + "type": "object", + "description": "A short-lived token used to authenticate an Opal session from a client application.", + "required": [ + "token", + "session_id", + "valid_until" + ], + "properties": { + "token": { + "type": "string", + "description": "The bearer token value used for Opal client authentication.", + "example": "otkn_yVf8MKZcGj3a9P2xLwR7nT" + }, + "session_id": { + "type": "string", + "description": "Unique identifier for the associated Opal session.", + "example": "osess_4kR8mNpL2xQvW7jY" + }, + "valid_until": { + "type": "string", + "format": "date-time", + "description": "Timestamp when this token expires (30 minutes after creation)." + } + } + }, + "OpalTokenResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -16801,13 +17753,13 @@ "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/Webhook" + "$ref": "#/components/schemas/OpalToken" } } } ] }, - "WebhookDeleteResponse": { + "OpalNullResponse": { "allOf": [ { "$ref": "#/components/schemas/SuccessEnvelope" @@ -16826,15 +17778,26 @@ } ] }, - "WebhookUpdateRequest": { - "type": "object", - "required": [ - "status" - ], - "properties": { - "status": { - "$ref": "#/components/schemas/WebhookStatus" + "ObjectResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/SuccessEnvelope" + }, + { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/JsonObject" + } + } } + ], + "example": { + "success": true, + "data": { + "id": "obj_123" + }, + "message": null } } }, diff --git a/latest/openapi.bundled.yaml b/latest/openapi.bundled.yaml index fc93ff1..02ebb79 100644 --- a/latest/openapi.bundled.yaml +++ b/latest/openapi.bundled.yaml @@ -140,6 +140,10 @@ tags: description: Sandbox event simulation - name: Simulate Payments description: Sandbox payment simulation + - name: Opal + description: Opal client-side session and token management + - name: Elements + description: Client-side Element endpoints paths: /.well-known/jwks.json: get: @@ -5433,8 +5437,299 @@ paths: $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalError' + /opal/token: + get: + operationId: retrieveOpalToken + summary: Retrieve an Opal session + description: Returns the current state of the Opal session associated with the authenticated token. + tags: + - Opal + security: + - OpalToken: [] + parameters: + - $ref: '#/components/parameters/method_version' + responses: + '200': + description: The current session state. + content: + application/json: + schema: + $ref: '#/components/schemas/OpalSessionResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '429': + $ref: '#/components/responses/RateLimited' + '500': + $ref: '#/components/responses/InternalError' + post: + operationId: createOpalToken + summary: Create an Opal token + description: 'Creates a new Opal token and, depending on the creation pattern, a new session. Supports three patterns: (A) provide `entity_id` + `mode` + mode config, (B) provide inline `entity` + `mode` + mode config, or (C) provide `session_id` to create an additional token for an existing session.' + tags: + - Opal + security: + - SecretKey: [] + parameters: + - $ref: '#/components/parameters/method_version' + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/OpalTokenCreateRequest' + example: + entity_id: ent_au22b1fbFJbp8 + mode: card_connect + card_connect: + selection_type: single + responses: + '200': + description: The created Opal token. + content: + application/json: + schema: + $ref: '#/components/schemas/OpalTokenResponse' + example: + success: true + data: + token: otkn_yVf8MKZcGj3a9P2xLwR7nT + session_id: osess_4kR8mNpL2xQvW7jY + valid_until: '2026-03-14T19:30:00.000Z' + message: null + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '422': + $ref: '#/components/responses/UnprocessableEntity' + '429': + $ref: '#/components/responses/RateLimited' + '500': + $ref: '#/components/responses/InternalError' + delete: + operationId: deactivateOpalToken + summary: Deactivate an Opal token + description: Deactivates the authenticated Opal token, preventing further use. + tags: + - Opal + security: + - OpalToken: [] + parameters: + - $ref: '#/components/parameters/method_version' + responses: + '200': + description: Token deactivated successfully. + content: + application/json: + schema: + $ref: '#/components/schemas/OpalNullResponse' + example: + success: true + data: null + message: null + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '429': + $ref: '#/components/responses/RateLimited' + '500': + $ref: '#/components/responses/InternalError' + /elements/token: + post: + operationId: elementsCreateToken + deprecated: true + summary: Create an element token + description: | + Creates a new element token for client-side use. The token is scoped to a specific entity + and has an expiration. Use this server-side to generate tokens for your frontend. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '#/components/parameters/method_version' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - entity_id + - type + properties: + entity_id: + type: string + description: The entity ID to scope the token to. + pattern: ^ent_\w+$ + type: + type: string + description: The type of element token to create. + element_type: + type: string + description: The specific element type for the token. + responses: + '200': + description: The created element token. + content: + application/json: + schema: + $ref: '#/components/schemas/ObjectResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/InternalError' + /elements/token/{pk_elem_id}/results: + get: + operationId: elementsRetrieveSessionResults + deprecated: true + summary: Retrieve element session results + description: Returns the results of a completed element session. Use this to retrieve data collected during an element flow. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '#/components/parameters/method_version' + - name: pk_elem_id + in: path + required: true + description: The element token identifier. + schema: + type: string + pattern: ^pk_elem_\w+$ + responses: + '200': + description: The session results. + content: + application/json: + schema: + $ref: '#/components/schemas/ObjectResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalError' + /elements/sessions/{session_id}: + get: + operationId: elementsRetrieveSession + deprecated: true + summary: Retrieve an element session + description: Returns a single element session by its identifier. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '#/components/parameters/method_version' + - name: session_id + in: path + required: true + description: Unique identifier for the element session. + schema: + type: string + responses: + '200': + description: The requested session. + content: + application/json: + schema: + $ref: '#/components/schemas/ObjectResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalError' + put: + operationId: elementsUpdateSession + deprecated: true + summary: Update an element session + description: Updates an element session by its identifier. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '#/components/parameters/method_version' + - name: session_id + in: path + required: true + description: Unique identifier for the element session. + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + description: Session update parameters. + responses: + '200': + description: The updated session. + content: + application/json: + schema: + $ref: '#/components/schemas/ObjectResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalError' + /elements/accounts/exchange: + post: + operationId: elementsExchangeAccount + deprecated: true + summary: Exchange an account + description: Exchanges account information for use in element flows. This endpoint is called server-side. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '#/components/parameters/method_version' + requestBody: + required: true + content: + application/json: + schema: + type: object + description: Account exchange parameters. + responses: + '200': + description: The exchanged account data. + content: + application/json: + schema: + $ref: '#/components/schemas/ObjectResponse' + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/InternalError' components: securitySchemes: + OpalToken: + type: http + scheme: bearer + description: | + Opal token authentication for Opal session endpoints. Use an Opal token (`otkn_...`) + as the Bearer token. Created via POST /opal/token using a secret key. SecretKey: type: http scheme: bearer @@ -11032,6 +11327,347 @@ components: properties: status: $ref: '#/components/schemas/WebhookStatus' + OpalSessionMode: + type: string + description: The mode that determines which flows are configured for the session. + enum: + - identity_verification + - card_connect + - connect + - account_verification + - transactions + OpalSession: + type: object + description: An Opal session representing a client-side workflow for identity verification, account connection, or account verification. + required: + - id + - config + - entity + - mode + - idv + - cxn + - avf + - txn + - completed_at + - created_at + - updated_at + properties: + id: + type: string + description: Unique identifier for the session. + example: osess_4kR8mNpL2xQvW7jY + config: + type: object + description: Team-level configuration snapshot for the session. + properties: + name: + type: string + description: Team display name. + logo: + type: + - string + - 'null' + description: Team logo URL. + opal_should_prefill_entities: + type: boolean + description: Whether to prefill entity information. + primary_color: + type: + - string + - 'null' + description: Primary brand color. + event_channel: + type: + - string + - 'null' + description: Event channel identifier. + accounts_liability_allow_number_update: + type: boolean + description: Whether account number updates are allowed. + appearance: + type: string + enum: + - light + - dark + - system + description: UI appearance theme. + entity: + type: object + description: Minimal entity representation for the session. + properties: + id: + type: string + description: Entity identifier. + individual: + type: + - object + - 'null' + description: Individual entity details. + address: + type: + - object + - 'null' + description: Entity address. + status: + type: string + description: Entity status. + verification: + type: object + description: Entity verification state. + properties: + identity: + type: object + properties: + matched: + type: boolean + verified: + type: boolean + phone: + type: object + properties: + verified: + type: boolean + mode: + $ref: '#/components/schemas/OpalSessionMode' + idv: + type: + - object + - 'null' + description: Identity verification flow configuration and state. + cxn: + type: + - object + - 'null' + description: Account connection flow configuration and state. + avf: + type: + - object + - 'null' + description: Account verification flow configuration and state. + txn: + type: + - object + - 'null' + description: Transactions flow configuration and state. + completed_at: + type: + - string + - 'null' + format: date-time + description: Timestamp when the session was completed, or null if still in progress. + created_at: + type: string + format: date-time + description: Timestamp when the session was created. + updated_at: + type: string + format: date-time + description: Timestamp when the session was last updated. + OpalSessionResponse: + allOf: + - $ref: '#/components/schemas/SuccessEnvelope' + - type: object + properties: + data: + $ref: '#/components/schemas/OpalSession' + OpalCardConnectAccountFilters: + type: object + description: Account filters for the card_connect mode. + properties: + exclude: + type: object + properties: + mch_ids: + type: array + items: + type: string + description: Merchant IDs to exclude. + unverified_account_numbers: + type: boolean + description: Whether to exclude accounts with unverified numbers. + OpalConnectAccountFilters: + type: object + description: Account filters for the connect mode. + properties: + include: + type: object + properties: + account_types: + type: array + items: + type: string + description: Account liability types to include. + products: + type: array + minItems: 1 + items: + type: string + description: Required products to filter by. + exclude: + type: object + properties: + account_types: + type: array + items: + type: string + description: Account liability types to exclude. + mch_ids: + type: array + items: + type: string + description: Merchant IDs to exclude. + unverified_account_numbers: + type: boolean + description: Whether to exclude accounts with unverified numbers. + OpalTokenCreateRequest: + type: object + description: 'Request to create an Opal token. Supports three creation patterns: (A) existing entity via `entity_id`, (B) inline entity via `entity`, or (C) existing session via `session_id`. Exactly one of these three fields must be provided.' + properties: + entity_id: + type: string + description: 'Pattern A: ID of an existing entity to use for the session.' + example: ent_au22b1fbFJbp8 + entity: + type: object + description: 'Pattern B: Inline entity creation payload.' + properties: + type: + type: string + description: Entity type. + enum: + - individual + individual: + type: object + description: Individual details for entity creation. + session_id: + type: string + description: 'Pattern C: ID of an existing session to create an additional token for.' + example: osess_4kR8mNpL2xQvW7jY + mode: + $ref: '#/components/schemas/OpalSessionMode' + appearance: + type: string + enum: + - light + - dark + - system + description: UI appearance theme for the session. + identity_verification: + type: object + description: Configuration for the `identity_verification` mode. Required when `mode` is `identity_verification`. + properties: + skip_pii: + type: array + items: + type: string + description: PII fields to skip during identity verification. + card_connect: + type: object + description: Configuration for the `card_connect` mode. Required when `mode` is `card_connect`. + required: + - selection_type + properties: + selection_type: + type: string + enum: + - single + - multiple + description: Whether the user can select one or multiple cards. + account_filters: + $ref: '#/components/schemas/OpalCardConnectAccountFilters' + skip_pii: + type: array + items: + type: string + description: PII fields to skip during identity verification. + connect: + type: object + description: Configuration for the `connect` mode. Required when `mode` is `connect`. + required: + - selection_type + properties: + selection_type: + type: string + enum: + - single + - multiple + - all + description: Account selection behavior. + account_filters: + $ref: '#/components/schemas/OpalConnectAccountFilters' + skip_pii: + type: array + items: + type: string + description: PII fields to skip during identity verification. + account_verification: + type: object + description: Configuration for the `account_verification` mode. Required when `mode` is `account_verification`. + required: + - account_id + properties: + account_id: + type: string + description: ID of the account to verify. + intent: + type: string + enum: + - data + - payments + - transactions + description: The intent for account verification. + transactions: + type: object + description: Configuration for the `transactions` mode. Required when `mode` is `transactions`. + OpalToken: + type: object + description: A short-lived token used to authenticate an Opal session from a client application. + required: + - token + - session_id + - valid_until + properties: + token: + type: string + description: The bearer token value used for Opal client authentication. + example: otkn_yVf8MKZcGj3a9P2xLwR7nT + session_id: + type: string + description: Unique identifier for the associated Opal session. + example: osess_4kR8mNpL2xQvW7jY + valid_until: + type: string + format: date-time + description: Timestamp when this token expires (30 minutes after creation). + OpalTokenResponse: + allOf: + - $ref: '#/components/schemas/SuccessEnvelope' + - type: object + properties: + data: + $ref: '#/components/schemas/OpalToken' + OpalNullResponse: + allOf: + - $ref: '#/components/schemas/SuccessEnvelope' + - type: object + properties: + data: + type: + - object + - 'null' + example: null + ObjectResponse: + allOf: + - $ref: '#/components/schemas/SuccessEnvelope' + - type: object + properties: + data: + $ref: '#/components/schemas/JsonObject' + example: + success: true + data: + id: obj_123 + message: null headers: Pagination-Page: description: Current page number. diff --git a/openapi/components/schemas/opal.yaml b/openapi/components/schemas/opal.yaml new file mode 100644 index 0000000..f98a182 --- /dev/null +++ b/openapi/components/schemas/opal.yaml @@ -0,0 +1,417 @@ +OpalToken: + type: object + description: A short-lived token used to authenticate an Opal session from a client application. + required: + - token + - session_id + - valid_until + properties: + token: + type: string + description: The bearer token value used for Opal client authentication. + example: otkn_yVf8MKZcGj3a9P2xLwR7nT + session_id: + type: string + description: Unique identifier for the associated Opal session. + example: osess_4kR8mNpL2xQvW7jY + valid_until: + type: string + format: date-time + description: Timestamp when this token expires (30 minutes after creation). + +OpalSession: + type: object + description: An Opal session representing a client-side workflow for identity verification, account connection, or account verification. + required: + - id + - config + - entity + - mode + - idv + - cxn + - avf + - txn + - completed_at + - created_at + - updated_at + properties: + id: + type: string + description: Unique identifier for the session. + example: osess_4kR8mNpL2xQvW7jY + config: + type: object + description: Team-level configuration snapshot for the session. + properties: + name: + type: string + description: Team display name. + logo: + type: + - string + - 'null' + description: Team logo URL. + opal_should_prefill_entities: + type: boolean + description: Whether to prefill entity information. + primary_color: + type: + - string + - 'null' + description: Primary brand color. + event_channel: + type: + - string + - 'null' + description: Event channel identifier. + accounts_liability_allow_number_update: + type: boolean + description: Whether account number updates are allowed. + appearance: + type: string + enum: + - light + - dark + - system + description: UI appearance theme. + entity: + type: object + description: Minimal entity representation for the session. + properties: + id: + type: string + description: Entity identifier. + individual: + type: + - object + - 'null' + description: Individual entity details. + address: + type: + - object + - 'null' + description: Entity address. + status: + type: string + description: Entity status. + verification: + type: object + description: Entity verification state. + properties: + identity: + type: object + properties: + matched: + type: boolean + verified: + type: boolean + phone: + type: object + properties: + verified: + type: boolean + mode: + $ref: '#/OpalSessionMode' + idv: + type: + - object + - 'null' + description: Identity verification flow configuration and state. + cxn: + type: + - object + - 'null' + description: Account connection flow configuration and state. + avf: + type: + - object + - 'null' + description: Account verification flow configuration and state. + txn: + type: + - object + - 'null' + description: Transactions flow configuration and state. + completed_at: + type: + - string + - 'null' + format: date-time + description: Timestamp when the session was completed, or null if still in progress. + created_at: + type: string + format: date-time + description: Timestamp when the session was created. + updated_at: + type: string + format: date-time + description: Timestamp when the session was last updated. + +OpalEvent: + type: object + description: An event recorded during an Opal session, following the `..` type pattern. + required: + - type + - mode + - object + - action + - timestamp + - data + properties: + type: + type: string + description: "Full event type in the format `..`." + example: card_connect.flow.started + mode: + type: string + description: The session mode that produced this event. + example: card_connect + object: + type: string + description: The object within the mode that the event relates to. + example: flow + action: + type: string + description: The action that occurred on the object. + example: started + timestamp: + type: string + format: date-time + description: ISO 8601 timestamp of when the event occurred. + data: + type: + - object + - 'null' + description: Optional event-specific data payload. + +OpalSessionMode: + type: string + description: The mode that determines which flows are configured for the session. + enum: + - identity_verification + - card_connect + - connect + - account_verification + - transactions + +OpalTokenCreateRequest: + type: object + description: >- + Request to create an Opal token. Supports three creation patterns: + (A) existing entity via `entity_id`, (B) inline entity via `entity`, + or (C) existing session via `session_id`. Exactly one of these three + fields must be provided. + properties: + entity_id: + type: string + description: "Pattern A: ID of an existing entity to use for the session." + example: ent_au22b1fbFJbp8 + entity: + type: object + description: "Pattern B: Inline entity creation payload." + properties: + type: + type: string + description: Entity type. + enum: + - individual + individual: + type: object + description: Individual details for entity creation. + session_id: + type: string + description: "Pattern C: ID of an existing session to create an additional token for." + example: osess_4kR8mNpL2xQvW7jY + mode: + $ref: '#/OpalSessionMode' + appearance: + type: string + enum: + - light + - dark + - system + description: UI appearance theme for the session. + identity_verification: + type: object + description: Configuration for the `identity_verification` mode. Required when `mode` is `identity_verification`. + properties: + skip_pii: + type: array + items: + type: string + description: PII fields to skip during identity verification. + card_connect: + type: object + description: Configuration for the `card_connect` mode. Required when `mode` is `card_connect`. + required: + - selection_type + properties: + selection_type: + type: string + enum: + - single + - multiple + description: Whether the user can select one or multiple cards. + account_filters: + $ref: '#/OpalCardConnectAccountFilters' + skip_pii: + type: array + items: + type: string + description: PII fields to skip during identity verification. + connect: + type: object + description: Configuration for the `connect` mode. Required when `mode` is `connect`. + required: + - selection_type + properties: + selection_type: + type: string + enum: + - single + - multiple + - all + description: Account selection behavior. + account_filters: + $ref: '#/OpalConnectAccountFilters' + skip_pii: + type: array + items: + type: string + description: PII fields to skip during identity verification. + account_verification: + type: object + description: Configuration for the `account_verification` mode. Required when `mode` is `account_verification`. + required: + - account_id + properties: + account_id: + type: string + description: ID of the account to verify. + intent: + type: string + enum: + - data + - payments + - transactions + description: The intent for account verification. + transactions: + type: object + description: Configuration for the `transactions` mode. Required when `mode` is `transactions`. + +OpalTokenUpdateRequest: + type: object + description: Request body for updating an Opal token session by executing a flow operation. + properties: + data: + type: object + description: Operation-specific data payload. The shape depends on the flow type and operation being executed. + +OpalEventCreateRequest: + type: object + description: Request to record one or more events for the current Opal session. + required: + - events + properties: + events: + type: array + minItems: 1 + items: + type: object + required: + - action + properties: + action: + type: string + description: Event action identifier. + metadata: + type: object + description: Optional metadata associated with the event. + +OpalConnectAccountFilters: + type: object + description: Account filters for the connect mode. + properties: + include: + type: object + properties: + account_types: + type: array + items: + type: string + description: Account liability types to include. + products: + type: array + minItems: 1 + items: + type: string + description: Required products to filter by. + exclude: + type: object + properties: + account_types: + type: array + items: + type: string + description: Account liability types to exclude. + mch_ids: + type: array + items: + type: string + description: Merchant IDs to exclude. + unverified_account_numbers: + type: boolean + description: Whether to exclude accounts with unverified numbers. + +OpalCardConnectAccountFilters: + type: object + description: Account filters for the card_connect mode. + properties: + exclude: + type: object + properties: + mch_ids: + type: array + items: + type: string + description: Merchant IDs to exclude. + unverified_account_numbers: + type: boolean + description: Whether to exclude accounts with unverified numbers. + +OpalTokenResponse: + allOf: + - $ref: common.yaml#/SuccessEnvelope + - type: object + properties: + data: + $ref: '#/OpalToken' + +OpalSessionResponse: + allOf: + - $ref: common.yaml#/SuccessEnvelope + - type: object + properties: + data: + $ref: '#/OpalSession' + +OpalNullResponse: + allOf: + - $ref: common.yaml#/SuccessEnvelope + - type: object + properties: + data: + type: + - object + - 'null' + example: null + +OpalEventListResponse: + allOf: + - $ref: common.yaml#/ListEnvelope + - type: object + properties: + data: + type: array + items: + $ref: '#/OpalEvent' diff --git a/openapi/components/security_schemes.yaml b/openapi/components/security_schemes.yaml index 6b4945c..5baaf1a 100644 --- a/openapi/components/security_schemes.yaml +++ b/openapi/components/security_schemes.yaml @@ -1,3 +1,10 @@ +OpalToken: + type: http + scheme: bearer + description: | + Opal token authentication for Opal session endpoints. Use an Opal token (`otkn_...`) + as the Bearer token. Created via POST /opal/token using a secret key. + SecretKey: type: http scheme: bearer diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml index 4f4b2bf..05e1610 100644 --- a/openapi/openapi.yaml +++ b/openapi/openapi.yaml @@ -101,6 +101,10 @@ tags: description: Sandbox event simulation - name: Simulate Payments description: Sandbox payment simulation +- name: Opal + description: Opal client-side session and token management +- name: Elements + description: Client-side Element endpoints paths: /.well-known/jwks.json: $ref: paths/well_known.yaml @@ -270,6 +274,16 @@ paths: $ref: paths/simulate/payments.yaml#/update_status /simulate/payments/payment_instruments/{pmt_inst_id}: $ref: paths/simulate/payments.yaml#/payment_instrument + /opal/token: + $ref: paths/opal.yaml#/token + /elements/token: + $ref: paths/elements/sk.yaml#/create_token + /elements/token/{pk_elem_id}/results: + $ref: paths/elements/sk.yaml#/session_results + /elements/sessions/{session_id}: + $ref: paths/elements/sk.yaml#/sessions + /elements/accounts/exchange: + $ref: paths/elements/sk.yaml#/exchange_account components: securitySchemes: $ref: components/security_schemes.yaml diff --git a/openapi/paths/elements/sk.yaml b/openapi/paths/elements/sk.yaml new file mode 100644 index 0000000..680b6d8 --- /dev/null +++ b/openapi/paths/elements/sk.yaml @@ -0,0 +1,189 @@ +create_token: + post: + operationId: elementsCreateToken + deprecated: true + summary: Create an element token + description: | + Creates a new element token for client-side use. The token is scoped to a specific entity + and has an expiration. Use this server-side to generate tokens for your frontend. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '../../components/parameters/method_version.yaml' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - entity_id + - type + properties: + entity_id: + type: string + description: The entity ID to scope the token to. + pattern: '^ent_\w+$' + type: + type: string + description: The type of element token to create. + element_type: + type: string + description: The specific element type for the token. + responses: + '200': + description: The created element token. + content: + application/json: + schema: + $ref: '../../components/schemas/common.yaml#/ObjectResponse' + '400': + $ref: '../../components/responses/error.yaml#/BadRequest' + '401': + $ref: '../../components/responses/error.yaml#/Unauthorized' + '500': + $ref: '../../components/responses/error.yaml#/InternalError' + +session_results: + get: + operationId: elementsRetrieveSessionResults + deprecated: true + summary: Retrieve element session results + description: Returns the results of a completed element session. Use this to retrieve data collected during an element flow. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '../../components/parameters/method_version.yaml' + - name: pk_elem_id + in: path + required: true + description: The element token identifier. + schema: + type: string + pattern: '^pk_elem_\w+$' + responses: + '200': + description: The session results. + content: + application/json: + schema: + $ref: '../../components/schemas/common.yaml#/ObjectResponse' + '400': + $ref: '../../components/responses/error.yaml#/BadRequest' + '401': + $ref: '../../components/responses/error.yaml#/Unauthorized' + '404': + $ref: '../../components/responses/error.yaml#/NotFound' + '500': + $ref: '../../components/responses/error.yaml#/InternalError' + +sessions: + get: + operationId: elementsRetrieveSession + deprecated: true + summary: Retrieve an element session + description: Returns a single element session by its identifier. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '../../components/parameters/method_version.yaml' + - name: session_id + in: path + required: true + description: Unique identifier for the element session. + schema: + type: string + responses: + '200': + description: The requested session. + content: + application/json: + schema: + $ref: '../../components/schemas/common.yaml#/ObjectResponse' + '400': + $ref: '../../components/responses/error.yaml#/BadRequest' + '401': + $ref: '../../components/responses/error.yaml#/Unauthorized' + '404': + $ref: '../../components/responses/error.yaml#/NotFound' + '500': + $ref: '../../components/responses/error.yaml#/InternalError' + + put: + operationId: elementsUpdateSession + deprecated: true + summary: Update an element session + description: Updates an element session by its identifier. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '../../components/parameters/method_version.yaml' + - name: session_id + in: path + required: true + description: Unique identifier for the element session. + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + description: Session update parameters. + responses: + '200': + description: The updated session. + content: + application/json: + schema: + $ref: '../../components/schemas/common.yaml#/ObjectResponse' + '400': + $ref: '../../components/responses/error.yaml#/BadRequest' + '401': + $ref: '../../components/responses/error.yaml#/Unauthorized' + '404': + $ref: '../../components/responses/error.yaml#/NotFound' + '500': + $ref: '../../components/responses/error.yaml#/InternalError' + +exchange_account: + post: + operationId: elementsExchangeAccount + deprecated: true + summary: Exchange an account + description: Exchanges account information for use in element flows. This endpoint is called server-side. + tags: + - Elements + security: + - SecretKey: [] + parameters: + - $ref: '../../components/parameters/method_version.yaml' + requestBody: + required: true + content: + application/json: + schema: + type: object + description: Account exchange parameters. + responses: + '200': + description: The exchanged account data. + content: + application/json: + schema: + $ref: '../../components/schemas/common.yaml#/ObjectResponse' + '400': + $ref: '../../components/responses/error.yaml#/BadRequest' + '401': + $ref: '../../components/responses/error.yaml#/Unauthorized' + '500': + $ref: '../../components/responses/error.yaml#/InternalError' diff --git a/openapi/paths/opal.yaml b/openapi/paths/opal.yaml new file mode 100644 index 0000000..10ce874 --- /dev/null +++ b/openapi/paths/opal.yaml @@ -0,0 +1,104 @@ +token: + get: + operationId: retrieveOpalToken + summary: Retrieve an Opal session + description: Returns the current state of the Opal session associated with the authenticated token. + tags: + - Opal + security: + - OpalToken: [] + parameters: + - $ref: ../components/parameters/method_version.yaml + responses: + '200': + description: The current session state. + content: + application/json: + schema: + $ref: ../components/schemas/opal.yaml#/OpalSessionResponse + '400': + $ref: ../components/responses/error.yaml#/BadRequest + '401': + $ref: ../components/responses/error.yaml#/Unauthorized + '429': + $ref: ../components/responses/error.yaml#/RateLimited + '500': + $ref: ../components/responses/error.yaml#/InternalError + post: + operationId: createOpalToken + summary: Create an Opal token + description: >- + Creates a new Opal token and, depending on the creation pattern, a new session. + Supports three patterns: (A) provide `entity_id` + `mode` + mode config, + (B) provide inline `entity` + `mode` + mode config, or (C) provide `session_id` + to create an additional token for an existing session. + tags: + - Opal + security: + - SecretKey: [] + parameters: + - $ref: ../components/parameters/method_version.yaml + requestBody: + required: true + content: + application/json: + schema: + $ref: ../components/schemas/opal.yaml#/OpalTokenCreateRequest + example: + entity_id: ent_au22b1fbFJbp8 + mode: card_connect + card_connect: + selection_type: single + responses: + '200': + description: The created Opal token. + content: + application/json: + schema: + $ref: ../components/schemas/opal.yaml#/OpalTokenResponse + example: + success: true + data: + token: otkn_yVf8MKZcGj3a9P2xLwR7nT + session_id: osess_4kR8mNpL2xQvW7jY + valid_until: '2026-03-14T19:30:00.000Z' + message: null + '400': + $ref: ../components/responses/error.yaml#/BadRequest + '401': + $ref: ../components/responses/error.yaml#/Unauthorized + '422': + $ref: ../components/responses/error.yaml#/UnprocessableEntity + '429': + $ref: ../components/responses/error.yaml#/RateLimited + '500': + $ref: ../components/responses/error.yaml#/InternalError + delete: + operationId: deactivateOpalToken + summary: Deactivate an Opal token + description: Deactivates the authenticated Opal token, preventing further use. + tags: + - Opal + security: + - OpalToken: [] + parameters: + - $ref: ../components/parameters/method_version.yaml + responses: + '200': + description: Token deactivated successfully. + content: + application/json: + schema: + $ref: ../components/schemas/opal.yaml#/OpalNullResponse + example: + success: true + data: null + message: null + '400': + $ref: ../components/responses/error.yaml#/BadRequest + '401': + $ref: ../components/responses/error.yaml#/Unauthorized + '429': + $ref: ../components/responses/error.yaml#/RateLimited + '500': + $ref: ../components/responses/error.yaml#/InternalError From 6ae4d08e8ffc2c7f5228e9d7b92d0310a10f6b65 Mon Sep 17 00:00:00 2001 From: Michael Ossig Date: Tue, 24 Mar 2026 16:59:50 -0400 Subject: [PATCH 5/5] update bundle --- manifests/mounted-routes.json | 32 ++++++++++++++++++++++++++++++++ manifests/operation-ids.json | 8 ++++++++ 2 files changed, 40 insertions(+) diff --git a/manifests/mounted-routes.json b/manifests/mounted-routes.json index b093207..787a93a 100644 --- a/manifests/mounted-routes.json +++ b/manifests/mounted-routes.json @@ -171,6 +171,26 @@ "method": "GET", "path": "/card_products/{product_id}" }, + { + "method": "POST", + "path": "/elements/accounts/exchange" + }, + { + "method": "GET", + "path": "/elements/sessions/{session_id}" + }, + { + "method": "PUT", + "path": "/elements/sessions/{session_id}" + }, + { + "method": "POST", + "path": "/elements/token" + }, + { + "method": "GET", + "path": "/elements/token/{pk_elem_id}/results" + }, { "method": "GET", "path": "/entities" @@ -335,6 +355,18 @@ "method": "GET", "path": "/merchants/{mchId}" }, + { + "method": "DELETE", + "path": "/opal/token" + }, + { + "method": "GET", + "path": "/opal/token" + }, + { + "method": "POST", + "path": "/opal/token" + }, { "method": "GET", "path": "/payments" diff --git a/manifests/operation-ids.json b/manifests/operation-ids.json index 50797ac..952a368 100644 --- a/manifests/operation-ids.json +++ b/manifests/operation-ids.json @@ -19,6 +19,7 @@ "createEntitySubscription", "createEntityVerificationSession", "createForwardingRequest", + "createOpalToken", "createPayment", "createReport", "createSecret", @@ -26,6 +27,7 @@ "createTeamEncryptionKey", "createTeamPublicKey", "createWebhook", + "deactivateOpalToken", "deleteAccountSubscription", "deleteEntitySubscription", "deletePayment", @@ -33,6 +35,11 @@ "deleteTeamPublicKey", "deleteWebhook", "downloadReport", + "elementsCreateToken", + "elementsExchangeAccount", + "elementsRetrieveSession", + "elementsRetrieveSessionResults", + "elementsUpdateSession", "listAccountAttributes", "listAccountBalances", "listAccountCardBrands", @@ -93,6 +100,7 @@ "retrieveForwardingRequest", "retrieveManagedAccount", "retrieveMerchant", + "retrieveOpalToken", "retrievePayment", "retrievePaymentReversal", "retrievePublicJwk",