Developers

iSuggest.ai API

Audit pages, verify and score your sites, and publish to the AI directories from your own code.

Release 1.1.0 · 2026-09-26 URL v1 OpenAPI 3.1 Changelog Get an API key
Releases
On this page

Guide

IntroductionQuickstartAuthenticationRequests and responsesErrorsCredits and costsPrivacy modelVersioningFair use

Service

GET/health

Audits

POST/reportsGET/reportsGET/reports/historyGET/reports/{id}POST/reports/{id}/refresh

Websites

GET/websitesPOST/websitesGET/websites/{host}POST/websites/{host}/verifyPOST/websites/{host}/releasePOST/websites/{host}/scanPOST/websites/{host}/scoreGET/websites/{host}/scoreGET/websites/{host}/reportPOST/websites/{host}/public

AI directory

POST/submissionsGET/submissions ?GET/submissionsGET/submissions/{provider}/{id}

Account

GET/credits/{email}GET/settings

Blog

GET/blogGET/blog/{slug}

Introduction

The iSuggest.ai API gives you the same audits, site scores and AI-directory publishing you get in the web app, over plain HTTPS and JSON. Everything you can do while signed in, you can script.

  • Base URL: https://isuggest.ai/api/v1
  • Format: JSON in, JSON out. Form-encoded bodies are also accepted.
  • Auth: one personal API key sent as a bearer token.
  • Versioned: this page documents release 1.1.0. Every release is kept, see the changelog.
  • Machine-readable: an OpenAPI 3.1 file you can import into Postman, Insomnia or a code generator.

Quickstart

Three steps, about a minute.

  1. Get a key. Log in, open Account → API access and press Generate API key. Copy it straight away: it is shown once.
  2. Export it so the examples below work as written.
  3. Run your first audit.
Set your key
export ISUGGEST_API_KEY="isk_your_key_here"
Check the service is up (no key needed)
curl -s https://isuggest.ai/api/v1/health
Audit a page
curl -s -X POST https://isuggest.ai/api/v1/reports \
  -H "Authorization: Bearer $ISUGGEST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'
Read back your audits
curl -s "https://isuggest.ai/api/v1/reports?limit=5" \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"

Authentication

Send your key in the Authorization header on every request except GET /health:

Authorization: Bearer isk_your_key_here
  • A key belongs to one account and can only ever read and change that account's own data. Asking for another account's data returns 403.
  • You have one active key. Creating a new key replaces the old one immediately, so anything still using the old key gets 401.
  • You can revoke your key at any time from Account → API access.
  • Treat a key like a password. Keep it in an environment variable or a secrets manager, never in client-side code, a public repository or a URL.
  • Keys are for servers and scripts you control. Do not embed one in a browser or mobile app.

Requests and responses

Every successful response wraps its payload in a data object. Every failure returns an error object with a human-readable message and the HTTP status.

// success
{ "data": { ... } }

// failure
{ "error": { "message": "You do not have access to this account.", "status": 403 } }
  • Timestamps are ISO 8601 in UTC, for example 2026-09-26T08:03:56+00:00.
  • IDs are opaque strings. Audits start with r_, directory snapshots with l_. Do not parse them.
  • Emails in paths must be URL-encoded: you@example.com becomes you%40example.com.
  • Missing data is null, never a made-up number. A score is null until there is enough real data to compute one.
  • Every response carries an X-API-Version header with the release that answered, such as 1.1.0.
  • Lists take a limit where they can be long, and return newest first.

Errors

Errors use standard HTTP status codes. The message is written for a person and is safe to show, but do not build logic on its wording. Branch on the status.

StatusMeaningWhat to do
400 / 422The request is missing something or a value is not valid.Read the message, fix the input, retry.
401No key, a wrong key, or a key that was replaced or revoked.Check the Authorization header and that the key is still current.
402Not enough credits for this action.Top up on the account page, or lower the request (for example fewer pages in a scan).
403The key is valid but this data or action is not yours.You can only act on your own audits, websites and account.
404The thing does not exist, or it is not yours to know about.Check the id. Audits that are not yours also answer 404 or 403, by design.
409A conflict, for example another account has already verified the domain.Follow the message.
429Too many audits too quickly (one per minute), or too many unverified websites on your account.For audits, wait the number of seconds in the Retry-After header and try again. For websites, verify or release one, then add another.
500 / 502Something failed on our side or in the audit engine, often because the audited site was unreachable.Retry after a moment. If it persists, the message says why.

Credits and costs

Auditing a single page is free. Two actions spend credits from your account balance, the same as in the app:

  • Publishing to an AI directory costs a fixed number of credits per directory, charged once per audit and directory. Publishing the same audit again to the same directory is free.
  • Scanning a whole site costs a fixed number of credits per page actually crawled, and you are charged for pages stored, not pages requested.

Current prices are in GET /settings. Your balance and ledger are in GET /credits/{email}. An action you cannot afford is refused with 402 before anything is done or charged.

Privacy model

  • Your audits are private. Only your key can read them. There is no way to list or open anyone else's.
  • Directory snapshots are public. When you publish, a frozen copy becomes a permanent public page and is readable by anyone. Who published it is not shown to anyone but the publisher.
  • A page must score 90 or more to be published. Below that, publishing is refused with 422 and the message says what the page scored.
  • Sites you scan must be yours. Scanning and scoring a whole website need you to prove control of the domain first.

