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.
openapi: 3.2.0
info:
title: FFraud Compatibility 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: Compatibility
description: Drop-in replacements for AbuseIPDB, IPQualityScore, and ipinfo.
paths:
/compat/abuseipdb/v2/check:
get:
tags:
- Compatibility
summary: AbuseIPDB-compatible check
description: Drop-in replacement for GET https://api.abuseipdb.com/api/v2/check . Point your existing AbuseIPDB client or fail2ban action at this URL and pass your FFraud key in the `Key` header. Response matches AbuseIPDB's `data` envelope, plus an `ffraud_extras` object.
operationId: compatAbuseipdbCheck
security:
- AbuseIpdbKey: []
parameters:
- name: ipAddress
in: query
required: true
schema:
type: string
example: 80.82.77.33
- name: maxAgeInDays
in: query
schema:
type: integer
default: 90
responses:
'200':
description: AbuseIPDB-shaped response.
'401':
$ref: '#/components/responses/Unauthorized'
/compat/ipqs/json/{key}/{ip}:
get:
tags:
- Compatibility
summary: IPQualityScore-compatible check
description: Drop-in replacement for GET https://ipqualityscore.com/api/json/{key}/{ip} . Response mirrors IPQS's proxy-detection fields, plus an `ffraud_extras` object.
operationId: compatIpqsCheck
security:
- {}
parameters:
- name: key
in: path
required: true
schema:
type: string
description: Your FFraud API key, in the URL like IPQS.
- name: ip
in: path
required: true
schema:
type: string
example: 80.82.77.33
responses:
'200':
description: IPQS-shaped response.
'401':
$ref: '#/components/responses/Unauthorized'
/compat/ipinfo/{ip}:
get:
tags:
- Compatibility
summary: ipinfo-compatible lookup
description: 'Drop-in replacement for GET https://ipinfo.io/{ip} . Response mirrors ipinfo''s flat geo + privacy format, plus an `ffraud_extras` object. Pass your key as `?token=` or `Authorization: Bearer`.'
operationId: compatIpinfoCheck
security:
- IpinfoToken: []
parameters:
- name: ip
in: path
required: true
schema:
type: string
example: 8.8.8.8
- name: token
in: query
schema:
type: string
description: Your FFraud API key.
responses:
'200':
description: ipinfo-shaped response.
'401':
$ref: '#/components/responses/Unauthorized'
components:
schemas:
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.
responses:
Unauthorized:
description: Missing or invalid API key.
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