{"openapi":"3.1.0","info":{"title":"Airez AI Frontage — public agent API","version":"1.1.0","description":"No-key endpoints an agent can call to inspect a public business page, generate structured data from supplied facts, and review profile completeness. No personal data are required. Scores are Airez heuristics, not ranking or citation results. Nothing is fabricated, and key-gated features are omitted from this contract.","contact":{"name":"Airez AI Frontage","url":"https://app.airezai.com"},"license":{"name":"Free to use — see pricing","url":"https://airezai.com/pricing"}},"servers":[{"url":"https://app.airezai.com","description":"Airez AI Frontage"}],"security":[],"tags":[{"name":"Diagnose","description":"Inspect observable page and profile-readiness signals."},{"name":"Generate","description":"Produce paste-ready structured data."}],"paths":{"/api/lb/aeo/audit-url":{"post":{"operationId":"auditUrl","tags":["Diagnose"],"summary":"Inspect a business page and get grounded, paste-ready fixes","description":"Fetches a public business page and returns a rule-based 0–100 Airez on-page readiness heuristic, a prioritized checklist, grounded schema.org JSON-LD, and an optional experimental /llms.txt draft. It does not measure ranking, indexing, citation, or recommendation. No key or login is required.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public business website URL (must start with http:// or https://)."}}}}}},"responses":{"200":{"description":"The on-page readiness heuristic and grounded fixes.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"score":{"type":"integer","minimum":0,"maximum":100},"grade":{"type":"string","enum":["A","B","C","D","F"]},"summary":{"type":"string"},"found":{"type":"boolean","description":"Whether the page could be read."},"checklist":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"fix":{"type":"string"},"weight":{"type":"number"}}}},"extracted":{"type":"object","properties":{"business_name":{"type":"string"},"location":{"type":"string"}}},"fix":{"type":"object","description":"Paste-ready remediation derived from the page (owner-owned).","properties":{"schema_html":{"type":"string","description":"JSON-LD to paste into your page head (a ready-to-paste script element)."},"schema_types":{"type":"array","items":{"type":"string"}},"has_rating":{"type":"boolean"},"llms_txt":{"type":"string","description":"Optional experimental /llms.txt draft; Google Search ignores this file."}}}}}}}},"422":{"description":"The URL could not be read (not a public web page)."}}}},"/api/lb/schema":{"post":{"operationId":"generateSchema","tags":["Generate"],"summary":"Generate ready-to-paste schema.org JSON-LD (LocalBusiness / FAQPage)","description":"Builds valid LocalBusiness / FAQPage / Speakable JSON-LD from the business details you supply. Free, $0, no key, no AI. Owner-supplied data ONLY — it never invents a rating, price, review or profile link.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"business":{"type":"string"},"business_type":{"type":"string"},"location":{"type":"string"},"services":{"type":"string","description":"Comma-separated; add 'Name: price' to emit a price."},"phone":{"type":"string"},"hours":{"type":"string"},"url":{"type":"string","format":"uri"},"profiles":{"type":"string","description":"Comma-separated profile URLs → sameAs."},"area_served":{"type":"string","description":"Comma-separated areas you serve."},"price_range":{"type":"string","description":"e.g. $$ or $50–$200."},"booking_url":{"type":"string","format":"uri","description":"A real booking URL that may be represented as a ReserveAction."},"faqs":{"type":"array","items":{"type":"object","properties":{"q":{"type":"string"},"a":{"type":"string"}}}}}}}}},"responses":{"200":{"description":"The generated JSON-LD plus a coverage summary.","content":{"application/json":{"schema":{"type":"object","properties":{"types":{"type":"array","items":{"type":"string"}},"script":{"type":"string","description":"The ready-to-paste JSON-LD block (an application/ld+json script element)."},"offers":{"type":"array","items":{"type":"object","additionalProperties":true}},"sameas":{"type":"object","properties":{"covered":{"type":"array","items":{"type":"string"}},"missing":{"type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Invalid request body."}}}},"/api/lb/gbp/readiness":{"post":{"operationId":"scoreGbpReadiness","tags":["Diagnose"],"summary":"Score owner-entered Google Business Profile completeness (0–100)","description":"Rule-based 0–100 Airez completeness heuristic over the profile fields you pass, plus a weighted checklist. It is not a Google ranking or recommendation score. A live profile read requires the Google connector.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"primary_category":{"type":"string"},"rating":{"type":"string"},"review_count":{"type":"string"},"response_rate":{"type":"string","description":"% of reviews the owner replies to."},"services_count":{"type":"string"},"photos_count":{"type":"string"},"secondary_categories_count":{"type":"string"},"attributes_count":{"type":"string"},"hours_complete":{"type":"boolean"},"nap_consistent":{"type":"boolean","description":"Name/address/phone match the website."},"qa_answered":{"type":"boolean"},"description":{"type":"boolean","description":"Profile description filled."},"website":{"type":"boolean","description":"Website linked on the profile."},"automated_calls":{"type":"string","enum":["on","off",""],"description":"Whether Google's automated calls for customers are left on in the profile's Advanced settings. Empty means not answered, which leaves it out of the score."}}}}}},"responses":{"200":{"description":"The 0–100 readiness score, grade and weighted fix list.","content":{"application/json":{"schema":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"grade":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Invalid request body."}}}}}}