---
title: "Check what works on a site and what is missing before going live"
method: GET
path: "/sites/{id}/readiness"
tags: ["Sites"]
---

# Check what works on a site and what is missing before going live

`GET /sites/{id}/readiness`

## Request

- Base URL: `https://api.hypamoon.com/api/v1`
- URL: `https://api.hypamoon.com/api/v1/sites/{id}/readiness`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://app.hypamoon.com/oauth/authorize`, token URL `https://api.hypamoon.com/oauth/token`, scopes: `sites:read`)

Reads the live files of a site, detects its kind (or takes type) and checks what can be checked automatically: terms, privacy, returns and contact pages with company details; forms that post to a real collection (not nowhere, not only mailto, not localStorage); buy buttons and a cart that lead to a real checkout; prices with currency; no placeholder text; no test wording on a live project; internal links that work; a 404 page; no password checked in JavaScript. It also checks findability: a title (10 to 60 characters) and a meta description (50 to 160) per page, exactly one h1, the page language, a share preview (og:title, og:description and an absolute og:image), alt text on images, images over 500 KB, a viewport meta tag and a favicon; and structured data (JSON-LD): existing blocks are checked for valid JSON, their required fields and leftover placeholders, and when there is none and the kind is known it offers a ready snippet to fill with the user's real details. Returns what works, what is missing (each with a plain explanation and the next tool), and what only the owner can confirm (check_with_owner). Advice only: it never blocks a deploy.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `type` 'webshop' | 'bookings' | 'restaurant' | 'course_membership' | 'wordpress_portal'

## Response `200`

What works, what is missing, and what to check with the owner.

- SiteReadiness
  - `site` object, required
    - `id` string, nullable, required
    - `url` string, required
    - `live` boolean, required
  - `type` 'webshop' | 'bookings' | 'restaurant' | 'course_membership' | 'wordpress_portal' | 'null', nullable, required
  - `type_source` 'given' | 'detected' | 'none', required
  - `region` 'eu' | 'uk' | 'us' | 'other', required
  - `country` string, nullable, required
  - `works` object[], required
    - `id` 'terms_page' | 'privacy_page' | 'returns_page' | 'contact_details' | 'forms_saved' | 'checkout_real' | 'prices_currency' | 'no_placeholders' | 'no_test_wording' | 'internal_links' | 'not_found_page' | 'no_fake_login' | 'no_local_storage_db' | 'seo_title' | 'seo_description' | 'seo_h1' | 'seo_lang' | 'seo_open_graph' | 'seo_image_alt' | 'seo_image_size' | 'seo_viewport' | 'seo_favicon' | 'structured_data' | 'app_data_per_user' | 'app_backup_tables', required
    - `title` string, required
    - `detail` string, required
  - `missing` object[], required
    - `id` 'terms_page' | 'privacy_page' | 'returns_page' | 'contact_details' | 'forms_saved' | 'checkout_real' | 'prices_currency' | 'no_placeholders' | 'no_test_wording' | 'internal_links' | 'not_found_page' | 'no_fake_login' | 'no_local_storage_db' | 'seo_title' | 'seo_description' | 'seo_h1' | 'seo_lang' | 'seo_open_graph' | 'seo_image_alt' | 'seo_image_size' | 'seo_viewport' | 'seo_favicon' | 'structured_data' | 'app_data_per_user' | 'app_backup_tables', required
    - `title` string, required
    - `explanation` string, required: In plain words, as advice: before you go live, you might want to.
    - `next_step` object, required
      - `tool` string, required
      - `how` string, required
    - `paths` string[]
  - `check_with_owner` object[], required: What cannot be checked on the site; ask the owner, never require an answer.
    - `id` string, required
    - `level` 'usually_required' | 'recommended', required
    - `description` string, required
    - `why` string, required
    - `how_on_hypamoon` string, required
  - `pages_checked` integer, required
  - `note` string, required
  - `summary_markdown` string, required

## Other responses

- `401`: Unauthorized: unauthorized, missing_api_key, invalid_api_key, api_key_revoked, project_deleted.
- `403`: Forbidden: project_not_enabled, key_mode_mismatch, missing_scope, verification_required.
- `404`: Not Found: not_found.
- `422`: Unprocessable Content: validation_failed.
- `429`: Too Many Requests: rate_limited.
- `500`: Internal Server Error: internal_error.
- `503`: Service Unavailable: service_unavailable.

---

[API](https://skmtc.dev/hypamoon/apis/hypamoon-api.md) · [All operations](https://skmtc.dev/hypamoon/apis/hypamoon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hypamoon/apis/hypamoon-api/revisions/9f0b90004c06?raw)
