check

Classify a URL or IP address

Classifies one URL or IP address as malicious, suspicious or not_malicious and recommends an action (block, warn or allow). Call it before letting a user follow a link, open a QR-code destination or accept a connection from an IP you do not already trust. Consumes one unit of the tenant's monthly quota per successful call (cached results included); unparseable input (400) and blocked requests (429) are not billed. Quota and the per-minute limit are counted per tenant across all keys and IPs. It always returns a verdict. Sandbox (sk_test_) keys return environment: sandbox and licensedForProduction: false; use those results for integration testing only.

post/v1/check

Request

  • Base URL: https://api.skanqrcode.com
  • URL: https://api.skanqrcode.com/v1/check
  • Auth: HTTP bearer

Request body

targetstring required

A URL or an IP address (v4 or v6) to classify. Decimal, hexadecimal and octal IPv4 forms are treated as IP addresses. Up to 4096 characters.

userIdstring

Optional opaque identifier of the end user on whose behalf the check runs. It enables per-user result caching. It is hashed before use and never stored or logged in clear.

Example request

{
  "target": "https://example.com/login",
  "userId": "user-4821"
}

Response

A verdict was produced.

verdict'not_malicious' | 'suspicious' | 'malicious' required

The classification. See action for what to do about it: they are not the same field.

action'allow' | 'warn' | 'block' required

The recommended action for the caller. Fixed mapping, identical on every plan: not_malicious -> allow, suspicious -> warn, malicious -> block.

mode'url' | 'ip' required

Whether the target was evaluated as a URL or as an IP address.

reasonsstring[] required

Reason codes that contributed to the verdict. Codes name the category of evidence only, never a data source.

finalUrlstring nullable required

The URL a shortened link resolved to, when a redirect was followed; otherwise null.

cachedboolean required

True only when the result came from this tenant's own per-user cache, which requires userId. Best-effort: false when the per-user cache can't answer within a few milliseconds of where the request is served (for example, far from its replicas). The verdict is the same either way.

executionTimeMsinteger required

Server-side processing time of the evaluation in milliseconds.

environment'sandbox' | 'production' required

Derived from the calling key's plan, never from the request.

licensedForProductionboolean required

False on the free sandbox plan. Static plan metadata: it never changes verdict or action, but sandbox results must not be relied on for production enforcement.

requestIdstring required

Identifier to quote when contacting support.

Changes

No recorded changes to this operation across all 1 revision of this API.