v.2.5.0 - Test Environment
2026-06-09 - Planned deployment to Live
2026-05-28 - Test Environment
Added
Savings Plans: Lifecycle Webhook
Partners now receive an asynchronous webhook whenever the state of a savings plan changes, removing the need to poll GET /savings-plans/{savingPlanId} for status transitions or validation outcomes.
Documentation Location: API REFERENCE → Webhooks
New Endpoint:
POST /savings-plans-notification- webhook delivered to the partner's registered endpoint when a savings plan is created, activated, deactivated, deleted, or rejected as invalidNew event type:
SAVINGS_PLANS_NOTIFICATIONonEventTypeEnumPayload (
SavingsPlansNotification) includes:savingsPlanId,customerId,externalId(optional, partner-supplied at creation),modifiedOn,status(ACTIVE/INACTIVE/DELETED/INVALID),notificationType,validationError(only present whenstatus=INVALID)Validation errors emitted on
INVALID:ALREADY_EXISTS_ERROR,DATA_NOT_FOUND_ERROR,SAVINGS_PLAN_INVALID_DATA_ERROR,UNKNOWN_ERROR- each delivered with a human-readabledescriptionNote: The same
descriptiontext is also surfaced on themessagefield of theGET /savings-plans/{savingPlanId}response so partners may choose either delivery channel.
Customer Documents: W-8BEN and W-8IMY Tax Form Support
Two additional US tax forms are now accepted on document upload and document-type webhooks, expanding the set of tax-documentation use cases partners may submit for natural-person and legal-entity customers.
Documentation Location: API REFERENCE → Documents / API REFERENCE → Webhooks
Affected Schemas:
DocumentTypeEnum,DocumentUploadTypeEnumNew enum values:
W_8BEN,W_8IMY- alongside the existingW_8BEN_ENote: Partners using strict enum validation on document webhooks should add
W_8BENandW_8IMYto their accepted set before deployment.
Customer Documents: Required Document Missing Validation Error
A new validation error type is reported when a customer attempts an action (e.g. trading onboarding for a legal entity) without uploading a regulatorily required document.
Documentation Location: API REFERENCE → Webhooks
Affected Schema:
DocumentValidationErrorEnum(on document validation webhooks)New enum value:
REQUIRED_DOCUMENT_MISSING- emitted when a mandatory document for the requested operation has not been uploadedNote: Partners may use this signal to prompt the customer to upload the missing document instead of treating the rejection as a generic failure.
Customer Documents: DELETED Status
Documents may now be moved into a terminal DELETED state - for example when a partner or operator removes a previously uploaded document - and the status is surfaced on both API responses and document webhooks.
Documentation Location: API REFERENCE → Documents / API REFERENCE → Webhooks
Affected Schema:
DocumentStatusEnumNew enum value:
DELETED- added alongside the existingRECEIVED,APPROVED,REJECTED,ARCHIVEDNote: Partners using strict enum validation should add
DELETEDto their accepted set before deployment.
Fee Templates: Savings Plan Execution Trigger
A new fee-trigger event allows partners to configure fees that are charged when a savings plan execution runs, in addition to the existing per-trade triggers.
Documentation Location: API REFERENCE → Products
Affected Schema:
FeeTriggerEventEnumNew enum value:
SAVING_PLAN_EXECUTION- fee is triggered when a savings plan executes its scheduled investment
Changed
Savings Plans: External ID Support and savingsPlanId Field Rename
Partners may now attach their own internal identifier to a savings plan at creation time and receive it back on retrieval and webhooks. The plan identifier returned from the create endpoint is renamed for consistency with the rest of the Savings Plans API.
Documentation Location: API REFERENCE → Trading → Savings Plans / API REFERENCE → Webhooks
Endpoints:
POST /savings-plans,GET /savings-plans/{savingPlanId}, savings plans webhookRequest Changes (
POST /savings-plans):Added:
externalId(string, optional, max 100 chars) - partner-supplied identifier stored alongside the plan
Response Changes:
POST /savings-plansresponse - field renamed:uuid→savingsPlanId(still a UUID, same value semantics)GET /savings-plans/{savingPlanId}SavingsPlan- addedexternalId(string, optional)Savings plans webhook payload - added
externalId(string, optional)
Savings Plans: Validation Message on GET
The savings plans retrieval endpoint now returns the reason a plan was rejected, so partners can surface the validation failure directly to the customer without correlating against the webhook.
Documentation Location: API REFERENCE → Trading → Savings Plans
Endpoint:
GET /savings-plans/{savingPlanId}Added field on
SavingsPlan:message(string, optional) - present only whenstatus=INVALID. Matches thevalidationError.descriptiondelivered in the correspondingSAVINGS_PLANS_NOTIFICATIONwebhook.
Savings Plans: Status Enum Realigned with Webhook Lifecycle
The savings plan status values have been realigned to match the lifecycle now delivered on the webhook, replacing the placeholder PENDING and DELETED values from v.2.4.0 with the production-accurate RECEIVED (creation accepted, awaiting validation) and INVALID (validation failed).
Documentation Location: API REFERENCE → Trading → Savings Plans
Affected Schema:
SavingsPlanStatusEnum(returned onGET /savings-plans/{savingPlanId}andGET /savings-plans)Changed:
Removed:
PENDING,DELETEDAdded:
RECEIVED,INVALIDUnchanged:
ACTIVE,INACTIVE
Note: This refines the original v.2.4.0 contract before any partner has integrated against it on Live. Plan deletions are reported via the dedicated webhook
SavingsPlansNotificationStatusEnum.DELETEDrather than via the GET-endpoint status. Partners that started wiring against the v.2.4.0 Pretest spec must update their accepted status set on the GET endpoint.
Tokenized Assets: Order Status Enum Updated
The WAWEX (tokenized asset) order status enum is realigned to British spelling and gains a new terminal status that mirrors the Traditional Trading lifecycle for the case where a partially filled order is then canceled for the remaining quantity.
Documentation Location: API REFERENCE → Trading → Tokenized Assets
Affected Schema:
OrderStatusonGET /wawex/orders/{orderId}and related WAWEX order responsesChanged:
Renamed:
CANCELED→CANCELLED(British spelling, consistent withFILLED,SETTLEDlifecycle naming)Added:
PARTIALLY_FILLED_CANCELLED- order was partially filled, then the remaining open quantity was canceled
Corporate Actions: Tendered Quantity Minimum Validation
The tender-instruction endpoint now rejects requests with a tenderedQuantity of 0, reflecting the underlying business rule that a tender instruction must cover at least one share.
Documentation Location: API REFERENCE → Trading → Corporate Actions
Endpoint: Corporate-action tender-option submission (request body
tenderedQuantityfield)Validation change:
tenderedQuantitynow requiresminimum: 1(previously only enforcedmultipleOf: 1, so0was technically accepted)Required Partner Action: Confirm that no client-side flows submit a
tenderedQuantityof0(e.g. as part of clearing a previously entered value). Requests withtenderedQuantity=0will now be rejected with a400 Bad Request.
Corporate Actions: Additional Date and Status Filters on Per-Customer Endpoint
The per-customer corporate-actions list endpoint gains five new optional query parameters so partners can narrow results without pulling the full list and filtering client-side.
Documentation Location: API REFERENCE → Trading → Corporate Actions
Endpoint:
GET /corporate-actions/customers/{customerId}Added query parameters (all optional,
date-timeformat unless noted):exDate- return corporate actions with ex-date on or after this datepaymentDate- return corporate actions with payment date on or after this daterecordDate- return corporate actions with record date on or after this dateresponseDeadline- return corporate actions with response deadline on or after this datestatus- filter byCorporateActionStatusEnumvalue
Note: Parameters can be combined freely; omitting a parameter applies no constraint on that field. The platform-wide list endpoint
GET /corporate-actions/already exposes the same filters - this change brings the per-customer variant to parity.
Tokenized Assets: PARTIALLY_FILLED_EXPIRED Order Status
The WAWEX (tokenized asset) order status enum gains a new terminal status for the case where a partially filled order then expires before the remaining quantity could be filled. This completes the pair started by PARTIALLY_FILLED_CANCELLED (introduced earlier in this release).
Documentation Location: API REFERENCE → Trading → Tokenized Assets
Affected Schema:
OrderStatusonGET /wawex/orders/{orderId}and related WAWEX order responsesAdded:
PARTIALLY_FILLED_EXPIRED- order was partially filled, then the remaining open quantity expired without further executionsNote: Partners using strict enum validation on WAWEX order responses must add
PARTIALLY_FILLED_EXPIREDto their accepted set alongsidePARTIALLY_FILLED_CANCELLED.
Savings Plans: Additional Filters and Pagination on List Endpoint
The savings-plans list endpoint gains an externalId filter and explicit pagination parameters, so partners can locate a plan by their own identifier and page through large result sets without scanning the whole list.
Documentation Location: API REFERENCE → Trading → Savings Plans
Endpoint:
GET /customers/{customerId}/savings-plansAdded query parameters (all optional):
externalId(string) - filter by the external identifier set by the partner onPOST /savings-planslimit(integer, default20, minimum1) - maximum number of results to return per pagecursor(string) - pagination cursor returned from a previous response
Note: The existing filters (
status,instrumentType,instrumentIdentifier,liquidityCustomerProductId,savingsCustomerProductId) remain unchanged and can be combined with the new parameters.
Traditional Trading: Sort Orders by Execution Amount
The traditional-assets orders list endpoint gains a sortDirection parameter so partners can retrieve orders sorted ascending or descending by execution amount.
Documentation Location: API REFERENCE → Trading → Traditional Assets
Endpoint:
GET /traditional/ordersAdded query parameter:
sortDirection- accepts the newSortDirectionEnumvaluesASCorDESC. Sort key is execution amount.New schema:
SortDirectionEnum(ASC|DESC) - added toopenapi/tvda-api/models/for reuse by future sortable endpoints.Note: Omitting
sortDirectionpreserves the previous unsorted (or insertion-order) behavior, so existing integrations are unaffected.
Deprecated
Entities: riskLevel Field on Customers
The riskLevel field on the natural-person, legal-entity, and joint-account entity responses is marked deprecated and will be removed in a future major release. The field's value is no longer maintained by the platform.
Documentation Location: API REFERENCE → Entities
Endpoints:
GET /natural-persons/{naturalPersonId},GET /legal-entities/{legalEntityId},GET /joint-accounts/{jointAccountId}(and list / webhook variants)Deprecated:
riskLevelfield on theNaturalPerson,LegalEntity, andJointPersonschemasReplacement: None - risk-level information is no longer exposed on the partner API
Note: The field is still present in responses for backwards compatibility but its value should not be relied upon. Partners using it for any business logic should remove the dependency before the next major release.
Last updated

