The TradeVest API has been restructured to improve clarity and separation of concerns. The monolithic customers.yaml has been split into two specialized APIs:
GET /customers/vendor/prepare/legal-entities/{searchId}
GET /entities/vendor/legal-entities/{searchId}
✏️ Path change
Important: Legal entities are now independent entities with their own UUID and status, no longer embedded as customer sub-objects. They have dedicated endpoints for full CRUD operations.
Legal Representatives
Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type
Inline in POST /customers/legal-entities
➕ POST /entities/{legalEntityId}/legal-representatives
🔄 Breaking change
Inline in GET /customers/legal-entities/{id}
➕ GET /entities/{legalEntityId}/legal-representatives
🔄 Breaking change
Inline in PATCH /customers/legal-entities/{id}
➕ GET /entities/legal-representatives/{id}
🔄 Breaking change
-
➕ PATCH /entities/legal-representatives/{id}
➕ New endpoint
-
➕ DELETE /entities/legal-representatives/{id}
➕ New endpoint
Important: Legal representatives are no longer embedded in legal entity payloads. They have dedicated endpoints for full CRUD operations.
Joint Persons
Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type
POST /customers/joint-persons
🔀 Split → ➕ POST /entities/joint-persons + POST /roles/customers
🔄 Breaking change
GET /customers/joint-persons/{customerId}
🔀 Split → ➕ GET /roles/customers/{customerId} + GET /entities/joint-persons/{id}
Important: Joint persons are now independent entities with their own UUID and status, no longer embedded as customer sub-objects. They require separate entity creation and customer role assignment.
Customers (Role Management)
Old Endpoint (customers.yaml)
New Endpoint (roles.yaml)
Change Type
GET /customers
GET /roles/customers
🔄 Breaking change
GET /customers/{customerId}
GET /roles/customers/{customerId}
✏️ Path change
POST /customers/natural-persons
🔀 Split → ➕ POST /entities/legal-entities + POST /roles/customers
🔄 Breaking change
POST /customers/joint-persons
🔀 Split → ➕ POST /entities/joint-persons + POST /roles/customers
Important: Onboarding is now dorelease-test-specific. Use entities.yaml for entity onboarding (beneficial owners), roles.yaml for role onboarding (customers, proxies) and users.yaml for user onboarding..
Search NACE Sectors
Old Endpoint (customers.yaml)
New Endpoint (entities.yaml)
Change Type
GET /customers/natural-persons/search/nace-sectors
GET /entities/natural-persons/search/nace-sectors
✏️ Path change
GET /customers/legal-entities/search/nace-sectors
GET /entities/legal-entities/search/nace-sectors
✏️ Path change
Customer Statistics
Old Endpoint (customers.yaml)
New Endpoint (roles.yaml)
Change Type
GET /customers/status-counts
GET /roles/customers/statistics/status-counts
✏️ Path change
Natural Person Wizard (Completely Removed)
Old Endpoint (customers.yaml)
New Endpoint
Change Type
POST /customers/natural-persons/wizard
-
❌ Removed
GET /customers/natural-persons/wizard
-
❌ Removed
GET /customers/natural-persons/wizard/{wizardInstanceId}
Important: Natural person wizard functionality has been completely removed. Use the comprehensive onboarding process available in entities.yaml and roles.yaml instead.
New Endpoints (Not Available in customers.yaml)
Entity Management
GET /entities - Unified view of all entities
GET /entities/legal-representatives/{id} - Get specific legal representative
After (entities.yaml + roles.yaml + users.yaml- Distributed):
9. Updating a Customer Role
Before (customers.yaml):
After (roles.yaml):
Key Change: Customer role updates are now separate from entity updates. To update entity data (like address, contact), use the appropriate entity endpoint (/entities/natural-persons/{entityId} or /entities/legal-entities/{entityId}).
Migration Checklist
Phase 1: Update Base URLs
Phase 2: Path Updates
Phase 3: Model Updates
Phase 4: Breaking Changes
Legal Representatives: Remove from legal entity payloads, use dedicated endpoints
Creation: Extract from legal entity payload → POST /entities/{legalEntityId}/legal-representatives
Reading: Get from legal entity response → GET /entities/{legalEntityId}/legal-representatives
Updates: No longer inline → PATCH /entities/legal-representatives/{id}
Deletion: New capability → DELETE /entities/legal-representatives/{id}
Documents: Update to v2 API with new resource model
Upload: Use /v2/documents with resourceType/resourceId instead of entityType/entityId
Query: Update query parameters to use new resource-based filtering
Resource Types: Map old entity types to new resource types
Entity Onboarding: Use /entities/onboardings for beneficial owners
Role Onboarding: Use /roles/onboardings for customers and proxies
User Onboarding: Use /user-onboardings for users
Parameters: Update payload structure with new field names
Customer Data Retrieval: Combine data from entity and role endpoints
Customer Updates: Update both entity data and role data separately
Phase 5: New Features
Unified Entity Search: Implement GET /entities endpoint for cross-entity searching
Legal Representative Management: Dedicated CRUD endpoints for legal representatives
Joint Person Management: Dedicated CRUD endpoints for joint persons
Legal Entity Management: Dedicated CRUD endpoints for legal entities
Validation Rules Changes
Beneficial Owners
uboRelationship is now required for all beneficial owners
votingRights is now required (0-100%, multiple of 0.01)
For DIRECTLY_HOLDING_25 or INDIRECTLY_HOLDING_25: either share OR voting rights must be ≥ 25%
For DOMINANT_INFLUENCE_OVER_SHARE_CAPITAL: no minimum requirements
New Webhook Notifications
The entity-role architecture introduces several new webhook notifications to support the distributed model:
Entity-Related Webhooks (New)
Webhook Endpoint
Purpose
Entity Type
/joint-person-notification
Joint Person lifecycle events
Joint Persons
/legal-entity-notification
Legal Entity lifecycle events
Legal Entities
/legal-representative-notification
Legal Representative lifecycle events
Legal Representatives
/legal-entity-search-notification
Legal Entity search process updates
Legal Entity Search
Process-Related Webhooks (New)
Webhook Endpoint
Purpose
Description
/offboarding-notification
Offboarding process updates
Entity and role offboarding events
Enhanced Existing Webhooks
Webhook Endpoint
Enhancement
Description
/customer-notification
Role-focused
Now specifically for customer role events
/proxy-notification
Entity-aware
Now supports entity-based proxy relationships
/beneficial-owner-notification
Entity-focused
Now directly associated with legal entities
Notification Types
All new webhooks support standard notification types:
CREATED - Entity/role was created
UPDATED - Entity/role was updated
DELETED - Entity/role was deleted
VALIDATION_ERROR - Validation failed
Migration Impact: Update your webhook handlers to support the new entity-focused notifications and ensure proper handling of the distributed event model.
Additional Resources
Check the detailed API reference in entities.yaml, roles.yaml, documents.yaml, and onboardings.yaml
Review the comprehensive architectural changes in the main README
Test your migration against the new endpoints in the test environment
POST /customers/legal-entities
{
"legalName": "Example Corp",
"legalForm": "LIMITED_LIABILITY_COMPANY",
"labels": ["corporate"],
"refAccounts": [...],
"legalRepresentatives": [...],
// ... all entity + customer data in one payload
}
POST /entities/legal-entities
{
"legalName": "Example Corp",
"legalForm": "LIMITED_LIABILITY_COMPANY",
"mainAddress": {...},
"contact": {...}
// ... entity data only (NO legal representatives here!)
}
// Response: { "legalEntityId": "le-uuid" }
POST /roles/customers
{
"entityId": "le-uuid",
"entityType": "LEGAL_ENTITY",
"labels": ["corporate"],
"refAccounts": [...]
// ... customer role data only
}
POST /customers/joint-persons
{
"firstNaturalPersonId": "np1-uuid",
"secondNaturalPersonId": "np2-uuid",
"labels": ["family"],
"refAccounts": [...],
// ... all entity + customer data in one payload
}
POST /entities/joint-persons
{
"firstNaturalPersonId": "np1-uuid",
"secondNaturalPersonId": "np2-uuid",
"contact": {...},
"mainAddress": {...}
// ... entity data only
}
// Response: { "jointPersonId": "jp-uuid" }
POST /roles/customers
{
"entityId": "jp-uuid",
"entityType": "JOINT_PERSON",
"labels": ["family"],
"refAccounts": [...]
// ... customer role data only
}
# Legal representatives were included in legal entity payload
POST /customers/legal-entities
{
"legalName": "Example Corp",
"legalRepresentatives": [
{
"firstName": "John",
"lastName": "Doe",
"function": "MANAGING_DIRECTOR",
"soleSignatureAuthorized": true
}
]
}
# Updates also required full legal entity payload
PATCH /customers/legal-entities/{customerId}
{
"legalRepresentatives": [
{
"firstName": "John Updated",
"lastName": "Doe",
"function": "MANAGING_DIRECTOR"
}
]
}
# Create legal representative separately
POST /entities/{legalEntityId}/legal-representatives
{
"firstName": "John",
"lastName": "Doe",
"function": "MANAGING_DIRECTOR",
"soleSignatureAuthorized": true,
"fatcaControllingPerson": false
}
# List legal representatives for entity
GET /entities/{legalEntityId}/legal-representatives
# Update specific legal representative
PATCH /entities/legal-representatives/{legalRepresentativeId}
{
"firstName": "John Updated"
}
# Delete legal representative (new capability!)
DELETE /entities/legal-representatives/{legalRepresentativeId}