jid-com Screen API

Engage or not: a fast, deterministic answer for a lead, sender, vendor or website

Operations 3

GET /v1/screen Should you engage? (query parameters) #
POST /v1/screen Should you engage? A fast, deterministic engage-or-not answer #
POST /v1/email-check Is this e-mail really from who it says? (raw headers in, checks and read out) #

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

Discovery needs no key. Ratings and market analysis are Pro.

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

jid-com-screen-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Jid Screen API
  version: 1.3.0
  summary: The trust API for AI agents.
  description: 'Before an agent pays, signs, books, hires or buys, Jid checks the business it is dealing with: real, active, licensed for this activity, not sanctioned, with the receipts. Every fact is cited to the registry that issued it. Decisions apply the published rules (https://jid.com/decision-rules, version 2026-10-15.1) and are not legal advice. No key: 10 requests a minute and 100 a day per IP. A free key (no card) includes 1,000 checks a month. Business information only; not a consumer report and not for FCRA purposes.'
  termsOfService: https://jid.com/api-terms
  contact:
    name: Jid
    email: hello@jid.com
    url: https://jid.com
servers:
- url: https://jid.com
security:
- {}
- bearer: []
tags:
- name: screen
  description: 'Engage or not: a fast, deterministic answer for a lead, sender, vendor or website'
paths:
  /v1/screen:
    get:
      tags:
      - screen
      operationId: screenGet
      summary: Should you engage? (query parameters)
      description: Same as POST /v1/screen, with the fields as query parameters.
      parameters:
      - name: domain
        in: query
        required: false
        schema:
          type: string
      - name: url
        in: query
        required: false
        schema:
          type: string
      - name: email
        in: query
        required: false
        schema:
          type: string
      - name: phone
        in: query
        required: false
        schema:
          type: string
      - name: company_name
        in: query
        required: false
        schema:
          type: string
      - name: name
        in: query
        required: false
        schema:
          type: string
      - name: context
        in: query
        required: false
        schema:
          type: string
      - name: policy
        in: query
        required: false
        schema:
          type: string
      - name: amount
        in: query
        required: false
        schema:
          type: number
      - name: country
        in: query
        required: false
        schema:
          type: string
      - name: ip_country
        in: query
        required: false
        schema:
          type: string
      - name: ip_region
        in: query
        required: false
        schema:
          type: string
      - name: ip_asn
        in: query
        required: false
        schema:
          type: string
      - name: browser_timezone
        in: query
        required: false
        schema:
          type: string
      - name: stated_country
        in: query
        required: false
        schema:
          type: string
      - name: signal
        in: query
        required: false
        schema:
          type: string
      - name: site
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Screen result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenResult'
        '400':
          $ref: '#/components/responses/Error'
        '402':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
    post:
      tags:
      - screen
      operationId: screen
      summary: Should you engage? A fast, deterministic engage-or-not answer
      description: 'No key: free tier (rate-limited per IP). With a key: 1 check. No AI in the decision. Pass any of domain, url, email, phone or company_name; the context; an amount; a policy. Returns engage (true/false), risk, confidence, subject_type, reasons with sources, mitigations, checks, a read (headline, engage | verify_first | do_not_engage, failed checks, lookup links: render the read for humans), the matched Jid file and a signed receipt. Hard rules (engage=false under every policy): confirmed exclusion, possible sanctions or export-list name match (manual review, never a finding), registry hard failure, phishing or malware listing, disposable e-mail, domain with no MX and no website, domain under 30 days old with an amount of $1,000 or more, and (strict only) an affiliation mismatch. Individuals get technical signals only. engage is advisory. Rules version 2026-10-05.2: https://jid.com/screen-rules'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                domain:
                  type: string
                  maxLength: 253
                url:
                  type: string
                  maxLength: 2000
                  description: Only the host is used.
                email:
                  type: string
                  maxLength: 254
                phone:
                  type: string
                  maxLength: 40
                  description: Ideally +E.164.
                company_name:
                  type: string
                  maxLength: 200
                name:
                  type: string
                  maxLength: 200
                  description: 'A person''s name: accepted, never looked up.'
                context:
                  type: string
                  enum:
                  - lead
                  - inbound_email
                  - partnership
                  - vendor
                  - purchase
                  - marketplace_seller
                  - agent_action
                  description: Default lead, or purchase when only a url or domain is given.
                policy:
                  type: string
                  enum:
                  - strict
                  - balanced
                  - permissive
                  default: balanced
                amount:
                  type: number
                  minimum: 0
                  description: USD at stake
                country:
                  type: string
                  pattern: ^[A-Z]{2}$
                  description: Default country for a phone number without +
                retain:
                  type: boolean
                  description: Keep the receipt 13 months instead of 30 days
                ip_country:
                  type: string
                  pattern: ^[A-Z]{2}$
                  description: 'Location check: country of the request (e.g. x-vercel-ip-country)'
                ip_region:
                  type: string
                  description: 'Location check: ISO 3166-2 region of the request'
                ip_city:
                  type: string
                  description: Accepted, not compared, not stored
                ip_asn:
                  type: integer
                  description: 'Location check: ASN of the request''s network (hosting/VPN recognition)'
                ip:
                  type: string
                  description: 'Optional raw IP: used in memory for the Tor and ASN lookups only, never stored or returned'
                browser_timezone:
                  type: string
                  description: 'Location check: IANA time zone from the browser'
                stated_country:
                  type: string
                  pattern: ^[A-Z]{2}$
                  description: 'Location check: the country the counterparty stated'
                signal:
                  type: string
                  description: Jid Signals token from the visitor's browser (the jid_signal form field set by https://jid.com/s/1.js; jid_signal is also accepted). When it verifies, its country, region, city, network type and time zone replace the ip_* fields and browser_timezone. Expired, altered or other-site tokens are skipped, never negative. See /signals.
                site:
                  type: string
                  description: 'The submitting website''s domain. Binds the signal token loosely: a token issued to another site is skipped.'
      responses:
        '200':
          description: Screen result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenResult'
        '400':
          $ref: '#/components/responses/Error'
        '402':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
  /v1/email-check:
    post:
      tags:
      - screen
      operationId: emailCheck
      summary: Is this e-mail really from who it says? (raw headers in, checks and read out)
      description: 'No key: free tier (rate-limited per IP). With a key: 1 check. Reads the receiving server''s Authentication-Results (SPF, DKIM, DMARC), Received-SPF, DKIM alignment with From, Reply-To vs From, and whether the From domain or a business display name imitates a known company''s registered domain. Returns checks and a read (headline, engage | verify_first | do_not_engage, failed checks, lookup links), the From and Reply-To domains and the authentication results. The headers are processed in memory and never stored. Deterministic, no AI.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - headers
              properties:
                headers:
                  type: string
                  maxLength: 65536
                  description: The raw message headers (Show original / View source); the body is not needed.
      responses:
        '200':
          description: Checks and read
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/Error'
        '402':
          $ref: '#/components/responses/Error'
        '429':
          $ref: '#/components/responses/Error'