Versioning

The URL carries the major version (/api/v1). It changes only if we ever have to break something, and we would run the old major alongside the new one.

Inside a major version, every change ships as a numbered release (1.0.0, 1.1.0, and so on), each with its own dated changelog entry and its own frozen copy of this documentation.

  • Patch (1.0.1): fixes and clarifications, no new behaviour.
  • Minor (1.1.0): new endpoints, new optional parameters, new fields in responses. Your existing code keeps working, so ignore fields you do not recognise.
  • Major (v2): anything that could break an existing integration.

Read the current release from GET /health or the X-API-Version header. Browse older documentation from the changelog.

Fair use

One audit per minute. Each account can run one single-page audit per minute, across the website, the API and every key it owns, because every audit uses the audit engine and Google services that have rate limits of their own. This applies to POST /reports and POST /reports/{id}/refresh. A request over the limit is refused with 429 and a Retry-After header holding the seconds to wait, and it does not use up your minute. An audit that fails because the page could not be reached does count, since the audit engine was still called. Site scans, publishing and reading data are not affected by it.

Beyond that, please keep concurrency low and cache results instead of re-auditing the same page. We may throttle or suspend keys that put the service at risk, and will say so here and in the changelog. Audit only pages you have the right to audit.

Service

A single unauthenticated call for monitoring and for discovering the current release.

GET /health No key needed

Service status and current API release

Use this for uptime checks and to read which release of the API is live. No key needed.

Example request
curl -s https://isuggest.ai/api/v1/health
Response 200
{
    "data": {
        "status": "ok",
        "version": "v1",
        "release": "1.1.0"
    }
}

Audits

Run a page audit and read your audits back. Audits are private to your account.

POST /reports API key

Run an audit

Crawls one public page, analyses it and stores the audit under your account. It is free. It usually takes a few seconds, so set a generous client timeout (60 seconds is sensible). Each account can run one audit per minute (see Fair use).

The page must be a public http or https address. Private-network addresses and URLs with credentials are refused. Re-auditing a URL you have audited before replaces the earlier audit.

Parameters
NameInTypeDescription
url required body string The full address of the page to audit, for example https://example.com/pricing.
Example request
curl -s -X POST https://isuggest.ai/api/v1/reports \
  -H "Authorization: Bearer $ISUGGEST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'
Response 201
{
    "data": {
        "report": {
            "id": "r_a812d5be44a5",
            "url": "https://example.com",
            "normalized_url": "https://example.com/",
            "domain": "example.com",
            "owner_email": "you@example.com",
            "created_at": "2026-09-26T08:03:56+00:00",
            "data": {
                "root_url": "https://example.com",
                "pages_crawled": 1,
                "summary": {
                    "status_codes": {
                        "200": 1
                    },
                    "errors": [],
                    "median_word_count": 21
                },
                "pages": [
                    {
                        "url": "https://example.com",
                        "status_code": 200,
                        "title": "Example Domain",
                        "meta_description": "",
                        "seo_analysis": {
                            "overall_score": 83,
                            "category_scores": {
                                "indexability": 82,
                                "metadata": 77,
                                "content": 72,
                                "technical": 95,
                                "social": 90,
                                "accessibility": 100
                            },
                            "issue_counts": {
                                "critical": 0,
                                "high": 3,
                                "medium": 1,
                                "low": 4
                            },
                            "issues": [
                                {
                                    "id": "missing_canonical",
                                    "category": "indexability",
                                    "severity": "high",
                                    "title": "Canonical URL is missing",
                                    "evidence": "canonical is empty",
                                    "recommendation": "Add a self-referencing canonical URL to declare the preferred address.",
                                    "penalty": 12
                                }
                            ],
                            "passed_checks": [
                                "..."
                            ]
                        }
                    }
                ],
                "performance": null
            },
            "summary": {
                "status_codes": {
                    "200": 1
                },
                "errors": []
            },
            "fallback": false,
            "note": null
        }
    }
}

Trimmed for readability. Each page object also carries headings, links, images, Open Graph and Twitter tags, structured data, text statistics and warnings. The audit's score is data.pages[0].seo_analysis.overall_score.

Errors
StatusMessage
422Enter a public http or https URL. Private-network and credentialed URLs are not allowed.
429You can run one audit per minute. Try again in 42 seconds.
500Audit failed: the page could not be reached or analysed (the message says why).
401A valid bearer token is required.
GET /reports API key

List your audits

Your audits, newest first, as light summaries with the score and issue counts. Fetch one audit by id for the full detail. An audit that was run before per-page scoring existed has score: null.

Parameters
NameInTypeDescription
limit query integer How many to return. Default 5, maximum 100.
Example request
curl -s "https://isuggest.ai/api/v1/reports?limit=10" \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "reports": [
            {
                "id": "r_a812d5be44a5",
                "url": "https://example.com",
                "normalized_url": "https://example.com/",
                "domain": "example.com",
                "owner_email": "you@example.com",
                "created_at": "2026-09-26T08:03:56+00:00",
                "updated_at": null,
                "fallback": false,
                "note": null,
                "public": false,
                "score": 83,
                "issue_counts": {
                    "critical": 0,
                    "high": 3,
                    "medium": 1,
                    "low": 4
                },
                "pages_crawled": 1
            }
        ]
    }
}
Errors
StatusMessage
401A valid bearer token is required.
GET /reports/history API key

