MAC Address Lookup: Find Vendor, OUI & Device Type Mac API

The Mac API from MAC Address Lookup: Find Vendor, OUI & Device Type — 2 operation(s) for mac.

Operations 2

GET /v1/mac/{mac} Look up a single MAC address #
POST /v1/mac/batch Look up up to 100 MAC addresses in one request #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/macadress-mac-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

macadress-mac-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: macadress.com Mac API
  version: '1.0'
  description: 'MAC address / OUI vendor lookup. Every field on the lookup response beyond the original v1 set (see the x-added-in-version extension on each) is additive and nullable: existing integrations reading only the original fields are unaffected by new ones appearing alongside them.'
  contact:
    url: https://macadress.com/docs
  license:
    name: See https://macadress.com/terms
servers:
- url: https://api.macadress.com
security:
- apiKeyHeader: []
- apiKeyQuery: []
tags:
- name: Mac
paths:
  /v1/mac/{mac}:
    get:
      operationId: lookupMAC
      summary: Look up a single MAC address
      parameters:
      - name: mac
        in: path
        required: true
        schema:
          type: string
        description: 'Any common format: colon, dash, dot-grouped, space-separated, or bare hex (case-insensitive).

          '
        example: 00:03:93:AB:12:34
      responses:
        '200':
          description: Lookup result (present whether or not the address is registered)
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
            X-Data-Version:
              $ref: '#/components/headers/XDataVersion'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Result'
        '400':
          description: Input did not parse as a MAC address
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParseErrorBody'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      tags:
      - Mac
  /v1/mac/batch:
    post:
      operationId: lookupMACBatch
      summary: Look up up to 100 MAC addresses in one request
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - macs
              properties:
                macs:
                  type: array
                  maxItems: 100
                  items:
                    type: string
                api_key:
                  type: string
                  description: Alternative to the Authorization header or ?api_key= query param.
      responses:
        '200':
          description: One result per input, in the same order, each with the same shape as GET /v1/mac/{mac}
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
            X-Data-Version:
              $ref: '#/components/headers/XDataVersion'
            X-RateLimit-Limit:
              $ref: '#/components/headers/XRateLimitLimit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/XRateLimitRemaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/XRateLimitReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/BatchItem'
        '400':
          description: Malformed request body, empty macs array, or more than 100 entries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ParseErrorBody'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      tags:
      - Mac
