{
  "openapi": "3.0.1",
  "info": {
    "title": "Fraud Detection API - IP, Email, Phone and URL Risk Score",
    "description": "Score any IP address, email address, phone number or URL for fraud. Proxy, VPN, Tor and bot detection with geolocation, email deliverability with disposable and catch-all checks, line type, carrier and SMS pumping risk, and phishing and malware scanning. Pay per result.",
    "version": "0.1",
    "x-build-id": "u7GLkMZPkLNWDNXbO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nabeelbaghoor~fraud-detection-scoring-api/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nabeelbaghoor-fraud-detection-scoring-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/nabeelbaghoor~fraud-detection-scoring-api/runs": {
      "post": {
        "operationId": "runs-sync-nabeelbaghoor-fraud-detection-scoring-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/nabeelbaghoor~fraud-detection-scoring-api/run-sync": {
      "post": {
        "operationId": "run-sync-nabeelbaghoor-fraud-detection-scoring-api",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "What to score",
            "enum": [
              "ip-reputation",
              "email-validation",
              "phone-validation",
              "url-scan"
            ],
            "type": "string",
            "description": "Which of the four services to call. Each one takes a different kind of input, so a run scores one kind of value at a time. Anything in the list that cannot be the kind this mode expects is refused before it is sent, since the provider charges per request either way.",
            "default": "ip-reputation"
          },
          "queries": {
            "title": "Values to score",
            "type": "array",
            "description": "The IP addresses, email addresses, phone numbers or URLs to score, one per line, matching the service chosen above. The URL service accepts either a full address or a bare domain. Phone numbers should include the country code; spaces, plus signs, brackets and dashes are stripped before sending. Duplicates are looked up once.",
            "items": {
              "type": "string"
            }
          },
          "strictness": {
            "title": "Strictness",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "How aggressively the provider should judge a value, from zero for the default balance through to the strictest setting each service supports. Raising it catches more genuine fraud and also flags more legitimate traffic, so it is worth moving one step at a time and looking at what changed. Leave at zero for the provider's own default.",
            "default": 0
          },
          "allowPublicAccessPoints": {
            "title": "Allow public access points",
            "type": "boolean",
            "description": "In the IP service, stop penalising shared connections such as universities, libraries, hotels and coffee shops. Worth turning on when your genuine users are on institutional networks, because otherwise a whole campus scores as one suspicious address.",
            "default": false
          },
          "lighterPenalties": {
            "title": "Lighter penalties",
            "type": "boolean",
            "description": "In the IP service, soften the scoring so fewer legitimate users are caught. The setting to reach for when the false positive rate matters more than catching every last case.",
            "default": false
          },
          "userAgent": {
            "title": "End user agent string",
            "type": "string",
            "description": "The browser user agent the end user came from, applied to every address in the IP service. The provider reads it as an extra signal, since a device that disagrees with the network it claims to be on is interesting in itself."
          },
          "userLanguage": {
            "title": "End user language",
            "type": "string",
            "description": "The browser language the end user came from, such as en-US, applied to every address in the IP service. Another cross-check: a language that does not match the geography is a signal."
          },
          "timeoutSeconds": {
            "title": "Verification timeout in seconds",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "In the email service, how long the provider may spend on a single address before answering with what it has. Raising it resolves more of the slow mail servers that would otherwise time out; lowering it finishes a long list faster. Leave empty for the provider's default of about seven seconds."
          },
          "fastMode": {
            "title": "Fast mode",
            "type": "boolean",
            "description": "In the email service, skip the slowest checks and answer sooner with slightly less certainty. Useful on very large lists where throughput matters more than resolving every borderline address.",
            "default": false
          },
          "phoneCountries": {
            "title": "Expected phone countries",
            "type": "array",
            "description": "In the phone service, the two-letter country codes a number might belong to. This is a parsing hint rather than a filter: a number written without a country code is ambiguous, and telling the provider which countries are plausible is what makes national-format numbers resolve correctly.",
            "items": {
              "type": "string"
            }
          },
          "extraParams": {
            "title": "Extra request parameters",
            "type": "object",
            "description": "A JSON object of extra query parameters, sent exactly as written. Each service takes its own set and the provider adds to them over time, so rather than guess at a union, only the documented ones have named fields above and anything else goes here. A parameter that does not apply to the service you are running simply has no effect."
          },
          "minFraudScore": {
            "title": "Minimum fraud score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only keep rows scoring at or above this on the zero to one hundred scale. Use it to turn a run into a review queue holding only what is actually suspicious. The URL service reports the same idea under its own name, and both are written to this column, so one threshold means one thing across all four services. Leave at zero to keep every score.",
            "default": 0
          },
          "maxFraudScore": {
            "title": "Maximum fraud score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Only keep rows scoring at or below this. The mirror of the minimum, and the one to use when you are building a clean list rather than a review queue. Leave at zero to keep every score.",
            "default": 0
          },
          "requireValid": {
            "title": "Keep only valid values",
            "type": "boolean",
            "description": "Drop rows the provider did not mark valid. Applies to the email and phone services, which are the two that answer that question.",
            "default": false
          },
          "deliverability": {
            "title": "Keep only these deliverability levels",
            "type": "array",
            "description": "In the email service, only keep rows at these deliverability levels, as the provider names them: high, medium or low. This is the filter most email list cleaning actually wants. Leave empty to keep every level.",
            "items": {
              "type": "string",
              "enum": [
                "high",
                "medium",
                "low"
              ],
              "enumTitles": [
                "High: safe to send",
                "Medium: send with care",
                "Low: likely to bounce"
              ]
            },
            "default": []
          },
          "excludeDisposable": {
            "title": "Drop disposable addresses",
            "type": "boolean",
            "description": "Leave out throwaway email domains, which are the usual signature of a signup that was never meant to be reachable.",
            "default": false
          },
          "excludeCatchAll": {
            "title": "Drop catch-all domains",
            "type": "boolean",
            "description": "Leave out addresses on domains that accept mail for every possible mailbox, since those cannot be confirmed one way or the other.",
            "default": false
          },
          "excludeRecentAbuse": {
            "title": "Drop values with recent abuse",
            "type": "boolean",
            "description": "Leave out values the provider has seen involved in abuse recently. Works across all four services.",
            "default": false
          },
          "excludeProxies": {
            "title": "Drop proxies, VPNs and Tor",
            "type": "boolean",
            "description": "In the IP service, drop addresses flagged as a proxy, a VPN or a Tor node.",
            "default": false
          },
          "excludeBots": {
            "title": "Drop bots and crawlers",
            "type": "boolean",
            "description": "In the IP service, drop addresses identified as automated traffic rather than a person.",
            "default": false
          },
          "requireActivePhone": {
            "title": "Keep only active phone numbers",
            "type": "boolean",
            "description": "In the phone service, drop numbers that are not currently in service. Being valid and being active are two different things: a well-formed number belonging to a real range can still be disconnected.",
            "default": false
          },
          "excludeVoip": {
            "title": "Drop VoIP numbers",
            "type": "boolean",
            "description": "In the phone service, leave out internet telephony numbers, which are cheap to obtain in bulk and are the usual shape of a throwaway signup.",
            "default": false
          },
          "lineTypes": {
            "title": "Keep only these line types",
            "type": "array",
            "description": "In the phone service, only keep rows whose line type matches one of these, written as the provider names them, such as Wireless or Landline. Matching ignores capitalisation. Leave empty to keep every type.",
            "items": {
              "type": "string"
            }
          },
          "unsafeOnly": {
            "title": "Keep only unsafe URLs",
            "type": "boolean",
            "description": "In the URL service, keep only addresses the provider flagged as unsafe. This turns a scan of your whole link inventory into a list of just the problems.",
            "default": false
          },
          "countries": {
            "title": "Keep only these countries",
            "type": "array",
            "description": "Only keep rows resolving to one of these two-letter country codes. Leave empty to keep every country.",
            "items": {
              "type": "string"
            }
          },
          "connectionTypes": {
            "title": "Keep only these connection types",
            "type": "array",
            "description": "In the IP service, only keep rows whose connection type matches one of these, written as the provider names them, such as Residential, Corporate, Data Center or Mobile. Matching ignores capitalisation. Leave empty to keep every type.",
            "items": {
              "type": "string"
            }
          },
          "requestsPerMinute": {
            "title": "Requests per minute",
            "minimum": 1,
            "maximum": 6000,
            "type": "integer",
            "description": "Pace the run so it stays under whatever rate your plan allows. Lower this if the provider starts rate limiting; raise it to finish a long list sooner.",
            "default": 300
          },
          "skipNotFound": {
            "title": "Skip values with no result",
            "type": "boolean",
            "description": "Leave values the provider returned nothing for, and inputs refused before they were sent, out of the dataset. Off by default, because knowing which of your values were unusable is usually the point. Misses are never charged for either way.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many rows. This is the cap on both spend and run time.",
            "default": 100
          },
          "apiKey": {
            "title": "API key",
            "type": "string",
            "description": "Your own API key for the fraud scoring API, taken from the settings page of your provider account. Note that this provider carries the key in the request URL rather than in a header, so nothing in this actor ever logs a request URL. Stored as a secret."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}