Resolve a vendor's contact
Resolve the real named decision-maker for a vendor from its SAM registration, with third-party registration agents filtered out. A large share of SAM point-of-contact slots are filled by a registration agent who files for hundreds of unrelated firms, not by the company's own people. This endpoint identifies those agents (names and addresses that repeat across many unrelated entities) and skips them, returning the actual company contact. When only an agent is on file it says so and names the agent, rather than passing it off as the company. Factual, deterministic, no scoring.
This is a resolver, not a directory. You pass the UEI of a company you already know (from search, an award, a subaward, or your own list) and get back one contact. To find companies in the first place use /companies/search or /partners/search, both of which carry the same resolved contact inline per firm.
Path parameter
uei: the 12-character SAM Unique Entity ID, case-insensitive. A malformed value returns400; a well-formed UEI with no SAM-registered entity returns404.
This endpoint takes no query parameters; any query string returns 400.
Example
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://govconapi.com/api/v1/company-contact/CKV2L9GZKJK3"
Response
A flat object. status is one of resolved, agent_only, or no_contact_on_file. registration_status is the SAM registration state, either A (active) or E (expired), so you can tell whether the contact comes from a current registration. entity_url is the company's own SAM-registered website, null when SAM has none on file (populated on roughly 59% of active entities). When status is resolved, confidence is high if the contact sits at the company's own registered address, and standard otherwise.
{
"uei": "MSBNSKCNQ3N3",
"company": "EBH FITNESS LLC",
"registration_status": "A",
"entity_url": "https://www.ebhfitnessllc.com",
"status": "resolved",
"contact": {
"name": "Steve Howard",
"title": "OWNER",
"city": "EL PASO",
"state": "TX",
"source": "past_performance_primary",
"confidence": "standard"
},
"_sources": ["sam_entities"]
}
When every point of contact on file is a shared registration agent, contact is null and agent_on_file names the agent and how many unrelated firms it appears on:
{
"uei": "MSJ4VNKMEXC5",
"company": "SHERWIN-WILLIAMS COMPANY, THE",
"status": "agent_only",
"contact": null,
"agent_on_file": { "name": "John Rybicki", "appears_on_companies": 2594 },
"note": "The SAM point of contact on file is a shared registration agent, not a direct company contact."
}
An agent is caught two ways, and agent_on_file reports whichever one caught it, so it carries exactly one of two count keys. appears_on_companies means the same person's name is the point of contact for that many unrelated firms. shared_address_firms means the name is unremarkable but the contact address is shared by that many unrelated firms, the other registration-agent signature. Both are common, so code against both and do not assume appears_on_companies is present:
{
"uei": "MCEPMUAG57J8",
"company": "SUPERIOR HOUSING AUTHORITY",
"registration_status": "A",
"status": "agent_only",
"contact": null,
"agent_on_file": { "name": "Andrea Tellez", "shared_address_firms": 103 },
"note": "The SAM point of contact on file is a shared registration agent, not a direct company contact."
}
The third case, no_contact_on_file, means the entity exists but carries no named point of contact; contact is null and there is no agent_on_file.
Rate limits, errors, and the honest ceiling
Rate limits: tighter than general search because it surfaces contact data: 20 requests/minute per IP, 30/minute per key. Bulk enumeration is not supported by design.
Errors: 400 (malformed UEI, or a query parameter was sent), 401 (no or invalid key), 402 (Developer key, Pro required), 404 (no SAM-registered entity for the UEI), 429 (rate limit), 503 (the agent index has not been built yet).
Names and titles only, not a dialer
SAM point-of-contact records carry names, titles, and city/state only, never email or phone, so this returns who to reach, not a dialer. entity_url (the company's own registered website, when SAM has one on file) is included directly for that reason , no need to pair this with a separate lookup just to find where to start. When entity_url is null too, a contact-enrichment provider is your next step. Across active vendors the resolver returns a real named contact for roughly 85%; the rest are honest agent_only (mostly large firms whose SAM registration runs through a shared services desk) or no_contact_on_file.