Skip to main content
POST
/
v2
/
resolve
Resolve v2
curl --request POST \
  --url https://api.minerva.io/v2/resolve \
  --header 'Content-Type: <content-type>' \
  --header 'x-api-key: <api-key>' \
  --data '{
  "records": [
    {
      "record_id": "<string>",
      "first_name": "<string>",
      "middle_name": "<string>",
      "last_name": "<string>",
      "full_name": "<string>",
      "name_suffix": "<string>",
      "emails": [
        "<string>"
      ],
      "phones": [
        "<string>"
      ]
    }
  ],
  "match_condition_fields": [
    "<string>"
  ]
}'
{
  "api_request_id": "req_abc123xyz",
  "results": [
    {
      "record_id": "user_001",
      "is_match": true,
      "minerva_pid": "p-a1b2c3d4e5f6g7h8i9j0",
      "linkedin_url": "https://www.linkedin.com/in/johnsmith",
      "match_score": 110.0,
      "is_resolvable_record": true,
      "validation_errors": {}
    },
    {
      "record_id": "user_002",
      "is_match": true,
      "minerva_pid": "p-b2c3d4e5f6a7b8c9d0e1",
      "linkedin_url": "https://www.linkedin.com/in/janedoe",
      "match_score": 50.0,
      "is_resolvable_record": true,
      "validation_errors": {}
    },
    {
      "record_id": "user_003",
      "is_match": false,
      "minerva_pid": null,
      "linkedin_url": null,
      "match_score": null,
      "is_resolvable_record": true,
      "validation_errors": {}
    }
  ],
  "request_completed_at": "2025-11-12T19:19:25.679685+00:00"
}

Quick Answer

How do I resolve a person’s identity? Use this endpoint to find someone’s Minerva PID (person identifier) and LinkedIn URL based on their name, email, or phone number.Common questions this endpoint answers:
  • How do I match a person to get their ID?
  • How do I find someone’s Minerva PID?
  • How do I look up a person by email?
  • How do I search for someone by phone number?
  • How do I get a person’s LinkedIn profile?
  • How can I identify someone from basic contact information?
  • How do I deduplicate or match records to unique people?
What you need: Name and/or contact information (email or phone).What you get back: Minerva PID (unique person identifier) and LinkedIn URL if available.Use cases:
  • Get a person’s PID to use with other endpoints (enrich, segments)
  • Match email addresses or phone numbers to unique individuals
  • Find LinkedIn profiles for contacts
  • Deduplicate customer records

Overview

The V2 Resolve endpoint provides enhanced identity resolution with two powerful matching modes: traditional fuzzy matching and reverse lookup. This version improves flexibility and adds LinkedIn URL to the response.

Key Enhancements in V2

  • Reverse Lookup: Resolve by single email or phone without requiring a name
  • LinkedIn URL: Returns LinkedIn profile URL in addition to Minerva PID
  • Match Condition Filters: Ensure matched records have specific data fields
  • Flexible Name Requirements: Name is optional when contact information is provided
  • Optional Record ID: Record ID is now optional for V2

Request

Headers

x-api-key
string
required
Your API key for authentication
Content-Type
string
required
application/json

Request Body

records
object[]
required
An array of person records to resolve. Maximum 1000 records per request.
match_condition_fields
string[]
New in V2: Optional list of fields that must be present in the matched record for it to be returned as a match. This filters results to only include matches that have these data fields available.Valid options: minerva_pid, linkedin_urlExample: ["linkedin_url"] will only return matches that have a LinkedIn profileExample: ["minerva_pid", "linkedin_url"] will only return matches that have both

Request Examples

Standard Fuzzy Matching

{
  "records": [
    {
      "record_id": "user_001",
      "first_name": "John",
      "last_name": "Smith",
      "emails": ["john.smith@example.com"],
      "phones": ["+1-555-123-4567"]
    }
  ]
}

Reverse Lookup (Email Only, No Name)

{
  "records": [
    {
      "record_id": "user_002",
      "emails": ["jane.doe@example.com"]
    }
  ]
}

Reverse Lookup (Phone Only, No Name)

{
  "records": [
    {
      "record_id": "user_003",
      "phones": ["+1-555-987-6543"]
    }
  ]
}

With Match Condition Filter

