Ultimate Parent
Resolve the ultimate parent of a company through corporate-hierarchy reasoning. Submit a company (name + website, optional country); the API returns a job_id you poll until the result is ready. The response includes the ultimate corporate parent, the full ownership chain (intermediate holding entities), the ultimate financial parent when it differs from the corporate parent, GLEIF Legal Entity Identifier (LEI) data for every entity, and the LLM's reasoning + cited source URL.
Submit a company (name + website, optional country) for ultimate-parent resolution. Returns a job ID for tracking the process.
- : Access to the public API
OAuth2 client credentials flow for API access
Payload to submit a new ultimate-parent resolution job.
The company whose ultimate parent we want to resolve. Free-form name as it appears commercially or legally.
LVMHThe company's primary website. Used by the LLM to ground the search and resolve ambiguity. URL scheme will be added automatically if missing.
https://www.lvmh.com/Optional country to disambiguate when the website's jurisdiction is unclear (e.g., generic .com domains). Free-form name; not constrained to ISO codes.
FranceJob submitted to get-ultimate-queue
Response after submitting an ultimate-parent resolution job.
The job ID. Required if status_code <= 300.
4e8a7b3c-1234-5678-90ab-cdef12345678The message to return
Job submitted to get-ultimate-queueThe status of the process
SUCCESSPossible values: The HTTP status code to return
202company_name: Field required
Authentication failed - invalid or missing OAuth 2.0 token
Payment Required
Failed to enqueue job: ...
POST /v1/ultimate HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 76
{
"company_name": "LVMH",
"website": "https://www.lvmh.com/",
"country": "France"
}{
"job_id": "4e8a7b3c-1234-5678-90ab-cdef12345678",
"message": "Job submitted to get-ultimate-queue",
"status": "SUCCESS",
"status_code": 202
}Retrieve the result and status of a previously submitted ultimate-parent resolution job.
- : Access to the public API
OAuth2 client credentials flow for API access
The unique identifier of the ultimate-parent job
{"summary":"Sample job ID","value":"4e8a7b3c-1234-5678-90ab-cdef12345678"}Job succeeded.
Response after retrieving the status and result of an ultimate-parent job.
The job ID echoed back from the request.
4e8a7b3c-1234-5678-90ab-cdef12345678A human-readable message describing the current state or outcome of the job.
Job succeeded.The status of the process. Note: SUCCESS at status_code=202 means 'still running'.
SUCCESSPossible values: The HTTP status code representing the job's current state. 404 means the job id was never issued.
200Job is still running.
Missing job_id in path parameters
Authentication failed - invalid or missing OAuth 2.0 token
No job found for job_id: 4e8a7b3c-1234-5678-90ab-cdef12345678
Lambda crashed or failed after retries before writing result
UPSTREAM_SCHEMA_DRIFT: row contains no ultimate_parent_legal_name ...
GET /v1/ultimate/{job_id} HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
{
"job_id": "4e8a7b3c-1234-5678-90ab-cdef12345678",
"message": "Job succeeded.",
"status": "SUCCESS",
"status_code": 200,
"result": {
"confidence": 0.95,
"comment": "Per LVMH 2024 annual report, Christian Dior SE holds 41.4% ...",
"source_url": "https://www.lvmh.com/group/governance/",
"subsidiary_commercial_name": "Sephora Italy",
"ultimate_parent_source_level": "Securities Filing",
"evidence_summary": "Identity: Sephora SAS verified | Chain: Sephora SAS -> LVMH ... | Protocol: 6 | Discard Check: ... | GTM Selection: LVMH selected as the active Operating Conglomerate"
}
}Submit 1..100 ultimate-parent resolution items for asynchronous batch processing as ONE job (never a per-item fan-out). Returns a job_id immediately (202); poll GET /v1/ultimate/batch/{job_id} for status and results. Each item is validated identically to the single-route POST /v1/ultimate payload; a payload with 0 items or more than 100 is rejected with 422.
- : Access to the public API
OAuth2 client credentials flow for API access
Batch envelope for POST /v1/ultimate/batch: {"items": [...]} (1..100 items, 422 beyond); each item is shaped exactly like the single-route POST /v1/ultimate payload (reused here by $ref as UltimateSubmitInput).
Batch submitted
Response after submitting a batch quality job.
The job ID. Required if status <= 300.
21014abc65004d2781d2e0ef4c9fbb46Number of items accepted in the batch (present on success).
100The message to return
Batch submittedThe status of the process
SUCCESSPossible values: The status code to return
202Authentication failed - invalid or missing OAuth 2.0 token
Payment Required
Invalid batch payload or size (1..100)
Internal server error
Service unavailable
POST /v1/ultimate/batch HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 88
{
"items": [
{
"company_name": "LVMH",
"website": "https://www.lvmh.com/",
"country": "France"
}
]
}{
"job_id": "21014abc65004d2781d2e0ef4c9fbb46",
"item_count": 100,
"message": "Batch submitted",
"status": "SUCCESS",
"status_code": 202
}Poll a batch of ultimate-parent resolution items submitted via POST /v1/ultimate/batch. 202 while running (with item_count/processed_count progress); 200 once SUCCEEDED (with counts, a presigned result_url, and result_data inlined when <=1MB); 409 if the credit reservation expired before delivery (resubmit); 500 if the job failed; 504 past the 24h ceiling (batch jobs run on Batch/Vertex timescales, hours not minutes).
- : Access to the public API
OAuth2 client credentials flow for API access
The unique identifier of the ultimate-parent resolution batch job.
{"summary":"Sample job ID","value":"21014abc65004d2781d2e0ef4c9fbb46"}97/100 items succeeded
Response for GET /v1/ultimate/batch/{job_id}. Each result_data.items[] entry is keyed to its request item by dispatch_key ({"record_id": "<job_id>#<index>"}). On success its result is the SAME object GET /v1/ultimate/{job_id} returns for a single item (see UltimateResult), EXCEPT relationship_type here is a nullable string rather than the strict enum — the batch compiler passes the LLM's raw label straight through, so an off-vocabulary value surfaces as that string instead of null. On failure it carries an error string instead of result.
A human-readable message describing the current state or outcome of the job.
97/100 items succeededThe status of the process
SUCCESSPossible values: The HTTP status code representing the job's current state.
200Presigned URL (1h expiry) to download the full batch result JSON from S3.
https://delpha-api-batch-dev.s3.amazonaws.com/batch-results/<job_id>.json?...Total number of items in the batch (present while the job is running).
Number of items processed so far (present while the job is running; may be absent early in the job's lifecycle).
The total time taken to process the job, in seconds.
12.3Job is still running.
Missing job_id in path parameters
Authentication failed - invalid or missing OAuth 2.0 token
No job found for job_id: ...
Reservation expired; please resubmit the job.
Job failed.
Job timed out.
GET /v1/ultimate/batch/{job_id} HTTP/1.1
Host: api.delpha.io
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
{
"message": "97/100 items succeeded",
"status": "SUCCESS",
"status_code": 200,
"counts": {
"total": 100,
"succeeded": 97,
"failed": 3
},
"result_url": "https://delpha-api-batch-dev.s3.amazonaws.com/batch-results/<job_id>.json?...",
"result_data": {
"job_id": "21014abc65004d2781d2e0ef4c9fbb46",
"usecase": "ultimate",
"counts": {
"total": 2,
"succeeded": 1,
"failed": 1
},
"items": [
{
"dispatch_key": {
"record_id": "21014abc65004d2781d2e0ef4c9fbb46#0"
},
"result": {
"confidence": 0.95,
"comment": "Per LVMH 2024 annual report, Christian Dior SE holds 41.4% ...",
"source_url": "https://www.lvmh.com/group/governance/",
"subsidiary_commercial_name": "Sephora Italy",
"ultimate_parent_source_level": "Securities Filing",
"evidence_summary": "Identity: Sephora SAS verified | Chain: Sephora SAS -> LVMH ... | Protocol: 6 | Discard Check: ... | GTM Selection: LVMH selected as the active Operating Conglomerate",
"ultimate_parent": {
"legal_name": "LVMH MOET HENNESSY LOUIS VUITTON SE",
"commercial_name": "LVMH",
"country": "France",
"website": "https://www.lvmh.com/",
"entity_type": "Corporation",
"ownership_status": "Unknown",
"comment": "Target operating entity"
},
"relationship_type": "Wholly Owned",
"ownership_chain": [],
"ultimate_financial_parent": null,
"is_self_ultimate": false
}
},
{
"dispatch_key": {
"record_id": "21014abc65004d2781d2e0ef4c9fbb46#1"
},
"error": "Processing failed for this item."
}
]
},
"item_count": null,
"processed_count": null,
"process_time": 12.3
}Last updated
Was this helpful?