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

# IP Scoring

> Access comprehensive threat intelligence data linked to a specific IP address. This endpoint provides insights into malicious activity, reputation scoring, and potential security risks associated with the IP address.

export const MCPCallout = () => {
  return <div class="callout my-4 px-5 py-4 overflow-hidden rounded-2xl flex gap-3 border border-[rgba(192, 132, 252, 0.2)] bg-[rgba(192, 132, 252, 0.1)] dark:border-[#c084fc4d] dark:bg-[#c084fc1a] text-[#6005BB] dark:text-[#FFFFFF]" data-callout-type="callout">
      <div class="mt-0.5 w-4" data-component-part="callout-icon">
        <svg class="h-4 w-4 !m-0 shrink-0 bg-[#c084fc] [mask-image:url('https://d3gk2c5xim1je2.cloudfront.net/v7.1.0/duotone/fire.svg')] [-webkit-mask-image:url('https://d3gk2c5xim1je2.cloudfront.net/v7.1.0/duotone/fire.svg')] [mask-repeat:no-repeat] [-webkit-mask-repeat:no-repeat] [mask-position:center] [-webkit-mask-position:center]"></svg>
      </div>
      <div class="text-sm prose dark:prose-invert min-w-0 w-full [&_kbd]:bg-background-light dark:[&_kbd]:bg-background-dark text-[#6005BB] dark:text-[#FFFFFF]" data-component-part="callout-content">
        <span data-as="p">
          Want to skip the docs? Use the{" "}
          <a class="link mint-text-xs border-[#C792FC]" href="/docs-mcp-server">
            <b>MCP Server</b>
          </a>
        </span>
      </div>
    </div>;
};

export const Availability = ({plan, color}) => {
  const colorMap = {
    green: "text-green-700 dark:text-green-400",
    blue: "text-blue-700 dark:text-blue-400",
    purple: "text-purple-700 dark:text-purple-400"
  };
  return <div dir="ltr" data-orientation="horizontal" class="p-4 px-5 mt-0 md:mt-4 flex flex-col sm:flex-row flex-wrap gap-2 relative overflow-hidden rounded-2xl border border-gray-950/10 dark:border-white/10 my-0 bg-gray-50 dark:bg-white/5 dark:codeblock-dark text-gray-950 dark:text-gray-50 codeblock-light text-sm prose prose-gray dark:prose-invert font-semibold no-wrap-words">
      Endpoint availability:{" "}
      <span class={` ${colorMap[color]} flex-1`}>{plan}</span>
      <a class="custom-link text-xs" href="https://greip.io/detailed-pricing">
        Learn more
      </a>
    </div>;
};

## Authentication

Include your API key in the `Authorization` header:

```http theme={null}
Authorization: Bearer <api_key>
```

API v2 accepts the key only in this header, not in query parameters or request bodies. See [Authentication](/authentication).

### Path parameters

<ParamField path="ip" type="string" required placeholder="IP address">
  The IP address you want to retrieve threat intelligence for.

  Expected values: an IP address (IPv4 or IPv6)

  Sample value: `1.1.1.1`
</ParamField>

### Query parameters

<ParamField query="format" type="string" default="JSON" placeholder="Response format">
  The format command is used to get a response in a specific format.

  Expected values: `JSON`, `XML`, `CSV`, or `Newline`

  For more information please refer to [Response format](/options/response-format).
</ParamField>

<ParamField query="mode" type="string" default="live" placeholder="Environment">
  The mode command is used in the development stage to simulate the integration process before releasing it to the production environment.

  Expected values: `live`, or `test`.

  For more information please refer to [Development environment](/options/development-environment).
</ParamField>

<ParamField query="source" type="string" placeholder="Integration label">
  Optional label for your own analytics or support correlation (for example a product or channel name).
</ParamField>

<ParamField query="user_id" type="string" placeholder="User identifier">
  The user\_id command can be used to identify requests sent by specific users to monitor in the [Events page](/knowledge-base/events-and-alerts/overview).

  Expected values: email address, phone number, user id, name, etc.

  For more information please refer to [User identifier](/options/user-identifier).
</ParamField>

<Panel>
  <MCPCallout />

  <Availability plan="Standard and above" color="green" />

  <ResponseExample>
    ```json Success theme={null}

    {
      "success": true,
      "data": {
        "ip": "12.12.12.12",
        "score": 35,
        "risk_level": "medium",
        "recommendation": "review",
        "rules": [
          {
            "id": "IP_VPN_OR_PROXY",
            "description": "IP address is associated with VPN, proxy, or anonymization service."
          },
          {
            "id": "IP_HOSTING",
            "description": "IP address belongs to hosting or cloud provider ASN."
          }
        ],
        "security": {
          "vpn_or_proxy": true,
          "vpn_or_proxy_type": "Socks",
          "tor": false,
          "bot": false,
          "relay": false,
          "relay_country": null,
          "relay_city": null,
          "hosting": true,
          "is_blacklisted": false
        },
        "custom_rules_applied": {
          "total": 0,
          "rules": []
        }
      },
      "execution_ms": 90
    }

    ```

    ```json Error theme={null}
    {
      "success": false,
      "code": 101,
      "type": "invalid_key",
      "description": "The API Key is missing or invalid."
    }
    ```
  </ResponseExample>
