---
updatedAt: 2026-09-09T14:18:34.000Z
agentTools:
  projectIndex: https://docs.fideo.ai/llms.txt
---

# Multi-field Inputs

Field-by-field guide to the shared Verify and Signals request schema.

Both `POST /verify` and `POST /signals` accept the same [MultiFieldReq](../reference/openapi.yaml) payload. You may send a single identifier or combine as many as you have—our matching pipeline deduplicates inputs and automatically fans out to the relevant checks.

> ‼️ **Hashing reminder** ‼️
>
> When hashing emails always `trim`, lowercase, and hash with MD5 or SHA-256. We automatically compare hashed and cleartext email inputs, so never send both versions of the same email address.

### Minimum Core Inputs Required

Every request must include **at least one** of the following identifier bundles:

| Identifier                                            | Notes                                                      |
| ----------------------------------------------------- | ---------------------------------------------------------- |
| Name + postal address (`name.*` **and** `location.*`) | Must include both objects so we can locate the individual. |
| Email (`email` or `emails[]`)                         | Cleartext, MD5 hash, or SHA-256 hash.                      |
| Phone (`phone` or `phones[]`)                         | E.164 recommended.                                         |
| Social handle/ID (`profiles[]`/`profile`)             | Provide a URL, username, or platform-specific ID.          |
| SSN (`ssns[]`)                                        | Full SSN or last four digits.                              |

The more inputs you supply, the higher the match confidence and the richer the downstream Verify/Signals coverage. If you have multiple identifiers, send them all in the same payload.

### Core contact identifiers

| Input                     | Field(s)                | Type                           | Applies to       | Usage & rules                                                                                                                                                                             |
| ------------------------- | ----------------------- | ------------------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Email                     | `email`, `emails[]`     | string / string\[]             | Verify & Signals | Accepts cleartext or MD5/SHA-256 hashes. Provide up to 20 entries per request. Arrays let us return expanded linked identifiers.                                                          |
| Phone Number              | `phone`, `phones[]`     | string / string\[]             | Verify & Signals | Provide E.164 formatted numbers (always include the country/region code). Non-E.164 numbers are normalized on a best-effort basis with a US default.                                      |
| Social Media Handle / ID  | `profiles[]`            | object\[]                      | Verify & Signals | Each object can include `service`, `url`, `username`, `userid`, `followers`, `following`, `score`, or `bio`. Use this for social URLs, marketplace handles, or user IDs.                  |
| SSN                       | `ssns[]`                | string\[]                      | Verify & Signals | Provide one full 9-digit SSN, with or without dashes, or its last four digits. Do not send more than one SSN value per request.                                                           |
| Work Organization / Title | `organization`, `title` | string                         | Verify & Signals | Optional employer and job title context. Include when you capture business inputs (for example, from work emails or onboarding forms) to improve match precision on professional signals. |
| Name                      | `name.{identifier}`     | object ([Name](#name))         | Verify & Signals | Provide structured names whenever you also send a postal address. A name alone does not return data data unless it is paired with a core identifier or postal address.                    |
| Location/Address          | `location.{identifier}` | object ([Location](#location)) | Verify & Signals | Postal addresses should always be paired with a `name` object. Include `country` and `countryCode` where possible for best match quality.                                                 |
| IP address                | `ipAddress`             | string                         | Verify & Signals | IPv4 or IPv6 of the current session. Used for geolocation consistency, device reputation, and digital checks.                                                                             |
| Birthday                  | `birthday`              | string (ISO-8601 date)         | Verify & Signals | Use YYYY-MM-DD. Unlocks age-based checks and breach lookups.                                                                                                                              |

#### Name

| Field         | Description                                                           |
| ------------- | --------------------------------------------------------------------- |
| `name.given`  | Required when providing an address; the first name (ASCII preferred). |
| `name.middle` | (Optional) middle name or initial.                                    |
| `name.family` | Required when providing an address; the last name.                    |

Always include at least `given` and `family` when submitting a postal address to avoid ambiguous identity matches.

#### Location

| Field                   | Description                                                                                     |
| ----------------------- | ----------------------------------------------------------------------------------------------- |
| `location.addressLine1` | Street number and primary line (required with other address parts).                             |
| `location.addressLine2` | Apartment, suite, or secondary line.                                                            |
| `location.city`         | City or locality.                                                                               |
| `location.region`       | Full region or state name.                                                                      |
| `location.regionCode`   | Region abbreviation (e.g., CO, NSW).                                                            |
| `location.postalCode`   | Postal or ZIP code.                                                                             |
| `location.country`      | Full country name.                                                                              |
| `location.countryCode`  | Two-letter [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country code. |

Pairing a `location` with a `name` counts as a person lookup. Providing partial addresses can refine a
lookup if provided with another core identifier, but cannot be used to lookup a person alone.

### Controls and request-time options

| Field(s)              | Type      | Applies to | Usage & rules                                                                                                                                                                                               |
| --------------------- | --------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `countries[]`         | string\[] | Signals    | Restrict responses to profiles that include at least one of the supplied [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) country codes. Mutually exclusive with `excludedCountries`. |
| `excludedCountries[]` | string\[] | Signals    | Return `204 No Content` if any matched identity belongs to the listed countries. Cannot be combined with `countries`.                                                                                       |

### Implementation tips

1. **Prefer arrays.** Use the plural form (`emails[]`, `phones[]`, `profiles[]`) even when you only have a single value today. This keeps your payload backward compatible as you add more signals later.
2. **Normalize before hashing.** Lowercase, trim whitespace, and collapse unicode lookalikes to ASCII before hashing or sending cleartext strings.
3. **Send linked attributes together.** A name plus postal address and IP address often eliminates false positives and increases Verify's score explainability.
4. **Country filtering is Signals-only.** Verify evaluates every identifier globally. Use `countries` or `excludedCountries` only when calling `POST /signals`.

### Example payload

The same JSON body works for both `/verify` and `/signals`. Mix and match as many identifiers as you have:

```json
{
  "emails": [
    "maria.trustwell@almanacmail.com",
    "92d01f8a6c5f6ad97cd9b9b7912ba0e8"
  ],
  "phones": ["+19175550199"],
  "ssns": ["123-45-6789"],
  "profiles": [
    {
      "service": "twitter",
      "username": "mariatrustywell",
      "url": "https://twitter.com/mariatrustywell"
    }
  ],
  "name": {
    "given": "Maria",
    "middle": "A",
    "family": "Trustwell"
  },
  "organization": "Northwind Mutual",
  "title": "VP, Deposit Risk",
  "location": {
    "addressLine1": "19 Highview Blvd",
    "city": "Brookhaven",
    "region": "New York",
    "regionCode": "NY",
    "postalCode": "11719",
    "country": "United States",
    "countryCode": "US"
  },
  "ipAddress": "65.142.71.22",
  "birthday": "1982-07-04"
}
```