Scoring API
Score any website from your own systems: a CRM workflow, a prospecting list, a nightly job. One authenticated request returns the composite grade and all ten category scores from the published rubric.
Authentication
An owner or admin creates a key under Settings → API keys in the dashboard, on any plan. It is shown once, at creation; ActiScore stores only a hash. Send it as a bearer token. Revoking a key takes effect on the next request.
Score a domain
POST /api/score with a JSON body naming the domain. A full URL is accepted; the scheme and path are ignored.
curl -X POST https://actiscore.ai/api/score \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "example.com"}'Returns, usually within a few seconds:
{
"domain": "example.com",
"overall": "C",
"grades": {
"seo": "C", "aeo": "D", "security": "B", "performance": "B",
"mobility": "A", "localSeo": "D", "bestPractices": "A",
"accessibility": "B", "contentUx": "C", "trust": "D"
},
"scores": {
"overall": 71,
"seo": 68, "aeo": 41, "security": 84, "performance": 88,
"mobility": 100, "localSeo": 60, "bestPractices": 92,
"accessibility": 85, "contentUx": 70, "trust": 55
},
"measurement": { "performance": "inferred", "security": "measured" },
"scanId": "6f1c…"
}gradesandscorescarry every category. A caller that only needs some can ignore the rest; new categories are added, never renamed.measurementsays which categories rest on real measurement and which were estimated from page structure. The first scan of a domain often estimates performance; scoring it again later returns measured values, because the measurements are warmed in the background.scanIdidentifies the stored report, which also appears in your dashboard.
Use it from an AI assistant
ActiScore is also an MCP server, so an assistant that supports the Model Context Protocol can grade websites for you in conversation. Add a remote server at https://actiscore.ai/api/mcp with the header Authorization: Bearer YOUR_API_KEY. It offers one tool, grade_website, which runs the same scoring as the API above and uses a scan the same way.
What it deliberately does not do
- No lead capture and no email. The API never contacts anyone. You own your outbound contact and its compliance.
- No AI visibility. Asking the assistants takes minutes and costs real money per domain; a scoring call returns in seconds. Use the dashboard or a Deep AI Audit for it.
Limits and billing
Each successful score uses one scan from the plan's monthly allowance; on paid plans scans past it are $0.35 each. A domain that cannot be reached costs nothing. Requests are limited to 500 an hour per account.
Errors
| Status | error | Meaning |
|---|---|---|
| 400 | invalid_request | The body was not {"domain": "…"}. |
| 401 | unauthorized | No key, or a key that is unknown or revoked. The two are deliberately indistinguishable. |
| 403 | account_unavailable | The account is locked or disabled. |
| 422 | unreachable | The request was fine; the website could not be loaded. Costs no scan. Retrying will not help. |
| 429 | rate_limited | Over 500 requests in an hour. A retry-after header says when to resume. |
| 429 | scan_limit_reached | The plan's monthly scans are used and it has no overage. |
| 500 | scoring_failed | Our fault. Safe to retry. |