GET/api/v2/mac/vendors
MAC vendor search API
Find a vendor's MAC address prefixes by its name.
- 120 calls a minute per IP
- Same engine as the MAC Lookup tool
{
"query": {
"q": "Raspberry Pi"
},
"vendors": [
{
"name": "Raspberry Pi (Trading) Ltd",
"country": "GB",
"prefixCount": 10,
"prefixes": [
{
"prefix": "28:CD:C1",
"block": "MA-L"
},
{
"prefix": "2C:CF:67",
"block": "MA-L"
},
{
"prefix": "3A:35:41",
"block": "CID"
},
{
"prefix": "88:A2:9E",
"block": "MA-L"
},
{
"prefix": "8C:1F:64:34:A",
"block": "MA-S"
},
{
"prefix": "98:FE:54",
"block": "MA-L"
},
{
"prefix": "D8:3A:DD",
"block": "MA-L"
},
{
"prefix": "DC:A6:32",
"block": "MA-L"
},
{
"prefix": "E4:5F:01",
"block": "MA-L"
},
{
"prefix": "F0:40:AF:9",
"block": "MA-M"
}
],
"truncated": false
},
{
"name": "Raspberry Pi Foundation",
"country": "US",
"prefixCount": 1,
"prefixes": [
{
"prefix": "B8:27:EB",
"block": "MA-L"
}
],
"truncated": false
}
],
"more": false,
"source": {
"registry": "IEEE Registration Authority",
"updated": "2026-10-18",
"url": "https://standards-oui.ieee.org/"
},
"tookMs": 545
}How it works
Searches the IEEE Registration Authority's organization names (grouped as the IEEE writes them, legal forms ignored). Every word of q must start a word of the name; whole-word matches come first, then the vendors holding the most prefixes.
At most 10 vendors come back (more says whether there were others: make q more specific), each with its first 100 prefixes; prefixCount is always the full count.
Answers kept: 1 day (`public, max-age=86400`): the registry snapshot changes with our monthly sync.
Query parameters
qstringrequiredA vendor name or the start of one, 2 to 64 characters.
Response fields
200 with this JSON object, plus tookMs, and incomplete with warnings when a source failed. Fields marked optional appear only when they apply.
queryobjectalwaysWhat was looked up, normalised (lower case, no trailing dot, IDNs as Punycode).qstringalwaysThe name searched, spaces collapsed.
vendorsarray of objectsalwaysMatching organizations, best first.Show 5 fields
namestringalwaysThe name as registered.countrystring or nullalwaysISO 3166-1 alpha-2 code where it is registered.prefixCountintegeralwaysHow many prefixes it holds.prefixesarray of objectsalwaysIts prefixes, the first 100.Show 2 fields
prefixstringalwaysThe prefix, colon notation.blockstringalwaysIts block type.one of
"MA-L","MA-M","MA-S","IAB","CID"
truncatedbooleanalwaysWhetherprefixesstops at 100.
morebooleanalwaysWhether more than 10 vendors matched.sourceobjectalwaysThe registry snapshot.registrystringalwaysAlwaysIEEE Registration Authority.updatedstringalwaysWhen our copy was synced (YYYY-MM-DD).urlstringalwaysThe IEEE's public listing.
Errors
503unavailableThe vendor index couldn't be read.
Plus the errors every endpoint can return: 400 for a missing or unreadable parameter, 429 past the limit, 503 when every source failed.
Code samples
curl -G "https://dnsrobot.net/api/v2/mac/vendors" \
--data-urlencode "q=Raspberry Pi"const params = new URLSearchParams({ q: "Raspberry Pi" });
const res = await fetch(`https://dnsrobot.net/api/v2/mac/vendors?${params}`);
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data.vendors);import requests
r = requests.get(
"https://dnsrobot.net/api/v2/mac/vendors",
params={"q": "Raspberry Pi"},
timeout=30,
)
data = r.json()
if not r.ok:
raise RuntimeError(data["error"]["message"])
print(data["vendors"])package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
q := url.Values{"q": {"Raspberry Pi"}}
res, err := http.Get("https://dnsrobot.net/api/v2/mac/vendors?" + q.Encode())
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
panic(err)
}
if res.StatusCode != http.StatusOK {
panic(data["error"])
}
fmt.Println(data["vendors"])
}<?php
$query = http_build_query(["q" => "Raspberry Pi"]);
$context = stream_context_create(["http" => ["ignore_errors" => true, "timeout" => 30]]);
$data = json_decode(file_get_contents("https://dnsrobot.net/api/v2/mac/vendors?" . $query, false, $context), true);
if (isset($data["error"])) {
throw new RuntimeException($data["error"]["message"]);
}
print_r($data["vendors"]);require "net/http"
require "json"
uri = URI("https://dnsrobot.net/api/v2/mac/vendors")
uri.query = URI.encode_www_form(q: "Raspberry Pi")
data = JSON.parse(Net::HTTP.get(uri))
raise data["error"]["message"] if data["error"]
puts data["vendors"]// Cargo.toml: reqwest = { version = "0.13", features = ["blocking", "json"] }, serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::get("https://dnsrobot.net/api/v2/mac/vendors?q=Raspberry+Pi")?;
let ok = res.status().is_success();
let data: serde_json::Value = res.json()?;
if !ok {
return Err(data["error"]["message"].to_string().into());
}
println!("{}", data["vendors"]);
Ok(())
}using System.Text.Json;
using var http = new HttpClient();
var res = await http.GetAsync("https://dnsrobot.net/api/v2/mac/vendors?q=Raspberry+Pi");
var data = JsonDocument.Parse(await res.Content.ReadAsStringAsync()).RootElement;
if (!res.IsSuccessStatusCode)
throw new Exception(data.GetProperty("error").GetProperty("message").GetString());
Console.WriteLine(data.GetProperty("vendors"));Raspberry Pi's prefixes
GET /api/v2/mac/vendors?q=Raspberry+Pi{
"query": {
"q": "Raspberry Pi"
},
"vendors": [
{
"name": "Raspberry Pi (Trading) Ltd",
"country": "GB",
"prefixCount": 10,
"prefixes": [
{
"prefix": "28:CD:C1",
"block": "MA-L"
},
{
"prefix": "2C:CF:67",
"block": "MA-L"
},
{
"prefix": "3A:35:41",
"block": "CID"
},
// … 7 more items
],
"truncated": false
},
{
"name": "Raspberry Pi Foundation",
"country": "US",
"prefixCount": 1,
"prefixes": [
{
"prefix": "B8:27:EB",
"block": "MA-L"
}
],
"truncated": false
}
],
"more": false,
"source": {
"registry": "IEEE Registration Authority",
"updated": "2026-10-18",
"url": "https://standards-oui.ieee.org/"
},
"tookMs": 545
}Shortened for the page: long lists show their first items.
Ubiquiti's prefixes
GET /api/v2/mac/vendors?q=Ubiquiti{
"query": {
"q": "Ubiquiti"
},
"vendors": [
{
"name": "Ubiquiti Inc",
"country": "US",
"prefixCount": 49,
"prefixes": [
{
"prefix": "00:15:6D",
"block": "MA-L"
},
{
"prefix": "00:27:22",
"block": "MA-L"
},
{
"prefix": "00:50:C2:B0:4",
"block": "IAB"
},
// … 46 more items
],
"truncated": false
}
],
"more": false,
"source": {
"registry": "IEEE Registration Authority",
"updated": "2026-10-18",
"url": "https://standards-oui.ieee.org/"
},
"tookMs": 0
}Shortened for the page: long lists show their first items.