components:
  schemas:
    DeviceCategory:
      type: string
      description: 'Controlled taxonomy. "unknown" when the vendor is too broad or no vendor profile exists in this deployment''s starter dataset: most registered organizations fall here today.

        '
      enum:
      - computer
      - smartphone
      - tablet
      - router
      - switch
      - wireless_access_point
      - firewall
      - server
      - storage
      - printer
      - camera
      - smart_tv
      - media_device
      - gaming_console
      - iot
      - embedded_device
      - industrial
      - medical
      - automotive
      - virtual_machine
      - container
      - network_interface
      - consumer_electronics
      - unknown
    BatchItem:
      allOf:
      - $ref: '#/components/schemas/Result'
      - type: object
        properties:
          input:
            type: string
            description: The original input string as submitted.
          error:
            type: string
            description: Present only when this entry failed to resolve.
    ParseErrorBody:
      type: object
      properties:
        valid:
          type: boolean
          enum:
          - false
        error:
          type: string
        request_id:
          type: string
    Result:
      type: object
      description: 'The x-added-in-version extension on a property marks it as added after the original v1 shape shipped; every such field is nullable or safely defaulted.

        '
      required:
      - mac
      - valid
      - oui
      - registered
      - transmission_type
      - administration_type
      - locally_administered
      - potentially_randomized
      - randomization_confidence
      - vendor_lookup_reliable
      - is_zero
      - is_broadcast
      - explanation
      - is_private
      - device
      - virtualization
      - special_use
      - vendor_location
      - randomization
      - local_vendor_derivation
      - meta
      properties:
        mac:
          type: string
          description: Canonical colon-separated uppercase form.
        valid:
          type: boolean
        oui:
          type: string
          description: Always the first 24 bits of the address itself, regardless of matched block width. See matched_prefix for the complete matched registry block.
        organization:
          type:
          - string
          - 'null'
        vendor_address:
          type:
          - string
          - 'null'
        country:
          type:
          - string
          - 'null'
          description: ISO 3166-1 alpha-2
          extracted from vendor_address.: null
        block_type:
          type:
          - string
          - 'null'
          enum:
          - MA-L
          - MA-M
          - MA-S
          - IAB
          - CID
          - null
        address_capacity:
          type:
          - integer
          - 'null'
        range_start:
          type:
          - string
          - 'null'
        range_end:
          type:
          - string
          - 'null'
        registered:
          type: boolean
        transmission_type:
          type: string
          enum:
          - unicast
          - multicast
          - broadcast
        administration_type:
          type: string
          enum:
          - universally_administered
          - locally_administered
        locally_administered:
          type: boolean
        slap_quadrant:
          type:
          - string
          - 'null'
          enum:
          - AAI
          - ELI
          - reserved
          - SAI
          - null
        eui64:
          type:
          - string
          - 'null'
        ipv6_link_local:
          type:
          - string
          - 'null'
        potentially_randomized:
          type: boolean
        randomization_confidence:
          type: string
          enum:
          - none
          - possible
          - likely
        vendor_lookup_reliable:
          type: boolean
        is_zero:
          type: boolean
        is_broadcast:
          type: boolean
        explanation:
          type: string
        is_private:
          type: boolean
          deprecated: true
          description: Use organization === null and vendor_lookup_reliable instead.
        matched_prefix:
          type:
          - string
          - 'null'
          x-added-in-version: '1.1'
          description: The complete registered prefix actually matched, at its real width (colon-separated bytes plus a trailing bare hex nibble for a non-byte-aligned width like /28 or /36). Null when unregistered.
        prefix_length:
          type:
          - integer
          - 'null'
          x-added-in-version: '1.1'
        registry:
          x-added-in-version: '1.1'
          oneOf:
          - type: 'null'
          - type: object
            properties:
              source:
                type: string
                enum:
                - IEEE
              record_type:
                type: string
                enum:
                - MA-L
                - MA-M
                - MA-S
                - IAB
                - CID
              record_updated_at:
                type:
                - string
                - 'null'
                format: date
                description: 'Always null today: IEEE''s public feeds carry no per-record update-date column.'
              database_synced_at:
                type:
                - string
                - 'null'
                format: date-time
        device:
          x-added-in-version: '1.1'
          type: object
          properties:
            category:
              $ref: '#/components/schemas/DeviceCategory'
            possible_categories:
              type: array
              items:
                $ref: '#/components/schemas/DeviceCategory'
            confidence:
              $ref: '#/components/schemas/ConfidenceNoneLowMediumHigh'
            inference_source:
              type:
              - string
              - 'null'
              enum:
              - vendor_profile
              - null
            exact_model_known:
              type: boolean
              enum:
              - false
              description: 'Always false: a MAC address alone never identifies an exact model.'
        virtualization:
          x-added-in-version: '1.1'
          type: object
          properties:
            detected:
              type: boolean
            platform:
              type:
              - string
              - 'null'
            confidence:
              type: string
              enum:
              - none
              - low
              - high
              - exact
            signals:
              type: array
              items:
                type: string
        special_use:
          x-added-in-version: '1.1'
          type: object
          properties:
            detected:
              type: boolean
            type:
              type:
              - string
              - 'null'
            protocol:
              type:
              - string
              - 'null'
            name:
              type:
              - string
              - 'null'
            source:
              type:
              - string
              - 'null'
            confidence:
              type: string
              enum:
              - none
              - high
              - exact
        vendor_location:
          x-added-in-version: '1.1'
          type: object
          properties:
            raw:
              type:
              - string
              - 'null'
            address_line:
              type:
              - string
              - 'null'
            city:
              type:
              - string
              - 'null'
            region:
              type:
              - string
              - 'null'
            postal_code:
              type:
              - string
              - 'null'
            country_code:
              type:
              - string
              - 'null'
            country_name:
              type:
              - string
              - 'null'
            parse_confidence:
              type: string
              enum:
              - none
              - low
              - medium
        randomization:
          x-added-in-version: '1.1'
          type: object
          description: Machine-readable explanation of potentially_randomized/randomization_confidence, cross-checked against virtualization.
          properties:
            potentially_randomized:
              type: boolean
            confidence:
              type: string
              enum:
              - none
              - possible
              - likely
            signals:
              type: array
              items:
                type: string
            alternative_explanations:
              type: array
              items:
                type: string
        local_vendor_derivation:
          x-added-in-version: '1.2'
          type: object
          description: 'Best-effort vendor recovery for a locally administered unicast address that looks formed by setting the U/L bit on a real IEEE assignment (multi-BSSID Wi-Fi APs, Wi-Fi Direct / P2P interfaces, naive MAC spoofing), rather than by OS privacy randomization. detected is true only when clearing the U/L bit yields a prefix that matches a registered block, the address is not already registered, it is unicast, it is not an SAI-quadrant protocol address, and its suffix is not all zero. confidence is always "low": a match is strong evidence the bits came from that OUI, but cannot tell an AP''s own BSSID from a spoofer who chose that OUI. This is never a decode of OS randomization, whose 46 bits are uniformly random.

            '
          properties:
            detected:
              type: boolean
            method:
              type: string
              enum:
              - ''
              - ul_bit_flip
            universal_mac:
              type:
              - string
              - 'null'
              description: The address actually looked up, i.e. this address with the U/L bit cleared. Null when detected is false.
            confidence:
              type: string
              enum:
              - none
              - low
            organization:
              type:
              - string
              - 'null'
              description: Registered organization behind the cleared prefix. Null when the block is private or nothing was derived.
            country:
              type:
              - string
              - 'null'
              description: ISO 3166-1 alpha-2 of the derived block.
            matched_prefix:
              type:
              - string
              - 'null'
            block_type:
              type:
              - string
              - 'null'
              enum:
              - MA-L
              - MA-M
              - MA-S
              - IAB
              - CID
              - null
            lookup_url:
              type:
              - string
              - 'null'
              format: uri
            device:
              oneOf:
              - type: 'null'
              - type: object
                description: enrich device-category inference run against the derived organization; same shape as the top-level device object.
                properties:
                  category:
                    $ref: '#/components/schemas/DeviceCategory'
                  possible_categories:
                    type: array
                    items:
                      $ref: '#/components/schemas/DeviceCategory'
                  confidence:
                    $ref: '#/components/schemas/ConfidenceNoneLowMediumHigh'
                  inference_source:
                    type:
                    - string
                    - 'null'
                    enum:
                    - vendor_profile
                    - null
                  exact_model_known:
                    type: boolean
                    enum:
                    - false
            signals:
              type: array
              items:
                type: string
        assignment:
          x-added-in-version: '1.1'
          oneOf:
          - type: 'null'
          - type: object
            properties:
              registered_at:
                type:
                - string
                - 'null'
                description: 'Always null: no authoritative IEEE registration date exists in the source feed.'
              first_seen_at:
                type:
                - string
                - 'null'
                format: date
                description: When this deployment first observed the record
                not an IEEE date.: null
              last_changed_at:
                type:
                - string
                - 'null'
                format: date
        vendor:
          x-added-in-version: '1.1'
          description: 'Conservative canonical identity: a mechanical slug of the exact registered name, never a merge of spelling variants or subsidiaries.'
          oneOf:
          - type: 'null'
          - type: object
            properties:
              id:
                type: string
              registered_name:
                type: string
              canonical_name:
                type: string
              slug:
                type: string
              block_count:
                type: integer
              lookup_url:
                type: string
                format: uri
        meta:
          x-added-in-version: '1.1'
          type: object
          properties:
            request_id:
              type: string
            api_version:
              type: string
              enum:
              - v1
            database_version:
              type:
              - string
              - 'null'
              format: date
            processed_at:
              type: string
              format: date-time
            cached:
              type: boolean
    ConfidenceNoneLowMediumHigh:
      type: string
      enum:
      - none
      - low
      - medium
      - high
  headers:
    XRateLimitReset:
      description: Seconds until the current window's usage resets.
      schema:
        type: integer
    XRateLimitRemaining:
      description: Requests remaining in the current sliding window.
      schema:
        type: integer
    XDataVersion:
      description: Date (UTC) the underlying vendor database last synced successfully. Same value as meta.database_version.
      schema:
        type: string
        format: date
    XRateLimitLimit:
      description: Requests-per-minute cap for the authenticated plan.
      schema:
        type: integer
    XRequestId:
      description: Per-request identifier, present on every response including errors.
      schema:
        type: string
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
    RateLimited:
      description: Requests-per-minute limit exceeded for the authenticated plan
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
  securitySchemes:
    apiKeyHeader:
      type: http
      scheme: bearer
      description: 'Authorization: Bearer mk_...'
    apiKeyQuery:
      type: apiKey
      in: query
      name: api_key
externalDocs:
  description: Full documentation with request/response examples
  url: https://macadress.com/docs