Your audits grouped by domain

The same summaries as the list, grouped under each domain, for showing how a site has changed over time.

Example request
curl -s https://isuggest.ai/api/v1/reports/history \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "domains": {
            "example.com": [
                {
                    "id": "r_a812d5be44a5",
                    "url": "https://example.com",
                    "normalized_url": "https://example.com/",
                    "domain": "example.com",
                    "owner_email": "you@example.com",
                    "created_at": "2026-09-26T08:03:56+00:00",
                    "updated_at": null,
                    "fallback": false,
                    "note": null,
                    "public": false,
                    "score": 83,
                    "issue_counts": {
                        "critical": 0,
                        "high": 3,
                        "medium": 1,
                        "low": 4
                    },
                    "pages_crawled": 1
                }
            ]
        }
    }
}
Errors
StatusMessage
401A valid bearer token is required.
GET /reports/{id} API key

Get one audit in full

The complete audit: every page analysed, every issue with its evidence and recommendation, and the passed checks. You can only read your own audits.

Parameters
NameInTypeDescription
id required path string The audit id, from POST /reports or GET /reports.
Example request
curl -s https://isuggest.ai/api/v1/reports/r_a812d5be44a5 \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "report": {
            "id": "r_a812d5be44a5",
            "url": "https://example.com",
            "normalized_url": "https://example.com/",
            "domain": "example.com",
            "owner_email": "you@example.com",
            "created_at": "2026-09-26T08:03:56+00:00",
            "data": {
                "root_url": "https://example.com",
                "pages_crawled": 1,
                "summary": {
                    "status_codes": {
                        "200": 1
                    },
                    "errors": [],
                    "median_word_count": 21
                },
                "pages": [
                    {
                        "url": "https://example.com",
                        "status_code": 200,
                        "title": "Example Domain",
                        "meta_description": "",
                        "seo_analysis": {
                            "overall_score": 83,
                            "category_scores": {
                                "indexability": 82,
                                "metadata": 77,
                                "content": 72,
                                "technical": 95,
                                "social": 90,
                                "accessibility": 100
                            },
                            "issue_counts": {
                                "critical": 0,
                                "high": 3,
                                "medium": 1,
                                "low": 4
                            },
                            "issues": [
                                {
                                    "id": "missing_canonical",
                                    "category": "indexability",
                                    "severity": "high",
                                    "title": "Canonical URL is missing",
                                    "evidence": "canonical is empty",
                                    "recommendation": "Add a self-referencing canonical URL to declare the preferred address.",
                                    "penalty": 12
                                }
                            ],
                            "passed_checks": [
                                "..."
                            ]
                        }
                    }
                ],
                "performance": null
            },
            "summary": {
                "status_codes": {
                    "200": 1
                },
                "errors": []
            },
            "fallback": false,
            "note": null
        }
    }
}

Trimmed for readability. Each page object also carries headings, links, images, Open Graph and Twitter tags, structured data, text statistics and warnings.

Errors
StatusMessage
403You do not have access to this report.
404Report not found.
POST /reports/{id}/refresh API key

Re-crawl an audit in place

Runs the audit again on the same URL and replaces the stored result, keeping the same id. Free, and counts toward the one-audit-a-minute limit.

Parameters
NameInTypeDescription
id required path string The audit id.
Example request
curl -s -X POST https://isuggest.ai/api/v1/reports/r_a812d5be44a5/refresh \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "report": {
            "id": "r_a812d5be44a5",
            "url": "https://example.com",
            "normalized_url": "https://example.com/",
            "domain": "example.com",
            "owner_email": "you@example.com",
            "created_at": "2026-09-26T08:03:56+00:00",
            "data": {
                "root_url": "https://example.com",
                "pages_crawled": 1,
                "summary": {
                    "status_codes": {
                        "200": 1
                    },
                    "errors": [],
                    "median_word_count": 21
                },
                "pages": [
                    {
                        "url": "https://example.com",
                        "status_code": 200,
                        "title": "Example Domain",
                        "meta_description": "",
                        "seo_analysis": {
                            "overall_score": 83,
                            "category_scores": {
                                "indexability": 82,
                                "metadata": 77,
                                "content": 72,
                                "technical": 95,
                                "social": 90,
                                "accessibility": 100
                            },
                            "issue_counts": {
                                "critical": 0,
                                "high": 3,
                                "medium": 1,
                                "low": 4
                            },
                            "issues": [
                                {
                                    "id": "missing_canonical",
                                    "category": "indexability",
                                    "severity": "high",
                                    "title": "Canonical URL is missing",
                                    "evidence": "canonical is empty",
                                    "recommendation": "Add a self-referencing canonical URL to declare the preferred address.",
                                    "penalty": 12
                                }
                            ],
                            "passed_checks": [
                                "..."
                            ]
                        }
                    }
                ],
                "performance": null
            },
            "summary": {
                "status_codes": {
                    "200": 1
                },
                "errors": []
            },
            "fallback": false,
            "note": null,
            "updated_at": "2026-09-26T09:12:40+00:00"
        }
    }
}

