> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getomni.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# lead.completed

Triggered when a lead application is completed.

## Event Type

`lead.completed`

## Description

This event is fired when all required checklist items for a lead have been completed or marked as needs review. Use this event to trigger downstream processing, notify your team, or sync the completed application to your systems.

This event fires only once per lead.

## Payload Structure

<ResponseField name="event" type="string" required>
  The event type: `lead.completed`
</ResponseField>

<ResponseField name="data" type="object" required>
  The completed lead data

  <Expandable title="data">
    <ResponseField name="leadId" type="string" required>
      Unique identifier for the lead
    </ResponseField>

    <ResponseField name="externalId" type="string | null">
      External identifier for the lead (if set)
    </ResponseField>

    <ResponseField name="firstName" type="string | null">
      Lead's first name
    </ResponseField>

    <ResponseField name="middleName" type="string | null">
      Lead's middle name
    </ResponseField>

    <ResponseField name="lastName" type="string | null">
      Lead's last name
    </ResponseField>

    <ResponseField name="phoneNumber" type="string | null">
      Lead's phone number (E.164 format, e.g., `+15551234567`)
    </ResponseField>

    <ResponseField name="email" type="string | null">
      Lead's email address
    </ResponseField>

    <ResponseField name="businessName" type="string | null">
      Lead's business name
    </ResponseField>

    <ResponseField name="website" type="string | null">
      Lead's website URL
    </ResponseField>

    <ResponseField name="source" type="string | null">
      How the lead was created: `inbound-email`, `inbound-sms`, `inbound-whatsapp`, `admin-email`, `portal`, `api`, `http`, `salesforce`
    </ResponseField>

    <ResponseField name="checklistItems" type="array" required>
      All checklist items for the lead

      <Expandable title="checklistItems">
        <ResponseField name="checklistItemId" type="string">
          ID of the checklist item definition
        </ResponseField>

        <ResponseField name="checklistItemCode" type="string">
          Code identifier for the checklist item
        </ResponseField>

        <ResponseField name="value" type="string | number | object | null">
          Current value of the checklist item. Type depends on the field type: `string` for text fields, `number` for numeric fields, or an address object with the following structure: `{ "street": "...", "city": "...", "state": "...", "postalCode": "...", "country": "..." }`.
        </ResponseField>

        <ResponseField name="alternateValues" type="array | null">
          Alternative extracted values

          <Expandable title="alternateValues">
            <ResponseField name="value" type="string">
              The alternate extracted value
            </ResponseField>

            <ResponseField name="parentActionId" type="string | null">
              ID of the action that produced this value
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="status" type="string">
          Status: `TODO`, `COMPLETED`, `INVALID`, `SKIPPED`, `NEEDS_REVIEW`
        </ResponseField>

        <ResponseField name="updatedAt" type="string">
          ISO 8601 timestamp of the last update
        </ResponseField>

        <ResponseField name="documents" type="array">
          Array of documents associated with the checklist item (only for file-type fields)

          <Expandable title="documents">
            <ResponseField name="documentId" type="string">
              Unique identifier for the document
            </ResponseField>

            <ResponseField name="externalId" type="string | null">
              External identifier for the document
            </ResponseField>

            <ResponseField name="filename" type="string">
              Original filename
            </ResponseField>

            <ResponseField name="mimeType" type="string">
              MIME type of the document
            </ResponseField>

            <ResponseField name="size" type="number">
              File size in bytes
            </ResponseField>

            <ResponseField name="s3Bucket" type="string">
              S3 bucket name (only included if external S3 integration is configured)
            </ResponseField>

            <ResponseField name="s3Key" type="string">
              S3 object key (only included if external S3 integration is configured)
            </ResponseField>

            <ResponseField name="validationResult" type="object | null">
              Document validation results (if validation rules are configured)

              <Expandable title="validationResult">
                <ResponseField name="documentId" type="string">
                  ID of the validated document
                </ResponseField>

                <ResponseField name="overallValid" type="boolean">
                  Whether the document passed all validation rules
                </ResponseField>

                <ResponseField name="otherNotes" type="string | null">
                  Additional notes from validation
                </ResponseField>

                <ResponseField name="validationResults" type="array">
                  Individual rule results

                  <Expandable title="validationResults">
                    <ResponseField name="isValid" type="boolean">
                      Whether this rule passed
                    </ResponseField>

                    <ResponseField name="ruleName" type="string">
                      Name of the validation rule
                    </ResponseField>

                    <ResponseField name="ruleIndex" type="number">
                      Index of the rule
                    </ResponseField>

                    <ResponseField name="isValidReason" type="string">
                      Explanation of why the rule passed or failed
                    </ResponseField>
                  </Expandable>
                </ResponseField>

                <ResponseField name="leadChecklistItemId" type="string">
                  ID of the associated checklist item
                </ResponseField>
              </Expandable>
            </ResponseField>

            <ResponseField name="overallValid" type="boolean | null">
              Whether the document passed all validation rules
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseExample>
  ```json theme={null}
  {
    "event": "lead.completed",
    "data": {
      "leadId": "50713355-df73-4077-9d84-dcda6da5729c",
      "externalId": "ext-lead-001",
      "firstName": "John",
      "middleName": null,
      "lastName": "Doe",
      "phoneNumber": "+15551234567",
      "email": "john@example.com",
      "businessName": "Acme Inc",
      "website": "https://acme.com",
      "source": "inbound-email",
      "checklistItems": [
        {
          "checklistItemId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
          "checklistItemCode": "company_name",
          "value": "Acme Inc",
          "alternateValues": [],
          "status": "COMPLETED",
          "updatedAt": "2025-10-31T18:30:00.000Z"
        },
        {
          "checklistItemId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
          "checklistItemCode": "bank_statement",
          "value": "bank-statement-oct.pdf",
          "alternateValues": [],
          "status": "COMPLETED",
          "updatedAt": "2025-10-31T19:00:01.675Z",
          "documents": [
            {
              "documentId": "8349efe7-3c68-49c3-9411-f9affda0d03a",
              "externalId": null,
              "filename": "bank-statement-oct.pdf",
              "mimeType": "application/pdf",
              "size": 153143,
              "validationResult": {
                "documentId": "8349efe7-3c68-49c3-9411-f9affda0d03a",
                "overallValid": true,
                "otherNotes": null,
                "validationResults": [
                  {
                    "isValid": true,
                    "ruleName": "First name should match",
                    "ruleIndex": 0,
                    "isValidReason": "Lead first name 'John' matches document name 'JOHN'."
                  },
                  {
                    "isValid": true,
                    "ruleName": "Statement must be dated within the last 3 months",
                    "ruleIndex": 1,
                    "isValidReason": "October 2025 is within the required period."
                  }
                ],
                "leadChecklistItemId": "f830cc29-16ad-4c64-9fa8-f90f318f8dce"
              },
              "overallValid": true
            }
          ]
        }
      ]
    }
  }
  ```
</ResponseExample>