components:
  schemas:
    OutcomeLinks:
      type: object
      description: 'Keyed calls only: signed one-click URLs that record an outcome (POST /v1/outcomes) without a login.'
      properties:
        legit:
          type: string
        sales_pitch:
          type: string
        spam:
          type: string
        scam:
          type: string
        closed:
          type: string
        good:
          type: string
          description: 2026-10-05 button, still accepted
        junk:
          type: string
          description: 2026-10-05 button, still accepted
    ScreenResult:
      type: object
      properties:
        engage:
          type: boolean
        risk:
          type: string
          enum:
          - low
          - medium
          - high
          - unknown
        confidence:
          type: number
          minimum: 0
          maximum: 1
        subject_type:
          type: string
          enum:
          - business
          - individual_or_unverified
          - website
        summary:
          type: string
        hard_rules:
          type: array
          items:
            type: string
        risk_points:
          type: number
        reasons:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              kind:
                type: string
                enum:
                - hard
                - negative
                - positive
                - info
                - skipped
              points:
                type: number
              text:
                type: string
              source:
                type: string
              source_url:
                type:
                - string
                - 'null'
              checked_at:
                type:
                - string
                - 'null'
        mitigations:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              text:
                type: string
        entity:
          type:
          - object
          - 'null'
          properties:
            id:
              type: string
            name:
              type: string
            url:
              type: string
            match_confidence:
              type: string
            relied_on:
              type: boolean
        checks:
          type: array
          items:
            $ref: '#/components/schemas/Check'
        read:
          $ref: '#/components/schemas/Read'
        website_declared:
          oneOf:
          - $ref: '#/components/schemas/WebsiteDeclared'
          - type: 'null'
        outcome_links:
          $ref: '#/components/schemas/OutcomeLinks'
        check_runs:
          type: object
          description: Which live lookups ran (this was `checks` before 2026-10-05).
          additionalProperties:
            type: string
            enum:
            - done
            - cached
            - skipped
            - not_applicable
            - failed
        receipt_id:
          type: string
        receipt_url:
          type: string
        rules_version:
          type: string
        latency_ms:
          type: number
        checks_used:
          type: number
        location:
          type: object
          description: Present when location inputs were given
          properties:
            consistent:
              type:
              - boolean
              - string
              description: true, false or "unknown"
            reference:
              type:
              - object
              - 'null'
            signals:
              type: array
              items:
                type: object
            network:
              type: object
              properties:
                type:
                  type: string
                  enum:
                  - tor
                  - hosting_or_vpn
                  - other
                  - unknown
                asn:
                  type:
                  - integer
                  - 'null'
                source:
                  type: string
            detail:
              type: string
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
          required:
          - code
          - message
    WebsiteDeclared:
      type: object
      description: 'What a company''s own website states about itself (provenance tier website_declared): identity context only, never a registry result. Present only when no Jid file holds or is associated with the domain.'
      properties:
        tier:
          type: string
          enum:
          - website_declared
        domain:
          type: string
        legal_name:
          type: string
          description: As printed, with its legal form
        trade_name:
          type:
          - string
          - 'null'
        address:
          type:
          - string
          - 'null'
          description: As printed; null when the site prints addresses in several states
        state:
          type:
          - string
          - 'null'
        postal_code:
          type:
          - string
          - 'null'
        source_url:
          type: string
        read_at:
          type: string
          format: date-time
        how:
          type: string
        note:
          type: string
    Check:
      type: object
      description: One check from the registry. New checks add rows, never fields.
      properties:
        id:
          type: string
          description: 'Stable id: registered, sanctions, threat_feeds, email_address, mail_domain, domain_age, website, affiliation, adverse_records, licence, phone, location, enquiry, funding, complaints, lookalike_domain, email_auth, history'
        label:
          type: string
        group:
          type: string
          enum:
          - identity
          - legitimacy
          - safety
          - location
          - capacity
          - history
        status:
          type: string
          enum:
          - pass
          - fail
          - unknown
          - na
        severity:
          type: string
          enum:
          - block
          - warn
          - info
          description: 'What a fail means: block = do not engage, warn = verify first, info = never changes the recommendation'
        evidence:
          type: string
        lookup:
          type: object
          properties:
            label:
              type: string
            url:
              type: string
        phrase:
          type: string
    Read:
      type: object
      description: 'What to show a human: render this and nothing else.'
      properties:
        headline:
          type: string
          examples:
          - 'Passed all 7 checks Jid could run. Recommendation: engage.'
          - 'Passed 6 of 7 checks Jid could run: sanctions failed. Recommendation: do not engage.'
          - 'Passed all 9 checks Jid could run. Not in an official registry Jid covers (Indonesia), so: verify first.'
        recommendation:
          type: string
          enum:
          - engage
          - verify_first
          - do_not_engage
        passed:
          type: integer
        total:
          type: integer
          description: Checks that ran (status pass or fail) and decide (severity block or warn), plus location consistency, which is counted but never decides
        reason:
          type: string
          description: 'Why a read with no registry match is not engage, e.g. "Not found on the registers Jid checks for Indonesia (LEI records only)". Also in the headline, followed by ", so: verify first".'
        not_checked:
          type: array
          maxItems: 4
          items:
            type: string
          description: Labels of deciding checks that did not run or did not finish
        sender:
          type: string
          description: 'Qualify only, response only (never stored): the Jid Signals location next to the stated place and the company domain''s age'
        failed:
          type: array
          maxItems: 3
          items:
            type: object
            properties:
              label:
                type: string
              evidence:
                type: string
              lookup:
                type: object
        lookups:
          type: array
          maxItems: 4
          items:
            type: object
            properties:
              label:
                type: string
              url:
                type: string
        file_url:
          type: string
        subject:
          type:
          - string
          - 'null'
  responses:
    Error:
      description: Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: 'jid_live_... key from https://jid.com/pricing (free key: no card).'
externalDocs:
  description: API reference
  url: https://jid.com/api-docs