Trimmed for readability. Each page object also carries headings, links, images, Open Graph and Twitter tags, structured data, text statistics and warnings.

Errors
StatusMessage
403You do not have access to this report.
404Report not found.
429You can run one audit per minute. Try again in 42 seconds.
500Audit failed: the page could not be reached or analysed.

Websites

Add a website, prove you control it, then scan it and read its GEO score. Scanning and scoring are for verified sites only, so nobody can crawl or rate a domain they do not own.

GET /websites API key

List your websites

The websites on your account, including ones you have added but not yet verified. For a site you own, the record includes its cached score. For a site you have only claimed, you see your own claim and nothing about whoever else may have added it.

Example request
curl -s https://isuggest.ai/api/v1/websites \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "websites": [
            {
                "host": "example.com",
                "display_host": "example.com",
                "owner_email": "you@example.com",
                "status": "verified",
                "verified_at": "2026-09-26T08:05:29+00:00",
                "verified_method": "meta",
                "released_at": null,
                "public_scorecard": false,
                "created_at": "2026-09-26T08:03:42+00:00",
                "updated_at": "2026-09-26T08:05:31+00:00",
                "score": "(the score object, see \"The score object\")"
            }
        ]
    }
}
Errors
StatusMessage
401A valid bearer token is required.
POST /websites API key

Add a website

Registers your interest in a domain and returns the verification token and the three ways to prove you control it. Adding a site does not make you its owner. Two accounts can add the same domain, and only whoever proves control gets it.

Use a bare domain such as example.com. A full URL is accepted and reduced to its host.

Parameters
NameInTypeDescription
host required body string The domain to add, for example example.com.
Example request
curl -s -X POST https://isuggest.ai/api/v1/websites \
  -H "Authorization: Bearer $ISUGGEST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"host": "example.com"}'
Response 201
{
    "data": {
        "ok": true,
        "outcome": "pending",
        "website": {
            "host": "example.com",
            "display_host": "example.com",
            "status": "pending",
            "verified_at": null,
            "released_at": null,
            "public_scorecard": false,
            "created_at": "2026-09-26T08:03:42+00:00",
            "updated_at": "2026-09-26T08:03:42+00:00",
            "your_token": "38bfed7b031704f4b64945d5dfad7515",
            "your_claim_at": "2026-09-26T08:03:42+00:00",
            "is_owner": false,
            "claim_count": 1
        },
        "instructions": {
            "meta": {
                "label": "HTML meta tag",
                "hint": "Paste this inside the <head> of your home page, then press Verify.",
                "snippet": "<meta name=\"isuggest-site-verification\" content=\"38bfed7b031704f4b64945d5dfad7515\">"
            },
            "file": {
                "label": "HTML file",
                "hint": "Upload a file at this path containing the token on its own line.",
                "snippet": "/isuggest-verification-38bfed7b031704f4b64945d5dfad7515.txt"
            },
            "dns": {
                "label": "DNS TXT record",
                "hint": "Add this TXT record at your DNS provider.",
                "snippet": "_isuggest.example.com  TXT  \"isuggest-site-verification=38bfed7b031704f4b64945d5dfad7515\""
            }
        }
    }
}

Returns 200 instead of 201 if you had already added this site.

Errors
StatusMessage
422That does not look like a website address we can verify. Use a public domain such as example.com.
409Another account has already verified this domain. If you own it, contact support and we will check the claim.
429You have too many unverified websites already. Verify or remove one before adding another.
GET /websites/{host} API key

Get one website and its verification steps

The website record and, while you hold an unverified claim, the exact tag, file or DNS record to publish to prove ownership. The token is yours alone.

Parameters
NameInTypeDescription
host required path string The domain, for example example.com.
Example request
curl -s https://isuggest.ai/api/v1/websites/example.com \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "website": {
            "host": "example.com",
            "display_host": "example.com",
            "status": "pending",
            "verified_at": null,
            "released_at": null,
            "public_scorecard": false,
            "created_at": "2026-09-26T08:03:42+00:00",
            "updated_at": "2026-09-26T08:03:42+00:00",
            "your_token": "38bfed7b031704f4b64945d5dfad7515",
            "your_claim_at": "2026-09-26T08:03:42+00:00",
            "is_owner": false,
            "claim_count": 1
        },
        "instructions": {
            "meta": {
                "label": "HTML meta tag",
                "hint": "Paste this inside the <head> of your home page, then press Verify.",
                "snippet": "<meta name=\"isuggest-site-verification\" content=\"38bfed7b031704f4b64945d5dfad7515\">"
            },
            "file": {
                "label": "HTML file",
                "hint": "Upload a file at this path containing the token on its own line.",
                "snippet": "/isuggest-verification-38bfed7b031704f4b64945d5dfad7515.txt"
            },
            "dns": {
                "label": "DNS TXT record",
                "hint": "Add this TXT record at your DNS provider.",
                "snippet": "_isuggest.example.com  TXT  \"isuggest-site-verification=38bfed7b031704f4b64945d5dfad7515\""
            }
        }
    }
}
Errors
StatusMessage
403You do not have access to this website.
404Website not found.
POST /websites/{host}/verify API key

Check the proof and claim ownership

