Submit Inbound Notification
Inbound API
Submit Inbound Notification
Submit verification responses from employers, schools, and third-party services
POST
Submit Inbound Notification
Submit Inbound Notification
Use this endpoint to submit verification responses from external parties. The system processes responses through various channels (email, forms, fax, and generic JSON) and automatically extracts verification details using AI.Authentication
Bearer Token Required - Include your JWT token in the Authorization header.Quick Example
Request Parameters
Optional Fields
Unique identifier for this message. If not provided, the system will auto-generate one using the format
msg_<timestamp>_<random>. You can also provide it in messageData.id - the system will use the top-level messageId if present, otherwise messageData.id, otherwise auto-generate.Thread identifier to link related messages. If not provided, the system will use the
messageId as the threadId. You can also
provide it in messageData.threadId - the system will use the top-level threadId if present, otherwise
messageData.threadId, otherwise use the messageId.Message content and metadata
Optional Fields
Communication channel (defaults to STANDARD)
Available Values:
Channel Types:
Available Values:
EMAIL, EFORM, MICROSOFT_GRAPH, FAX_WEBHOOK, TICKETING, JITBIT, JSON Channel Types:
EMAIL- Email responsesEFORM- Electronic formsMICROSOFT_GRAPH- Office 365FAX_WEBHOOK- Fax responsesTICKETING/JITBIT- Ticketing systemsJSON- Generic structured JSON payloads from upstream systems
Additional context data
Attachments
Attachments are supported for PDF files. PDFs are automatically processed to extract text content, which is then used during message classification and verification data extraction. Supported Format:- PDF files (
application/pdf) - Fully supported with text extraction - Other file types may be included but will not be processed
- PDFs are processed using document extraction tools
- Extracted text is included in the message analysis
- Processing errors are logged but do not block message processing
Response
Echo of the submitted message ID
Whether processing succeeded
AI-powered message classification
Fields:
Fields:
type- Classification type (see Classification Types below)confidence- Score from 0 to 1 indicating classification confidence
-reasoning- Explanation of the classification decision
Error messages if failed (empty array if successful)
Processing details including searchId and outcome
Processing completion timestamp (ISO 8601 format)
Classification Types
The classificationtype field can be one of the following values:
Terminal Outcomes (workflow completes):
VERIFICATION- Verification confirmed with detailsNO_RECORD- No employment/education record foundTHIRD_PARTY- Response indicates use of third-party vendorWRONG_ORG- Wrong organization was contacted
INFO_REQUESTED- Employer/school needs more informationINSUFFICIENT- Response incomplete or insufficientRECEIVED- Response received but not yet fully processedINFO_PROVIDED- Information was provided but may need follow-up
INFO_REQUEST- General information requestAUTHORIZATION_FORM_REQUEST- Authorization form is neededUNKNOWN- Could not determine intentOTHER- Other classificationNEXT_CONTACT- Indicates next contact should be made
Examples
Employment Verification
Education Form Submission
Generic JSON Submission
Usechannel: "JSON" when an upstream system sends structured third-party verification data instead of an email, fax, or ticket transcript. Place the provider payload in messageData.data. messageId, threadId, messageData.from, and messageData.to are optional for JSON requests; when IDs are omitted, Theary generates them automatically.
JSON payloads may contain the full employment or education history returned by the provider. When multiple records are present, Theary includes the matched search’s applicant and submitted history context in extraction so the most relevant record can be identified, extracted, and compared to the submitted applicant data.
Auto-Generated IDs
When messageId or threadId are not provided, the system automatically generates them:Error Responses
How It Works
The inbound notification processing follows these steps:- Submit - You send verification response via API
- ID Generation - If
messageIdorthreadIdare not provided, they are auto-generated - Validate - System validates required fields, checks for malicious content, and extracts reference numbers
- Match - Links message to active verification search by matching reference numbers in the message content
- Process Attachments - PDF attachments are processed to extract text content (if present)
- Analyze Contact - Determines sender type (APPLICANT, ENTITY, or UNKNOWN)
- Classify & Extract - AI-powered classification extracts verification details:
- Uses OpenAI Assistant or LangChain LLM depending on configuration
- Extracts structured outcome (VERIFIED, NO_RECORD, THIRD_PARTY, INFO_REQUESTED, etc.)
- Parses verification data (dates, positions, confirmation status)
- Persist Results - Saves processing results, classification, and extracted data
- Update Search - Updates search status if terminal outcome (VERIFIED, NO_RECORD, THIRD_PARTY, WRONG_ORG)
- Schedule Follow-up - If non-terminal outcome (INFO_REQUESTED, INSUFFICIENT), schedules next outbound attempt
- Notify - Sends webhook if verification reaches terminal state
Common Use Cases
| Use Case | Channel | Best For |
|---|---|---|
| Email from HR | EMAIL | Employment verification responses |
| University form | EFORM | Education verification with transcripts |
| Fax response | FAX_WEBHOOK | Legacy systems, healthcare, legal |
| Office 365 | MICROSOFT_GRAPH | Enterprise email automation |
| Help desk | TICKETING | Support ticket workflows |
| Generic JSON | JSON | Structured third-party provider payloads |
Best Practices
Message IDs:- Use unique identifiers (UUIDs recommended) if available
- Never reuse message IDs
- Optional: Omit the field entirely if you don’t have one - the system will auto-generate it
- If provided, ensure it’s unique across all messages
- Keep consistent for related messages in the same conversation thread
- Helps track conversation history across multiple exchanges
- Optional: Omit the field entirely if you don’t have one - the system will use the messageId as the threadId
- Use the same threadId for all messages in the same conversation
- Always use ISO 8601 format
- Example:
2024-01-15T10:30:00.000Z
- Include all verification details in the body.text field
- For
JSONchannel requests, include the structured provider payload inmessageData.data - Include reference number: The message must contain a 7-8 digit reference number to match the message to the correct verification search. The system looks for patterns like:
- “Reference: 12345678”
- “Ref. 12345678”
- “Ticket # 12345678”
- “Case # 12345678”
- Or standalone 7-8 digit numbers
- Mention attachments sent via separate channels if needed
- Check
successfield in response - Process
failureReasonsarray for errors - Implement retry with exponential backoff for server errors
Troubleshooting
“Search not found”- Verify the message contains a valid 7-8 digit reference number in one of the supported formats:
- “Reference: 12345678”
- “Ref. 12345678”
- “Ticket # 12345678”
- “Case # 12345678”
- Or a standalone 7-8 digit number
- Ensure the reference number matches an active verification search
- Ensure search is still active (not completed or cancelled)
- Check that the search has the INBOUND objective enabled
- Check sender email matches expected contact (if applicable)
- All required fields must be present
- Check timestamp is valid ISO 8601
- Ensure email addresses are valid
- Review error messages in response
- Verify data types match requirements
- Ensure all required fields are present