
# Supply missing information

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 "$MYAZA_API_BASE_URL/transactions/activity-1042/travel-rule" \
  -H "Authorization: Bearer $MYAZA_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 "$MYAZA_API_BASE_URL/transactions/activity-1042/travel-rule/information" \
  -H "Authorization: Bearer $MYAZA_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 myaza.transactions.travelRule.retrieve(transaction.activityId);

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