Looks for your token on the site, by any of the three methods. If it finds it, you become the verified owner. If not, the response lists every place it looked and what it saw, so you can see exactly what to fix. A failed check is a normal 200 with ok: false, not an error.

Publish the token first (meta tag on the home page, a file at the given path, or the DNS TXT record), then call this. DNS changes can take a while to spread.

Parameters
NameInTypeDescription
host required path string The domain to verify.
Example request
curl -s -X POST https://isuggest.ai/api/v1/websites/example.com/verify \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "ok": false,
        "outcome": "not_found",
        "message": "We reached example.com but could not find your verification token. Check that the tag is on the home page itself and visible without JavaScript, then try again.",
        "attempts": [
            {
                "method": "dns",
                "source": "_isuggest.example.com",
                "result": "not found"
            },
            {
                "method": "meta",
                "source": "https://example.com/",
                "result": "tag not found"
            },
            {
                "method": "file",
                "source": "https://example.com/isuggest-verification-38bfed7b031704f4b64945d5dfad7515.txt",
                "result": "HTTP 404"
            }
        ],
        "website": {
            "host": "example.com",
            "display_host": "example.com",
            "status": "pending",
            "verified_at": null,
            "released_at": null,
            "public_scorecard": false,
            "created_at": "2026-09-26T08:03:42+00:00",
            "updated_at": "2026-09-26T08:03:42+00:00",
            "your_token": "38bfed7b031704f4b64945d5dfad7515",
            "your_claim_at": "2026-09-26T08:03:42+00:00",
            "is_owner": false,
            "claim_count": 1
        }
    }
}

On success, ok is true, outcome is verified, the website is yours, and adopted_reports counts earlier audits of the domain that were attached to you.

Errors
StatusMessage
409Add this website to your account before verifying it.
409Another account verified this domain first. Contact support if you believe this is wrong.
409This domain was released very recently and is on a short hold. Try again in 24 hours.
404Website not found.
POST /websites/{host}/release API key

Release a website from your account

Drops your claim or ownership. A domain you owned goes on a short hold before anyone else can verify it.

Parameters
NameInTypeDescription
host required path string The domain to release.
Example request
curl -s -X POST https://isuggest.ai/api/v1/websites/example.com/release \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "ok": true,
        "outcome": "released",
        "website": {
            "host": "example.com",
            "status": "released",
            "released_at": "2026-09-26T08:05:33+00:00"
        }
    }
}
Errors
StatusMessage
403You do not have a claim on that website.
404Website not found.
POST /websites/{host}/scan API key Spends credits

Scan several pages of a verified site

Crawls your site's pages, stores each as its own audit, and recomputes the site score from all of them. Only the verified owner can scan. You are charged for pages actually stored, at the per-page price in GET /settings, and a scan is limited to what your balance can pay for.

Parameters
NameInTypeDescription
host required path string A domain you have verified.
max_pages body integer How many pages to crawl. Default and maximum are set in site_scan_max_pages.
Example request
curl -s -X POST https://isuggest.ai/api/v1/websites/example.com/scan \
  -H "Authorization: Bearer $ISUGGEST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"max_pages": 10}'
Response 200
{
    "data": {
        "ok": true,
        "outcome": "scanned",
        "pages_scanned": 10,
        "pages_requested": 10,
        "credits_charged": 10,
        "balance": 14,
        "score": {
            "version": "1.0",
            "host": "example.com",
            "computed_at": "2026-09-26T08:05:31+00:00",
            "state": "provisional",
            "score": null,
            "grade": null,
            "grade_label": null,
            "pages_evaluated": 1,
            "pillars": {
                "page_health": {
                    "key": "page_health",
                    "label": "Page health",
                    "weight": 55,
                    "score": 83,
                    "available": true
                },
                "site_technical": {
                    "key": "site_technical",
                    "label": "Site technical",
                    "weight": 20,
                    "score": 70,
                    "available": true,
                    "checks": [
                        "..."
                    ]
                }
            },
            "caps_applied": [],
            "issue_counts": {
                "critical": 0,
                "high": 3,
                "medium": 1,
                "low": 4
            },
            "top_issues": [
                "..."
            ],
            "message": "Audited 1 of at least 3 pages needed for a domain grade. The page scores below are real; the domain score is not meaningful yet.",
            "signals": [
                "..."
            ]
        },
        "website": {
            "host": "example.com",
            "display_host": "example.com",
            "owner_email": "you@example.com",
            "status": "verified",
            "verified_at": "2026-09-26T08:05:29+00:00",
            "verified_method": "meta",
            "released_at": null,
            "public_scorecard": false,
            "created_at": "2026-09-26T08:03:42+00:00",
            "updated_at": "2026-09-26T08:05:31+00:00",
            "score": "(the score object, see \"The score object\")"
        }
    }
}
Errors
StatusMessage
403Verify that you control this website before scanning it.
402A site scan costs 1 credit(s) per page and your balance is 0.
502The audit engine could not crawl this site: (reason).
POST /websites/{host}/score API key

Recompute the site score

Recomputes the site's GEO score now, from your stored audits of the domain plus a fresh look at its robots.txt, sitemap and home page. It does not crawl new pages and it is free. Use scan to add pages first.

