isMalicious Gate API

isinjected gate: prompt-injection scanning and link reputation for AI agents (own scan meter)

GitHub OpenAPI

Operations 3

GET /gate/quota GET /gate/quota #
POST /gate/scan POST /gate/scan #
GET /gate/url GET /gate/url?u= #

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/ismalicious-com:ismalicious-com-gate-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

ismalicious-com-gate-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ismalicious Com Gate API
  version: 1.2.0
  contact:
    name: isMalicious Support
    url: https://ismalicious.com/support
    email: contact@ismalicious.com
  license:
    name: Proprietary
    url: https://ismalicious.com/terms
  description: 'Operations tagged gate across 2 of this provider''s published API definitions: ismalicious-com-openapi.json, ismalicious-com-openapi2.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.ismalicious.com
  description: Production server
security:
- ApiKeyAuth: []
- BearerAuth: []
- BasicAuth: []
tags:
- name: gate
  description: 'isinjected gate: prompt-injection scanning and link reputation for AI agents (own scan meter)'
paths:
  /gate/quota:
    get:
      tags:
      - gate
      summary: GET /gate/quota
      operationId: quota_status
      responses:
        '200':
          description: Scan quota status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GateQuotaResponse'
      security:
      - ApiKeyAuth: []
    servers:
    - url: https://api.ismalicious.com
      description: Production server
  /gate/scan:
    post:
      tags:
      - gate
      summary: POST /gate/scan
      operationId: scan
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScanRequest'
        required: true
      responses:
        '200':
          description: Scan verdict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScanResponse'
        '400':
          description: Empty content
        '401':
          description: Unauthorized
        '413':
          description: Content exceeds 1 MiB
        '429':
          description: Scan quota exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuotaBody'
      security:
      - ApiKeyAuth: []
    servers:
    - url: https://api.ismalicious.com
      description: Production server
  /gate/url:
    get:
      tags:
      - gate
      summary: GET /gate/url?u=
      operationId: url
      parameters:
      - name: u
        in: query
        description: URL to check
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Reputation verdict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UrlResponse'
        '400':
          description: u must not be empty
        '401':
          description: Unauthorized
        '429':
          description: Scan quota exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuotaBody'
      security:
      - ApiKeyAuth: []
    servers:
    - url: https://api.ismalicious.com
      description: Production server
