API

Two endpoints, no key, no sign-up

Everything the API returns is already on a public page, so putting a key in front of it would add a barrier without adding a protection. It is rate limited per address instead — 60 requests a minute, which is more than any honest use needs.

2

Endpoints

A lookup and a search. That is the whole surface.

60/min

Rate limit

Per IP address. No key to request or rotate.

607,297

Domains reachable

The same corpus the site serves.

CORS

Open

Callable straight from a browser.

Reference

Look up a domain

Returns the assessment for one domain: its score, the verdict in words, the registration and certificate facts behind it, and the findings the analysis produced.

GET https://legitsonar.com/api/v1/domains/{domain}

Request

curl https://legitsonar.com/api/v1/domains/cp.rs

Response 200

{
    "domain": "cp.rs",
    "score": 100,
    "band": 5,
    "verdict": "Likely trustworthy",
    "summary": "The signals we can check all point the same way. Normal care still applies.",
    "analysed_at": "2026-09-03T14:24:36+00:00",
    "registration": {
        "age_days": 6688,
        "registered_at": "2008-05-12T00:00:00+00:00",
        "renews_at": "2027-05-12T00:00:00+00:00",
        "owner_disclosed": true,
        "organisation": "PREMTEC DOO",
        "country": null
    },
    "certificate": {
        "valid": true,
        "issuer": "Let's Encrypt",
        "validation": "domain"
    },
    "findings": {
        "positive": [
            "This site seems to sell products online (how to check if it is a shop scam)",
            "According to the SSL check the certificate is valid",
            "This website has existed for quite some years",
            "DNSFilter considers this website safe"
        ],
        "negative": [
            "This website does not have many visitors",
            "Searching on Social Media we found negative links",
            "No reviews were found on commonly used review sites"
        ]
    },
    "tld": "rs",
    "links": {
        "report": "https://legitsonar.com/check-website/cp.rs",
        "pdf": "https://legitsonar.com/check-website/cp.rs/report.pdf"
    }
}

Errors

StatuserrorWhen
404not_found Nothing on file yet. The response carries an analyse link — opening it runs a live scan and creates the record.
429 Over 60 requests in a minute. Retry-After says how long to wait.

Search by name

The same index the type-ahead uses. Matches on any part of a domain name, ordered by relevance.

GET https://legitsonar.com/api/v1/search?q={query}&limit={1-50}

Request

curl 'https://legitsonar.com/api/v1/search?q=paypal&limit=5'

Response 200

{
    "query": "paypal",
    "count": 3,
    "results": [
        {
            "domain": "brightpics-paypaldetails-paypaldetails.ph",
            "score": 100,
            "band": 5,
            "analysed_at": "2026-08-28T10:16:44+00:00",
            "links": {
                "report": "https://legitsonar.com/check-website/brightpics-paypaldetails-paypaldetails.ph"
            }
        },
        {
            "domain": "paypal0013008.ph",
            "score": 80,
            "band": 4,
            "analysed_at": "2026-08-21T20:52:20+00:00",
            "links": {
                "report": "https://legitsonar.com/check-website/paypal0013008.ph"
            }
        },
        {
            "domain": "paypal0203008.ph",
            "score": 80,
            "band": 4,
            "analysed_at": "2026-08-21T20:52:21+00:00",
            "links": {
                "report": "https://legitsonar.com/check-website/paypal0203008.ph"
            }
        }
    ]
}

Before you build on it

Four things worth knowing

Responses are cached for five minutes

An assessment only moves when a scan lands, so the endpoint sends Cache-Control: public, max-age=300. Respect it and you will rarely meet the rate limit.

A score is a snapshot

analysed_at is on every response for a reason. A site can be sold or compromised the day after it was assessed — treat an old timestamp as a reason to re-check, not as a current fact.

The version is in the path

Fields may be added to v1 without warning; nothing will be removed or change meaning. A breaking change gets a new prefix, and this page will say so.

Do not use it to generate traffic

Reading an assessment is free. Triggering new scans in bulk is not what the limits are for, and it makes this server send requests to other people's sites. See the terms.

Need something the API does not do?

Batch submission, webhooks on a score change, higher limits — none of it exists yet, and what gets built depends on who asks for it.

Tell us what you need