Parameters
NameInTypeDescription
host required path string A domain on your account.
Example request
curl -s -X POST https://isuggest.ai/api/v1/websites/example.com/score \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "ok": true,
        "outcome": "scored",
        "score": {
            "version": "1.0",
            "host": "example.com",
            "computed_at": "2026-09-26T08:05:31+00:00",
            "state": "provisional",
            "score": null,
            "grade": null,
            "grade_label": null,
            "pages_evaluated": 1,
            "pillars": {
                "page_health": {
                    "key": "page_health",
                    "label": "Page health",
                    "weight": 55,
                    "score": 83,
                    "available": true
                },
                "site_technical": {
                    "key": "site_technical",
                    "label": "Site technical",
                    "weight": 20,
                    "score": 70,
                    "available": true,
                    "checks": [
                        "..."
                    ]
                }
            },
            "caps_applied": [],
            "issue_counts": {
                "critical": 0,
                "high": 3,
                "medium": 1,
                "low": 4
            },
            "top_issues": [
                "..."
            ],
            "message": "Audited 1 of at least 3 pages needed for a domain grade. The page scores below are real; the domain score is not meaningful yet.",
            "signals": [
                "..."
            ]
        },
        "delta": null,
        "history": [
            {
                "date": "2026-09-26",
                "state": "provisional",
                "score": null,
                "grade": null,
                "pages_evaluated": 1
            }
        ],
        "website": {
            "host": "example.com",
            "display_host": "example.com",
            "owner_email": "you@example.com",
            "status": "verified",
            "verified_at": "2026-09-26T08:05:29+00:00",
            "verified_method": "meta",
            "released_at": null,
            "public_scorecard": false,
            "created_at": "2026-09-26T08:03:42+00:00",
            "updated_at": "2026-09-26T08:05:31+00:00",
            "score": "(the score object, see \"The score object\")"
        }
    }
}
Errors
StatusMessage
403You do not have access to this website.
404Website not found.
GET /websites/{host}/score API key

Read the cached site score and its history

The last computed score, the change since the previous one, and the score history (one point per day). It never reaches out to the site, so it is fast and safe to poll. stale is true when the score is old enough that you may want to recompute it.

Reading the score object: state is graded when there are enough audited pages (at least 3) to grade the domain, provisional when there are fewer, and unreachable when the site could not be reached. Unless it is graded, score is null and the pillars show only what could be measured. We do not show a number we cannot stand behind. See How scoring works for the pillars and checks.

Parameters
NameInTypeDescription
host required path string A domain on your account.
Example request
curl -s https://isuggest.ai/api/v1/websites/example.com/score \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "score": {
            "version": "1.0",
            "host": "example.com",
            "computed_at": "2026-09-26T08:05:31+00:00",
            "state": "provisional",
            "score": null,
            "grade": null,
            "grade_label": null,
            "pages_evaluated": 1,
            "pillars": {
                "page_health": {
                    "key": "page_health",
                    "label": "Page health",
                    "weight": 55,
                    "score": 83,
                    "available": true
                },
                "site_technical": {
                    "key": "site_technical",
                    "label": "Site technical",
                    "weight": 20,
                    "score": 70,
                    "available": true,
                    "checks": [
                        "..."
                    ]
                }
            },
            "caps_applied": [],
            "issue_counts": {
                "critical": 0,
                "high": 3,
                "medium": 1,
                "low": 4
            },
            "top_issues": [
                "..."
            ],
            "message": "Audited 1 of at least 3 pages needed for a domain grade. The page scores below are real; the domain score is not meaningful yet.",
            "signals": [
                "..."
            ]
        },
        "delta": null,
        "updated_at": "2026-09-26T08:05:31+00:00",
        "stale": false,
        "history": [
            {
                "date": "2026-09-26",
                "state": "provisional",
                "score": null,
                "grade": null,
                "pages_evaluated": 1
            }
        ]
    }
}

Trimmed. score is null if the site has never been scored.

Errors
StatusMessage
403You do not have access to this website.
404Website not found.
GET /websites/{host}/report API key

Combined site report

One report for the whole domain: the score, totals, every finding rolled up across pages with the pages it affects, findings by category, the pages ranked weakest first, and what passed. Built from stored audits only.

Parameters
NameInTypeDescription
host required path string A domain on your account.
Example request
curl -s https://isuggest.ai/api/v1/websites/example.com/report \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "report": {
            "host": "example.com",
            "generated_at": "2026-09-26T08:05:33+00:00",
            "criteria_version": "1.0",
            "score": {
                "version": "1.0",
                "host": "example.com",
                "computed_at": "2026-09-26T08:05:31+00:00",
                "state": "provisional",
                "score": null,
                "grade": null,
                "grade_label": null,
                "pages_evaluated": 1,
                "pillars": {
                    "page_health": {
                        "key": "page_health",
                        "label": "Page health",
                        "weight": 55,
                        "score": 83,
                        "available": true
                    },
                    "site_technical": {
                        "key": "site_technical",
                        "label": "Site technical",
                        "weight": 20,
                        "score": 70,
                        "available": true,
                        "checks": [
                            "..."
                        ]
                    }
                },
                "caps_applied": [],
                "issue_counts": {
                    "critical": 0,
                    "high": 3,
                    "medium": 1,
                    "low": 4
                },
                "top_issues": [
                    "..."
                ],
                "message": "Audited 1 of at least 3 pages needed for a domain grade. The page scores below are real; the domain score is not meaningful yet.",
                "signals": [
                    "..."
                ]
            },
            "totals": [
                "..."
            ],
            "findings": [
                "..."
            ],
            "by_category": [
                "..."
            ],
            "pages": [
                "..."
            ],
            "passed": [
                "..."
            ]
        }
    }
}