components:
  schemas:
    UrlResponse:
      type: object
      required:
      - url
      - entity
      - verdict
      - sources
      - latency_ms
      properties:
        entity:
          type: string
        latency_ms:
          type: integer
          format: int64
          minimum: 0
        sources:
          type: integer
          minimum: 0
        url:
          type: string
        verdict:
          type: string
    ScanResponse:
      type: object
      required:
      - verdict
      - injection
      - links
      - links_truncated
      - mode
      - latency_ms
      properties:
        injection:
          $ref: '#/components/schemas/InjectionReport'
        latency_ms:
          type: integer
          format: int64
          minimum: 0
        links:
          type: array
          items:
            $ref: '#/components/schemas/LinkVerdict'
        links_truncated:
          type: boolean
        mode:
          $ref: '#/components/schemas/Mode'
        sanitized_content:
          type:
          - string
          - 'null'
        source:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/LinkVerdict'
        verdict:
          type: string
          description: One of `block` | `warn` | `allow`.
    GateQuotaResponse:
      type: object
      required:
      - used
      - limit
      - remaining
      - percent
      - plan
      properties:
        limit:
          type: integer
          format: int64
          minimum: 0
        percent:
          type: integer
          format: int64
          minimum: 0
        plan:
          type: string
        remaining:
          type: integer
          format: int64
          minimum: 0
        used:
          type: integer
          format: int64
          minimum: 0
    ScanRequest:
      type: object
      required:
      - content
      properties:
        content:
          type: string
          description: The untrusted content to scan.
        mode:
          $ref: '#/components/schemas/Mode'
          description: 'Scan mode. `fast` (default) is heuristics-only; `thorough` reserves the

            v2 LLM judge and currently behaves as `fast`.'
        source_url:
          type:
          - string
          - 'null'
          description: Optional URL the content was fetched from (provenance for the flywheel).
    LinkVerdict:
      type: object
      required:
      - url
      - entity
      - verdict
      - sources
      properties:
        entity:
          type: string
        sources:
          type: integer
          minimum: 0
        url:
          type: string
        verdict:
          type: string
          description: One of `malicious` | `suspicious` | `clean` | `unknown`.
    SpanReport:
      type: object
      required:
      - start
      - end
      - family
      properties:
        end:
          type: integer
          minimum: 0
        family:
          type: string
        start:
          type: integer
          minimum: 0
    InjectionReport:
      type: object
      required:
      - score
      - families
      - spans
      properties:
        families:
          type: array
          items:
            type: string
        score:
          type: number
          format: double
          description: Injection score, 0.0..=1.0.
        spans:
          type: array
          items:
            $ref: '#/components/schemas/SpanReport'
    QuotaBody:
      type: object
      description: 'The scan-quota 429 (`/gate/scan`, `/gate/url`, `/mail/scan`).


        `error`, `usage` (a number, unlike the request 429''s object) and `limit`

        are the original contract and stay as they were; every other field was

        added on 2026-10-04 so the refusal says when it lifts and what the caller

        can do, as the request-quota 429 does.'
      required:
      - error
      - usage
      - limit
      properties:
        billingIssue:
          type:
          - boolean
          - 'null'
          description: 'True when the caller''s paid subscription is suspended (payment past

            due, unpaid, incomplete or paused): settle it, buy nothing.'
        cta:
          type: object
          description: '`primary` (`upgrade`, `contact` or `billing`), `url`, `reason`. A Free

            caller''s points at Pro.'
        docs:
          type:
          - string
          - 'null'
        error:
          type: string
        limit:
          type: integer
          format: int64
          description: Scans included per month on the caller's plan.
          minimum: 0
        message:
          type:
          - string
          - 'null'
          description: The refusal in words, with the day the allowance resets.
        promoCode:
          type:
          - string
          - 'null'
          description: First-transaction promo, offered to a Free caller only.
        promoDiscount:
          type:
          - integer
          - 'null'
          format: int32
          minimum: 0
        resetsAt:
          type:
          - string
          - 'null'
          description: 'When the allowance resets: 00:00 UTC on the 1st of next month.'
          example: '2026-11-01T00:00:00Z'
        retryAfter:
          type:
          - integer
          - 'null'
          format: int64
          description: 'Seconds until the reset. Deliberately not sent as a `Retry-After`

            header: a client that sleeps on it before retrying would wait days.'
        upgradeRequired:
          type:
          - boolean
          - 'null'
          description: True when buying a plan lifts the limit (Free, Basic).
        usage:
          type: integer
          format: int64
          description: Scans used this month.
          minimum: 0
    Mode:
      type: string
      enum:
      - fast
      - thorough
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
      description: Base64 encoded `apiKey:apiSecret`. Get your keys from https://ismalicious.com/app/account
    BasicAuth:
      type: http
      scheme: basic
      description: 'Username = apiKey, password = apiSecret. Legacy: any username, password = Base64(apiKey:apiSecret).'
    BearerAuth:
      type: http
      scheme: bearer
      description: '`Authorization: Bearer <token>` where token = Base64(apiKey:apiSecret) — the same credential as X-API-KEY.'
    sessionCookie:
      type: apiKey
      in: cookie
      name: __Secure-authjs.session-token
      description: Authenticated browser session. The claim endpoint also requires a verified email in the database; organization API keys cannot claim watches.
x-refined-from:
- ismalicious-com-openapi.json
- ismalicious-com-openapi2.json