> ## Documentation Index
> Fetch the complete documentation index at: https://vpn-docs.wxapros.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ASN reputation

> Abuse score and per-class counts for one ASN.



## OpenAPI

````yaml GET /api/v1/asn/{asn}
openapi: 3.1.0
info:
  title: VPN & Proxy Detection API
  description: >-
    Lookup and bulk IP intelligence for VPN, proxy, Tor, relay, hosting, CDN,
    and residential proxy detection.


    **Authentication:** every endpoint in this reference requires your API key.
    https://vpn-docs.wxapros.com/authentication describes how to pass it.


    **Tiers:** Intro, Starter, Pro, Scale, Business, Enterprise. Pro+ adds
    residential proxy attribution, confidence/freshness, and CSV export.
    Business+ adds MMDB and Parquet bulk downloads. Enterprise adds NetFlow
    protocol attribution.
  contact:
    name: WXA VPN Support
    url: https://www.whoisxmlapi.com/
    email: service.desk@whoisxmlapi.com
  version: 1.0.0
servers:
  - url: https://vpn-proxy-detection.whoisxmlapi.com
    description: The public API. Every path in this reference starts with /api/v1.
security:
  - apiKey: []
paths:
  /api/v1/asn/{asn}:
    get:
      summary: ASN reputation
      description: >-
        The abuse score of one autonomous system, with the per-class counts
        behind it. It comes from the same daily computation as the `asn_abuse`
        block of an IP lookup and the ASN abuse leaderboard. The score is
        statistical, not a verdict on any one address:
        https://vpn-docs.wxapros.com/guides/asn-abuse explains what it measures.


        404 when we hold no score for the ASN.


        Available to Pro+ tiers.
      operationId: asn_reputation_api_v1_asn__asn__get
      parameters:
        - name: asn
          in: path
          required: true
          description: 'The AS number, without the AS prefix: 13335, not AS13335.'
          schema:
            type: integer
            minimum: 0
            maximum: 2147483647
            title: Asn
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                title: AsnReputation
                properties:
                  asn:
                    type: integer
                    description: The AS number you asked for.
                  asn_name:
                    type:
                      - string
                      - 'null'
                    description: The ASN's registered name as we hold it, or null.
                  asn_type:
                    type: string
                    enum:
                      - cdn
                      - hosting
                      - mobile
                      - residential
                      - enterprise
                    description: >-
                      A rough network type, guessed from keywords in the ASN's
                      registered name; enterprise when no keyword matches. A
                      hint, not a classification.
                  abuse_score:
                    type: integer
                    minimum: 0
                    maximum: 100
                    description: 0 to 100, higher is worse. It is not a percentage.
                  abuse_level:
                    type: string
                    enum:
                      - clean
                      - low
                      - moderate
                      - high
                      - critical
                    description: >-
                      `clean` (below 20), `low` (20 to 39), `moderate` (40 to
                      59), `high` (60 to 79) or `critical` (80 and up).
                  flagged_ratio:
                    type: number
                    minimum: 0
                    maximum: 1
                    description: >-
                      Our flagged IPv4 range entries in the ASN, each counted
                      once whatever its size, divided by the IPv4 addresses the
                      ASN announces, capped at 1; 0 when we know of no announced
                      IPv4 space. It is neither a share of addresses nor a share
                      of traffic.
                  counts:
                    type: object
                    description: >-
                      Our classified range entries in the ASN for five classes,
                      each entry counted once whatever its size, so these are
                      not address counts. Residential proxy exits we observe one
                      by one are not range entries and are not counted here.
                    properties:
                      vpn:
                        type: integer
                        minimum: 0
                        description: >-
                          Entries labelled vpn, or suspected_vpn (which is
                          advisory). Other VPN labels, such as commercial_vpn,
                          are not counted.
                      proxy:
                        type: integer
                        minimum: 0
                        description: Entries labelled proxy or datacenter_proxy.
                      tor:
                        type: integer
                        minimum: 0
                        description: Entries labelled tor.
                      concentrator:
                        type: integer
                        minimum: 0
                        description: >-
                          Entries labelled vpn_concentrator, a label no longer
                          assigned.
                      residential_proxy:
                        type: integer
                        minimum: 0
                        description: >-
                          Range entries labelled residential_proxy,
                          residential_proxy_likely or residential_proxy_mobile.
                    required:
                      - vpn
                      - proxy
                      - tor
                      - concentrator
                      - residential_proxy
                  avg_ip_persistence_days:
                    type:
                      - number
                      - 'null'
                    description: >-
                      The average number of days between first and last sighting
                      across our flagged entries in the ASN.
                  new_flags_last_30d:
                    type: integer
                    minimum: 0
                    description: >-
                      Flagged entries in the ASN first seen in the 30 days
                      before computed_at.
                  computed_at:
                    type:
                      - string
                      - 'null'
                    description: When the score was computed, in ISO 8601.
                required:
                  - asn
                  - asn_name
                  - asn_type
                  - abuse_score
                  - abuse_level
                  - flagged_ratio
                  - counts
                  - avg_ip_persistence_days
                  - new_flags_last_30d
                  - computed_at
        '403':
          description: >-
            Your plan is below Pro, or the key has no credits left or no active
            subscription
        '404':
          description: We hold no score for this ASN
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    apiKey:
      type: apiKey
      in: query
      name: apiKey
      description: >-
        Your API key, passed as the apiKey query parameter on every request. A
        key sent in a header (Authorization or X-API-Key) is not accepted and
        gets 401.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.