Trimmed. Each of totals, findings, by_category, pages and passed is a full structure in the live response.

Errors
StatusMessage
403You do not have access to this website.
404Website not found.
POST /websites/{host}/public API key

Show or hide the public scorecard

Your score is private by default. Turn this on to let people with the link see a public scorecard. Only the verified owner can change it.

Parameters
NameInTypeDescription
host required path string A domain you own.
public required body boolean true to publish the scorecard, false to hide it.
Example request
curl -s -X POST https://isuggest.ai/api/v1/websites/example.com/public \
  -H "Authorization: Bearer $ISUGGEST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"public": true}'
Response 200
{
    "data": {
        "ok": true,
        "outcome": "updated",
        "website": {
            "host": "example.com",
            "display_host": "example.com",
            "owner_email": "you@example.com",
            "status": "verified",
            "verified_at": "2026-09-26T08:05:29+00:00",
            "verified_method": "meta",
            "released_at": null,
            "public_scorecard": false,
            "created_at": "2026-09-26T08:03:42+00:00",
            "updated_at": "2026-09-26T08:05:31+00:00",
            "score": "(the score object, see \"The score object\")"
        }
    }
}
Errors
StatusMessage
403Only the verified owner can change that.

AI directory

Publish a good audit as a permanent public snapshot in the Gemini, ChatGPT or Claude directory, in HTML, JSON and Markdown, for AI crawlers to read. Providers: gemini, chatgpt, claude.

POST /submissions API key Spends credits

Publish an audit to an AI directory

Freezes one of your audits as a public snapshot. Three rules:

  • The audit must be yours.
  • The audited page must score 90 or more. Below that, or with no score, it is refused with 422 and the message says what the page scored. Fix the issues and audit again.
  • It costs credits, charged once per audit and directory. Publishing the same audit to the same directory again returns the existing snapshot and charges nothing.

A snapshot is permanent and public. It cannot be edited or removed by the API. The response includes what was charged and your new balance.

Parameters
NameInTypeDescription
report_id required body string The audit id.
provider required body string One of gemini, chatgpt, claude.
Example request
curl -s -X POST https://isuggest.ai/api/v1/submissions \
  -H "Authorization: Bearer $ISUGGEST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"report_id": "r_a812d5be44a5", "provider": "gemini"}'
Response 201
{
    "data": {
        "submission": {
            "id": "l_1eb2e88fe918221b2352",
            "provider": "gemini",
            "source_report_id": "r_a812d5be44a5",
            "source_url": "https://example.com",
            "submitted_at": "2026-09-26T08:04:11+00:00",
            "snapshot_sha256": "1f964f1ee8b8c6504cc61c3f9423e0dd08d57ab2bf25ed14855dabc125c75cca",
            "title": "Example Domain",
            "description": "",
            "score": 94,
            "knowledge": {
                "captured": false
            },
            "submitted_by": "you@example.com",
            "target_crawlers": [
                "Google-Extended",
                "Googlebot"
            ],
            "report": [
                "..."
            ]
        },
        "credits_charged": 10,
        "balance": 15
    }
}

The full snapshot is returned to you, its publisher, including the frozen report. It is trimmed here.

Errors
StatusMessage
422This page scores 83. A page needs 90 or more to be published to an AI directory. Fix the issues in the report, then audit it again.
422This audit has no score yet, so it cannot be published. Re-audit the page to get one; a page needs 90 or more to go into an AI directory.
402Publishing to gemini costs 10 credit(s) and your balance is 0.
403You may only publish audits you ran.
404Report not found.
GET /submissions?owner={email} API key

List the snapshots you published

Snapshots published by your account, newest first. This is the only list that shows who published. Passing someone else's email does not work: a key is always limited to its own account.

Parameters
NameInTypeDescription
owner required query string Your own email address, URL-encoded.
Example request
curl -s "https://isuggest.ai/api/v1/submissions?owner=you%40example.com" \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "submissions": [
            {
                "id": "l_1eb2e88fe918221b2352",
                "provider": "gemini",
                "source_report_id": "r_a812d5be44a5",
                "source_url": "https://example.com",
                "submitted_at": "2026-09-26T08:04:11+00:00",
                "snapshot_sha256": "1f964f1ee8b8c6504cc61c3f9423e0dd08d57ab2bf25ed14855dabc125c75cca",
                "title": "Example Domain",
                "description": "",
                "score": 94,
                "knowledge": {
                    "captured": false
                },
                "submitted_by": "you@example.com"
            }
        ]
    }
}
Errors
StatusMessage
401A valid bearer token is required.
GET /submissions API key

Browse published snapshots

Public snapshots, newest first, optionally narrowed to one directory or to one source audit. This is public information: it never includes who published.

