> Toden documentation. For the full index fetch /llms.txt. Every page is available as Markdown by appending .md to its URL. Identity verification uses /api/kyc, Risk Intelligence uses /api/v1; they are separate contracts with different error shapes. Never invent an endpoint, field or enum value: read the API reference page for the operation first.

# Supply missing information

> Recover incomplete transfers without creating duplicates.

The first transaction request can contain all known party information. A second information submission is needed **only** when fields are missing or need correction. In the missing-beneficiary Sandbox scenario, the sender is present and the recipient is deliberately empty.

## Read the result

```bash
curl "$TODEN_API_BASE_URL/transactions/activity-1042/travel-rule" \
  -H "Authorization: Bearer $TODEN_SECRET_KEY"
```

Read `assessment.summary` first:

```json
{
  "outcome": "information_required",
  "title": "Beneficiary information needed",
  "description": "Add the beneficiary legal name and beneficiary account identifier before this transfer can be reviewed again.",
  "transferStatus": "hold",
  "missingInformation": [
    {
      "key": "beneficiary.legalName",
      "party": "beneficiary",
      "field": "legalName",
      "label": "Beneficiary legal name"
    }
  ],
  "checks": { "passed": 4, "needsReview": 0, "failed": 0, "pending": 0 },
  "nextAction": { "type": "submit_information", "label": "Add missing information" }
}
```

The rest of the response contains the exact policy version, required and received fields, issues, party references, VASP verification provenance and screening attempt references. Keep this evidence available for investigation, but use the summary for normal operational routing.

## Supply missing information

```bash
curl -X POST "$TODEN_API_BASE_URL/transactions/activity-1042/travel-rule/information" \
  -H "Authorization: Bearer $TODEN_SECRET_KEY" \
  -H "Idempotency-Key: activity-1042-beneficiary-v1" \
  -H "Content-Type: application/json" \
  -d '{
    "beneficiary": {
      "legalName": "Beneficiary name",
      "accountIdentifier": "beneficiary-account-reference"
    }
  }'
```

The response returns the updated assessment. An exact retry with the same idempotency key returns the same generation and does not create a second charge. Different information requires a new idempotency key and creates a new immutable validation generation.

Completing the named fields resolves data completeness only. Always route the
updated `assessment.summary`: identity, VASP or wallet evidence can still require
review or block the transfer even when `fields.missing` is empty.

## Node.js correction flow

After a webhook or an interrupted workflow, read the current result. Only submit the missing beneficiary when requested; do not create another transaction:

```js
const current = await toden.transactions.travelRule.retrieve(transaction.activityId);

if (current.summary.nextAction.type === 'submit_information') {
  const result = await toden.transactions.travelRule.submitInformation(
    transaction.activityId,
    { beneficiary: { legalName: 'Beneficiary name', accountIdentifier: 'beneficiary-account-reference' } },
    { idempotencyKey: 'activity-1042-beneficiary-v1' },
  );
  console.log(result.assessment.summary);
}
```