FFraud IP API

IP fraud intelligence lookups.

GitHub OpenAPI

Operations 3

GET /public/ip/{ip} Check an IP (public, no key) #
POST /v1/ip/check Check an IP (with key) #
POST /v1/ip/batch Check up to 100 IPs #

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/ffraud-com:ffraud-com-ip-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

ffraud-com-ip-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FFraud IP API
  version: 1.0.0
  summary: Free, open IP and email fraud intelligence.
  description: 'Check any IP or email for fraud, VPN, proxy, Tor, datacenter, and abuse history. Free for everyone, no usage caps. The public endpoints need no API key; a free key adds batch lookups, usage stats, and the community reporting API. The database behind this API is published daily as MIT-licensed open data at https://github.com/FFraud-com .


    Drop-in compatibility endpoints let you migrate off AbuseIPDB, IPQualityScore, or ipinfo by changing one URL.'
  contact:
    name: FFraud
    url: https://ffraud.com
    email: team@ffraud.com
  license:
    name: MIT
    url: https://github.com/FFraud-com/ip-fraud-database/blob/main/LICENSE
servers:
- url: https://api.ffraud.com
  description: Production
security:
- {}
- ApiKeyHeader: []
tags:
- name: Ip
  description: IP fraud intelligence lookups.
paths:
  /public/ip/{ip}:
    get:
      tags:
      - Ip
      summary: Check an IP (public, no key)
      description: Full fraud intelligence for a single IP. No API key required, no usage caps, edge-cached for 5 minutes. This returns the same body as POST /v1/ip/check.
      operationId: publicIpCheck
      security:
      - {}
      parameters:
      - name: ip
        in: path
        required: true
        schema:
          type: string
        example: 80.82.77.33
        description: IPv4 or IPv6 address.
      responses:
        '200':
          description: IP intelligence.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IpResponse'
        '400':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v1/ip/check:
    post:
      tags:
      - Ip
      summary: Check an IP (with key)
      description: Full fraud intelligence for a single IP. Requires an API key.
      operationId: ipCheck
      security:
      - ApiKeyHeader: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IpCheckRequest'
      responses:
        '200':
          description: IP intelligence.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IpResponse'
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
  /v1/ip/batch:
    post:
      tags:
      - Ip
      summary: Check up to 100 IPs
      operationId: ipBatch
      security:
      - ApiKeyHeader: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchIpRequest'
      responses:
        '200':
          description: Results in request order.
          content:
            application/json:
              schema:
                type: object
                properties:
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/IpResponse'
                  total:
                    type: integer
                    example: 3
        '400':
          $ref: '#/components/responses/Error'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    Whois:
      type: object
      properties:
        network:
          type: string
        netname:
          type: string
        country:
          type: string
        org_name:
          type: string
        status:
          type: string
        abuse_contact:
          type: string
        source:
          type: string
    Carrier:
      type: object
      properties:
        name:
          type: string
        mcc:
          type: string
        mnc:
          type: string
    Company:
      type: object
      properties:
        name:
          type: string
        domain:
          type: string
        type:
          type: string
          enum:
          - isp
          - hosting
          - business
          - education
          - government
        network:
          type: string
          description: CIDR / range string for the company's network block.
        country:
          type: string
    ResidentialProxy:
      type: object
      properties:
        detected:
          type: boolean
        confidence:
          type: string
          enum:
          - very_high
          - high
          - medium
          - low
        recency:
          type: string
          enum:
          - active
          - recent
          - aging
          - stale
        last_seen:
          type: string
          format: date-time
        first_seen:
          type: string
          format: date-time
        persistence_days:
          type: integer
        times_seen:
          type: integer
        multi_provider:
          type: boolean
        provider_count:
          type: integer
    BatchIpRequest:
      type: object
      required:
      - ips
      properties:
        ips:
          type: array
          maxItems: 100
          items:
            type: string
          example:
          - 80.82.77.33
          - 8.8.8.8
    Error:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error_code:
          type: integer
          example: 1002
        error:
          type: string
          example: INVALID_API_KEY
        message:
          type: string
          example: The API key provided is not valid.
    IpCheckRequest:
      type: object
      required:
      - ip
      properties:
        ip:
          type: string
          example: 80.82.77.33
    IpResponse:
      type: object
      description: Flat structure for easy consumption. Optional fields are omitted when we have no data (no null soup).
      required:
      - success
      - ip
      - fraud_score
      - risk
      - proxy
      - vpn
      - tor
      - relay
      - hosting
      - mobile
      - is_abuser
      - is_crawler
      - recent_abuse
      - connection_type
      - is_residential_proxy
      - shared_connection
      - is_private
      - confidence
      - data_completeness
      properties:
        request_id:
          type: string
          example: req_1a186e8e3c657e922f10d8a
          description: 'Keyed calls only: the id of this request; quote it to support. A batch shares one. The public answer is cached and carries none.'
        success:
          type: boolean
        ip:
          type: string
          example: 80.82.77.33
        fraud_score:
          type: integer
          minimum: 0
          maximum: 100
          example: 95
        risk:
          type: string
          enum:
          - none
          - low
          - medium
          - high
          - critical
        reason:
          type: string
          description: Plain-English explanation of the score.
          example: Active command & control (C2) server. Persistent high-severity threat, confirmed repeatedly by our honeypot sensors and community reports.
        proxy:
          type: boolean
        vpn:
          type: boolean
        tor:
          type: boolean
        relay:
          type: boolean
        hosting:
          type: boolean
        mobile:
          type: boolean
        is_abuser:
          type: boolean
        is_crawler:
          type: boolean
        recent_abuse:
          type: boolean
          description: Abuse confirmed within the last 30 days.
        connection_type:
          type: string
          example: Data Center
        proxy_type:
          type: string
          description: 'Raw IP2Proxy PX12 class: PUB, VPN, WEB, RES, DCH, SES.'
        is_residential_proxy:
          type: boolean
        shared_connection:
          type: boolean
        ISP:
          type: string
        organization:
          type: string
        ASN:
          type: integer
          example: 15169
        leased_through:
          type: object
          description: The IP leasing marketplace or IPv4 broker whose geofeed places this address block; the lessee sets that location, so geo keeps the estimate. Information only, not part of the score.
          properties:
            name:
              type: string
              example: IPXO
            type:
              type: string
              enum:
              - leasing marketplace
              - IPv4 broker
        tunnel:
          type: object
          description: 'For a 6to4 or Teredo IPv6 address: the IPv4 address it carries. The verdict is that IPv4''s own.'
          properties:
            type:
              type: string
              enum:
              - 6to4
              - teredo
            ipv4:
              type: string
              example: 87.149.28.42
        asn_registered:
          type: string
          format: date
          example: '2000-03-30'
          description: When the network (ASN) got its current registration at its regional registry; a number passed to a new holder shows that date. Context only, not part of the score.
        vpn_provider:
          type: string
          example: NordVPN
        cloud_provider:
          type: string
          example: Google Cloud
        relay_service:
          type: string
          example: Apple iCloud Private Relay
        threat_type:
          type: string
          description: 'PX12 threat class: SPAM, SCANNER, BOTNET.'
        threat_tags:
          type: array
          items:
            type: string
          example:
          - c2_server
          - ssh_brute_force
        is_private:
          type: boolean
        subnet_abuse_ratio:
          type: number
          format: float
          description: Fraction of the /24 flagged abusive (0.0-1.0).
        subnet_total_ips:
          type: integer
        subnet_abuser_count:
          type: integer
        confidence:
          type: string
          enum:
          - high
          - medium
          - low
        data_completeness:
          type: number
          format: float
          description: Fraction of data layers that returned data (0.0-1.0).
        rdns_classification:
          type: string
          enum:
          - residential
          - mobile
          - hosting
          - vpn
          - corporate
          - education
          - government
          - no_ptr
          - unknown
        hostname:
          type: string
          description: Reverse-DNS (PTR) hostname, when published.
          example: mail.example.com
        isp_domain:
          type: string
          description: Domain of the ISP / network operator.
        first_seen:
          type: string
          format: date-time
          description: When this IP was first observed.
        last_seen:
          type: string
          format: date-time
          description: When this IP's intelligence was last confirmed.
        times_seen:
          type: integer
          description: Times observed across our cycles.
        total_reports:
          type: integer
          description: Aggregate community + honeypot reports for this IP.
        distinct_reporters:
          type: integer
          description: Distinct independent reporters.
        open_ports:
          type: array
          items:
            type: integer
          description: Open ports observed by our own scan sensors.
          example:
          - 22
          - 80
          - 443
        vulnerabilities:
          type: array
          items:
            type: string
          description: Known CVE identifiers for services observed on this IP.
          example:
          - CVE-2021-44228
        whois:
          $ref: '#/components/schemas/Whois'
        residential_proxy:
          $ref: '#/components/schemas/ResidentialProxy'
        carrier:
          $ref: '#/components/schemas/Carrier'
        company:
          $ref: '#/components/schemas/Company'
        geo:
          $ref: '#/components/schemas/Geo'
    Geo:
      type: object
      properties:
        country:
          type: string
          example: US
        country_name:
          type: string
          example: United States
        region:
          type: string
        city:
          type: string
        latitude:
          type: number
          format: float
        longitude:
          type: number
          format: float
        timezone:
          type: string
        asn:
          type: string
        asn_org:
          type: string
        isp:
          type: string
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Fair-use burst limit hit. Retry shortly. There are no daily or monthly caps; email team@ffraud.com to raise sustained throughput.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error:
      description: Bad request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your FFraud API key (ff_live_...). Create one free at https://ffraud.com/register .
    AbuseIpdbKey:
      type: apiKey
      in: header
      name: Key
      description: Your FFraud API key, sent in AbuseIPDB's `Key` header for the compatibility endpoint.
    IpinfoToken:
      type: apiKey
      in: query
      name: token
      description: Your FFraud API key, sent as ipinfo's `token` query param.
externalDocs:
  description: Full docs
  url: https://ffraud.com/docs