Parameters
NameInTypeDescription
provider query string Only snapshots in this directory: gemini, chatgpt or claude.
report_id query string Only snapshots made from this audit. Returned keyed by directory.
Example request
curl -s "https://isuggest.ai/api/v1/submissions?provider=gemini" \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "submissions": [
            {
                "id": "l_1eb2e88fe918221b2352",
                "provider": "gemini",
                "source_report_id": "r_a812d5be44a5",
                "source_url": "https://example.com",
                "submitted_at": "2026-09-26T08:04:11+00:00",
                "snapshot_sha256": "1f964f1ee8b8c6504cc61c3f9423e0dd08d57ab2bf25ed14855dabc125c75cca",
                "title": "Example Domain",
                "description": "",
                "score": 94,
                "knowledge": {
                    "captured": false
                }
            }
        ]
    }
}
Errors
StatusMessage
401A valid bearer token is required.
GET /submissions/{provider}/{id} API key

Get one snapshot

A single published snapshot with its frozen report. Anyone can read a snapshot, and only its publisher sees the submitted_by field.

Parameters
NameInTypeDescription
provider required path string gemini, chatgpt or claude.
id required path string The snapshot id, starting with l_.
Example request
curl -s https://isuggest.ai/api/v1/submissions/gemini/l_1eb2e88fe918221b2352 \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "submission": {
            "id": "l_1eb2e88fe918221b2352",
            "provider": "gemini",
            "source_report_id": "r_a812d5be44a5",
            "source_url": "https://example.com",
            "submitted_at": "2026-09-26T08:04:11+00:00",
            "snapshot_sha256": "1f964f1ee8b8c6504cc61c3f9423e0dd08d57ab2bf25ed14855dabc125c75cca",
            "title": "Example Domain",
            "description": "",
            "score": 94,
            "knowledge": {
                "captured": false
            },
            "target_crawlers": [
                "Google-Extended",
                "Googlebot"
            ],
            "report": [
                "..."
            ]
        }
    }
}

Trimmed. The public web page for a snapshot is at https://isuggest.ai/ai-directory/{provider}/{id}, with .json and .md versions.

Errors
StatusMessage
404Snapshot not found.

Account

Your credit balance and the current prices.

GET /credits/{email} API key

Your credit balance and ledger

Your balance and the most recent ledger entries, newest first. Every credit added or spent is recorded, with the reason and the balance afterwards. You can only read your own.

Parameters
NameInTypeDescription
email required path string Your own email address, URL-encoded.
limit query integer How many ledger entries. Default 50, maximum 200.
Example request
curl -s https://isuggest.ai/api/v1/credits/you%40example.com \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "balance": 15,
        "ledger": [
            {
                "id": "cr_bf25457b09baeb8f",
                "email": "you@example.com",
                "delta": -10,
                "reason": "AI directory submission",
                "ref_type": "report",
                "ref_id": "r_a812d5be44a5",
                "balance_after": 15,
                "actor": "you@example.com",
                "created_at": "2026-09-26T08:04:11+00:00"
            }
        ]
    }
}
Errors
StatusMessage
403You do not have access to this account.
GET /settings API key

Current prices and limits

What things cost right now. Prices can change between releases of the site without a new API release, so read them from here instead of hard-coding them.

  • submission_cost: credits to publish to each directory.
  • site_scan_cost_per_page: credits per page crawled in a scan.
  • site_scan_max_pages: the most pages one scan can crawl.
  • signup_bonus_credits: credits a new account starts with.
Example request
curl -s https://isuggest.ai/api/v1/settings \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "settings": {
            "signup_bonus_credits": 20,
            "submission_cost": {
                "gemini": 10,
                "chatgpt": 10,
                "claude": 10
            },
            "site_scan_cost_per_page": 1,
            "site_scan_max_pages": 30,
            "updated_at": null
        }
    }
}
Errors
StatusMessage
401A valid bearer token is required.

Blog

Read the iSuggest.ai blog as data.

GET /blog API key

List published posts

Published posts, newest first.

Parameters
NameInTypeDescription
limit query integer How many posts. Default 50, maximum 200.
Example request
curl -s "https://isuggest.ai/api/v1/blog?limit=5" \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "posts": [
            {
                "slug": "what-is-geo",
                "title": "What Is GEO?",
                "excerpt": "A plain-English introduction to Generative Engine Optimization.",
                "published": true,
                "published_at": "2026-09-01T06:00:00+00:00",
                "body_html": "<p>...</p>"
            }
        ]
    }
}

Trimmed to the main fields. Posts also carry seo metadata and author details.

Errors
StatusMessage
401A valid bearer token is required.
GET /blog/{slug} API key

Get one post

One published post by its slug.

Parameters
NameInTypeDescription
slug required path string The post slug, from the list or its web address.
Example request
curl -s https://isuggest.ai/api/v1/blog/what-is-geo \
  -H "Authorization: Bearer $ISUGGEST_API_KEY"
Response 200
{
    "data": {
        "post": {
            "slug": "what-is-geo",
            "title": "What Is GEO?",
            "body_html": "<p>...</p>"
        }
    }
}

Trimmed.

Errors
StatusMessage
404Post not found.

Questions and problems

Stuck, or found something in the documentation that does not match what the API does? Write to us from the contact page and include the request you sent, the response you got, and the value of the X-API-Version header.