Resolve Dealer
curl --request POST \
--url https://api.autosnap.com/v1/dealers/resolve \
--header 'Content-Type: application/json' \
--data '
{
"api_key": "<string>",
"dealership_url": "<string>",
"dealer_name": "<string>",
"vin": "<string>",
"dealer_address": {}
}
'import requests
url = "https://api.autosnap.com/v1/dealers/resolve"
payload = {
"api_key": "<string>",
"dealership_url": "<string>",
"dealer_name": "<string>",
"vin": "<string>",
"dealer_address": {}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
api_key: '<string>',
dealership_url: '<string>',
dealer_name: '<string>',
vin: '<string>',
dealer_address: {}
})
};
fetch('https://api.autosnap.com/v1/dealers/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.autosnap.com/v1/dealers/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'api_key' => '<string>',
'dealership_url' => '<string>',
'dealer_name' => '<string>',
'vin' => '<string>',
'dealer_address' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.autosnap.com/v1/dealers/resolve"
payload := strings.NewReader("{\n \"api_key\": \"<string>\",\n \"dealership_url\": \"<string>\",\n \"dealer_name\": \"<string>\",\n \"vin\": \"<string>\",\n \"dealer_address\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.autosnap.com/v1/dealers/resolve")
.header("Content-Type", "application/json")
.body("{\n \"api_key\": \"<string>\",\n \"dealership_url\": \"<string>\",\n \"dealer_name\": \"<string>\",\n \"vin\": \"<string>\",\n \"dealer_address\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.autosnap.com/v1/dealers/resolve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"api_key\": \"<string>\",\n \"dealership_url\": \"<string>\",\n \"dealer_name\": \"<string>\",\n \"vin\": \"<string>\",\n \"dealer_address\": {}\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Dealers
Resolve Dealership
Look up a dealership by URL, name and address, or VIN.
POST
/
v1
/
dealers
/
resolve
Resolve Dealer
curl --request POST \
--url https://api.autosnap.com/v1/dealers/resolve \
--header 'Content-Type: application/json' \
--data '
{
"api_key": "<string>",
"dealership_url": "<string>",
"dealer_name": "<string>",
"vin": "<string>",
"dealer_address": {}
}
'import requests
url = "https://api.autosnap.com/v1/dealers/resolve"
payload = {
"api_key": "<string>",
"dealership_url": "<string>",
"dealer_name": "<string>",
"vin": "<string>",
"dealer_address": {}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
api_key: '<string>',
dealership_url: '<string>',
dealer_name: '<string>',
vin: '<string>',
dealer_address: {}
})
};
fetch('https://api.autosnap.com/v1/dealers/resolve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.autosnap.com/v1/dealers/resolve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'api_key' => '<string>',
'dealership_url' => '<string>',
'dealer_name' => '<string>',
'vin' => '<string>',
'dealer_address' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.autosnap.com/v1/dealers/resolve"
payload := strings.NewReader("{\n \"api_key\": \"<string>\",\n \"dealership_url\": \"<string>\",\n \"dealer_name\": \"<string>\",\n \"vin\": \"<string>\",\n \"dealer_address\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.autosnap.com/v1/dealers/resolve")
.header("Content-Type", "application/json")
.body("{\n \"api_key\": \"<string>\",\n \"dealership_url\": \"<string>\",\n \"dealer_name\": \"<string>\",\n \"vin\": \"<string>\",\n \"dealer_address\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.autosnap.com/v1/dealers/resolve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"api_key\": \"<string>\",\n \"dealership_url\": \"<string>\",\n \"dealer_name\": \"<string>\",\n \"vin\": \"<string>\",\n \"dealer_address\": {}\n}"
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}POST /v1/dealers/resolve
v1.0 schema lock. The response shape on this page is the locked v1.0 contract. We will never remove a documented field, never rename a field, and never change a field’s type without bumping to v2 (see Versioning). New fields may be added additively; your client must tolerate unknown keys.
dealership_urlalonedealership_url+vin(URL first, VIN fallback)dealer_name+vinvinalonedealer_name+dealer_address
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
api_key | string | Yes | Your API key |
dealership_url | string | No | Dealership website URL (e.g. https://www.carlblackroswell.com) |
dealer_name | string | No | Business name of the dealership |
vin | string | No | 17-character VIN. Used to look up the selling dealer via MarketCheck. |
dealer_address | object | No | Address object with street, city, state, and/or zip fields |
Resolution Methods
| Input Combination | Method | How It Works |
|---|---|---|
dealership_url only | url | Direct DB lookup. Returns immediately if found. |
dealership_url only (not in DB) | url_serp_confirmed or url_serp_fallback | Runs a web search. url_serp_confirmed if the search confirms the same URL; url_serp_fallback if it finds a different/corrected URL. |
dealership_url + vin | url, url_serp_confirmed, url_serp_fallback, or url_vin_fallback | Tries URL first (direct then SERP). If URL resolution fails entirely, falls back to VIN resolution. |
vin + dealer_name | vin | Looks up the VIN in active listings, finds the selling dealer, scores the name match. |
vin alone | vin | Same as above but uses the listing dealer name directly (name_match_confidence = 1.0). |
vin (dealer group detected) | vin_group_match | VIN found a dealer group. AI picks the specific dealership from the group. |
dealer_name + dealer_address | address | Runs a web search for the dealer, then uses AI to extract the correct website. Detects dealer groups and returns candidates if the name is ambiguous. |
Example — URL
curl -X POST "https://api.autosnap.com/v1/dealers/resolve" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"dealership_url": "https://www.carlblackroswell.com"
}'
Example — VIN + Dealer Name
curl -X POST "https://api.autosnap.com/v1/dealers/resolve" \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"dealer_name": "Auto Solutions",
"vin": "3TMLB5JN5SM127129"
}'
Response
{
"success": true,
"website_url": "carlblackroswell.com",
"dealership": {
"name": "Carl Black Buick Gmc",
"website": "carlblackroswell.com",
"street": "11225 Alpharetta Highway",
"city": "Roswell",
"state": "Georgia",
"phone": "678-317-2740"
},
"supported": true,
"setup_required": false,
"resolution": {
"method": "url",
"confidence": 1.0
}
}
Additional Response Fields (VIN and Address Resolution Only)
These fields appear only when resolving by VIN, name + address, or SERP fallback — not in direct URL lookups:| Field | Type | Description |
|---|---|---|
resolution.reasoning | string | null | Human-readable explanation of how the dealer was resolved |
resolution.matched_name | string | null | The dealer name that was matched |
resolution.name_match_confidence | float | null | Confidence score for the name match, from 0 to 1 |
resolution.resolution_source | string | null | Source of the resolution. Values: "vin_match", "vin_lookup", "vin_fallback", "vin_group_match", "name_match", "automated" |
Error Responses
LOW_CONFIDENCE_MATCH
Returned when the resolution finds candidates but confidence is below the threshold:{
"success": false,
"error": {
"code": "LOW_CONFIDENCE_MATCH",
"message": "Multiple potential matches found. Review candidates and retry with dealership_url.",
"candidates": [
{
"name": "Auto Solutions LLC",
"website": "autosolutionsllc.com"
}
],
"reasoning": "VIN found in inventory but dealer name match confidence was 0.35"
}
}
Dealer Group Detection
When resolving by name + address, if the name matches a dealer group with multiple brands (e.g. “Friendship” in Bristol, TN), the endpoint returns aDEALER_GROUP_DETECTED error with a list of candidates. Include the brand in the name (e.g. “Friendship Ford”) to resolve to a specific dealership.
{
"success": false,
"error": {
"code": "DEALER_GROUP_DETECTED",
"message": "Multiple dealerships detected under this dealer group. Specify a brand or use dealership_url.",
"candidates": [
{
"name": "Friendship Ford",
"website": "friendshipford.com"
},
{
"name": "Friendship Chrysler Jeep Dodge Ram",
"website": "friendshipchryslerjeepdodge.com"
}
],
"reasoning": "The name 'Friendship' matches a dealer group with multiple brands in Bristol, TN"
}
}
⌘I