{
  "records": [
    {
      "first_name": "Jane",
      "last_name": "Doe",
      "emails": ["jane.doe@example.com"]
    }
  ],
  "match_condition_fields": ["linkedin_url"]
}

Response

Response Structure

api_request_id
string
Unique identifier for this API request
results
array
Array of resolution results, one per input record
request_completed_at
string
ISO 8601 timestamp when the request was completed

Result Object

record_id
string
Your identifier from the request (may be null if not provided)
is_match
boolean
Whether a match was found in the Minerva database
minerva_pid
string
Minerva person identifier (only present if is_match is true)
linkedin_url
string
New in V2: LinkedIn profile URL (only present if is_match is true and LinkedIn data is available)
match_score
number
Confidence score for the match (0-100 scale, only present if is_match is true)
is_resolvable_record
boolean
Whether the input record had sufficient valid data to attempt resolution
validation_errors
object
Object containing any validation errors encountered with the input data
{
  "api_request_id": "req_abc123xyz",
  "results": [
    {
      "record_id": "user_001",
      "is_match": true,
      "minerva_pid": "p-a1b2c3d4e5f6g7h8i9j0",
      "linkedin_url": "https://www.linkedin.com/in/johnsmith",
      "match_score": 110.0,
      "is_resolvable_record": true,
      "validation_errors": {}
    },
    {
      "record_id": "user_002",
      "is_match": true,
      "minerva_pid": "p-b2c3d4e5f6a7b8c9d0e1",
      "linkedin_url": "https://www.linkedin.com/in/janedoe",
      "match_score": 50.0,
      "is_resolvable_record": true,
      "validation_errors": {}
    },
    {
      "record_id": "user_003",
      "is_match": false,
      "minerva_pid": null,
      "linkedin_url": null,
      "match_score": null,
      "is_resolvable_record": true,
      "validation_errors": {}
    }
  ],
  "request_completed_at": "2025-11-12T19:19:25.679685+00:00"
}

Error Responses

Common Errors

  • 400 - Bad Request: Invalid input format or missing required fields
  • 401 - Unauthorized: Invalid or missing API key
  • 413 - Payload Too Large: More than 1000 records in request
  • 422 - Unprocessable Entity: Invalid data format or invalid match_condition_fields
  • 500 - Internal Server Error: Server error occurred

Notes

Matching Modes

V2 supports two distinct matching modes:

1. Fuzzy Matching Mode

  • Provide name information (first/last OR full_name) and/or contact information (emails/phones)
  • At least one of name or contact info must be provided
  • Uses advanced fuzzy matching algorithm
  • Returns match scores based on confidence (typically 0-100)

2. Reverse Lookup Mode

  • Activated when: No name provided AND exactly one email OR exactly one phone
  • Performs direct lookup in unique matching database
  • Faster than fuzzy matching
  • Returns match score of 50.0 for reverse lookup matches
  • Does not support multiple emails or phones simultaneously

Input Requirements

For Fuzzy Matching:
  • Provide either name OR contact information (or both)
  • If providing name, must include both first_name and last_name (or full_name)
  • Can provide multiple emails and/or phones
For Reverse Lookup:
  • Provide exactly ONE email OR exactly ONE phone
  • Do NOT provide name information
  • Cannot provide both email and phone

Match Condition Fields

Use match_condition_fields to filter results based on data availability:
  • minerva_pid - Only return matches where we have a Minerva PID
  • linkedin_url - Only return matches where we have LinkedIn profile data
This is useful when you need to ensure the matched person has specific data fields available before considering them a valid match.

Response Fields

  • record_id is optional in requests and may be null in responses
  • linkedin_url is new in V2 and only returned when available
  • match_score for reverse lookups is fixed at 50.0
  • match_score for fuzzy matches ranges from 0-100, with scores above 80 indicating high confidence

Validation

  • Phone numbers must be valid US phone numbers
  • Email addresses must be valid email format
  • Names must have at least first and last name components
  • Records that fail validation will have is_resolvable_record: false and details in validation_errors

Migration from V1

If you’re upgrading from V1:
  1. URL changes from /v1/resolve to /v2/resolve
  2. record_id is now optional (was required in V1)
  3. Name is now optional if you provide contact information
  4. New linkedin_url field in response
  5. Use reverse lookup for faster email/phone-only matching
  6. Use match_condition_fields to filter results by data availability
  7. Match scores may differ slightly due to improved algorithm