</Panel>

### Response properties

<ResponseField name="success" type="boolean" required>
  `true` when the request succeeded; `false` on error.
</ResponseField>

<ResponseField name="data" type="object" required>
  <Expandable title="properties" defaultOpen={true}>
    <ResponseField name="ip" type="string" required>
      IP address you're looking up.
    </ResponseField>

    <ResponseField name="score" type="integer" required>
      Composite threat score from 0 to 100 derived from the `security` module.

      A higher score means higher risk.
    </ResponseField>

    <ResponseField name="risk_level" type="string" required>
      Risk band (`low`, `medium`, or `high`) from the composite score.
    </ResponseField>

    <ResponseField name="recommendation" type="string" required>
      Suggested action (`accept`, `review`, or `reject`).
    </ResponseField>

    <ResponseField name="rules" type="array" required>
      Each object has `id` and `description`. The array lists only signals that fired for this request (empty when none apply).

      <Expandable title="Rule ids">
        | Id | Description |
        | - | - |
        | `IP_BLACKLISTED` | IP address is on a Greip threat list or your custom blocklist. |
        | `IP_TOR` | IP address is a known Tor exit node. |
        | `IP_VPN_OR_PROXY` | IP address is associated with VPN, proxy, or anonymization service. |
        | `IP_RELAY` | IP address matches a private relay or similar anonymization pattern. |
        | `IP_BOT` | Request user-agent matches automated bot patterns. |
        | `IP_HOSTING` | IP address belongs to hosting or cloud provider ASN. |
      </Expandable>
    </ResponseField>

    <ResponseField name="security" type="object" required>
      <Expandable title="details">
        <ResponseField name="vpn_or_proxy" type="boolean" required>
          Indicates if the IP address is a proxy service.
        </ResponseField>

        <ResponseField name="vpn_or_proxy_type" type="string" required>
          Type of proxy used.
        </ResponseField>

        <ResponseField name="tor" type="boolean" required>
          Indicates if accessed through Tor network.
        </ResponseField>

        <ResponseField name="bot" type="boolean" required>
          Indicates if the user is a bot.
        </ResponseField>

        <ResponseField name="relay" type="boolean" required>
          Indicates if it's a Apple's Private Relay connection.
        </ResponseField>

        <ResponseField name="relay_country" type="string">
          Country code for Apple Private Relay when detected; otherwise `null`.
        </ResponseField>

        <ResponseField name="relay_city" type="string">
          City for Apple Private Relay when detected; otherwise `null`.
        </ResponseField>

        <ResponseField name="hosting" type="boolean" required>
          Indicates if the IP address belong to a hosting provider.
        </ResponseField>

        <ResponseField name="is_blacklisted" type="boolean" required>
          Indicates if the IP address is blacklisted due to applying [custom
          rules](/knowledge-base/custom-rules/overview) or were found in one of
          your blacklists.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="custom_rules_applied" type="object">
      The custom rules applied to this request, [learn
      more](/knowledge-base/custom-rules/overview).

      <Expandable title="properties" defaultOpen={true}>
        <ResponseField name="total" type="integer" required>
          The total number of custom rules applied to this request.
        </ResponseField>

        <ResponseField name="rules" type="array" required>
          Custom rules that matched this request.

          <Expandable title="properties" defaultOpen={true}>
            <ResponseField name="id" type="string" required>
              The rule ID as shown in the dashboard (e.g: `CR104`).
            </ResponseField>

            <ResponseField name="title" type="string" required>
              The rule title you set when creating the rule.
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="execution_ms" type="integer" required>
  Time taken to process the request (milliseconds).
</ResponseField>


## OpenAPI

````yaml openapi/v2.json GET /score/ip/{ip}
openapi: 3.0.3
info:
  title: Greip API v2 (docs playground)
  version: 2.0.0
servers:
  - url: https://v2.greipapi.com
security: []
paths:
  /score/ip/{ip}:
    get:
      summary: IP scoring
      operationId: scoreIp
      parameters:
        - name: ip
          in: path
          required: true
          schema:
            type: string
        - name: format
          in: query
          schema:
            type: string
            default: JSON
        - name: mode
          in: query
          schema:
            type: string
            default: live
        - name: source
          in: query
          schema:
            type: string
        - name: user_id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: OK
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

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