Skip to content

Commit 5099d05

Browse files
committed
adding audit api
1 parent f04c009 commit 5099d05

File tree

5 files changed

+496
-0
lines changed

5 files changed

+496
-0
lines changed

api/audit.yaml

Lines changed: 399 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,399 @@
1+
openapi: 3.1.0
2+
info:
3+
title: WordLift Audit API
4+
description: |
5+
The WordLift Audit API provides comprehensive SEO and AI-readiness analysis for websites.
6+
It evaluates site files, SEO fundamentals, structured data, content structure, image accessibility,
7+
automation readiness, and JavaScript rendering to provide actionable insights for improving
8+
both search engine and AI agent discoverability.
9+
version: 1.0.0
10+
servers:
11+
- url: https://api.wordlift.io
12+
description: Production server
13+
paths:
14+
/audit:
15+
post:
16+
tags:
17+
- Audit
18+
summary: Website Audit
19+
description: |
20+
Performs a comprehensive SEO and AI-readiness audit of a specified URL. The audit analyzes:
21+
- Site files (robots.txt, llms.txt)
22+
- SEO fundamentals (title, description, headings)
23+
- Structured data (Schema.org, JSON-LD)
24+
- Content structure and semantic HTML
25+
- Image accessibility
26+
- Automation readiness for AI agents
27+
- JavaScript rendering and bot accessibility
28+
29+
Returns an overall score (0-100) and detailed recommendations for improvement.
30+
operationId: audit_website
31+
requestBody:
32+
required: true
33+
content:
34+
application/json:
35+
schema:
36+
$ref: '#/components/schemas/AuditRequest'
37+
examples:
38+
basic:
39+
summary: Basic audit request
40+
value:
41+
url: "https://example.com"
42+
responses:
43+
'200':
44+
description: Successful audit response
45+
content:
46+
application/json:
47+
schema:
48+
$ref: '#/components/schemas/AuditResponse'
49+
examples:
50+
successful:
51+
summary: Successful audit
52+
value:
53+
success: true
54+
data:
55+
url: "https://example.com/"
56+
domain: "https://example.com"
57+
timestamp: "2025-10-16T07:52:01.581Z"
58+
overallScore: 35
59+
summary: "The website is a basic example domain, primarily intended for documentation."
60+
siteFiles:
61+
status: "Poor"
62+
explanation: "Neither robots.txt nor llms.txt are present."
63+
robotsTxt: "not_found"
64+
llmsTxt: "not_found"
65+
botAccess:
66+
gptbot: "not_specified"
67+
claude: "not_specified"
68+
googlebot: "not_specified"
69+
seoFundamentals:
70+
status: "Poor"
71+
explanation: "The site has a title tag but lacks a meta description."
72+
title: "Example Domain"
73+
description: null
74+
h1Count: 1
75+
structuredData:
76+
status: "Poor"
77+
explanation: "No schema.org markup is present."
78+
hasSchema: false
79+
hasJsonLd: false
80+
detectedSchemas: []
81+
contentStructure:
82+
status: "Needs Improvement"
83+
explanation: "The content is very basic."
84+
semanticHtmlScore: 6
85+
imageAccessibility:
86+
status: "Not Applicable"
87+
explanation: "There are no images on the page."
88+
missingAltPercentage: 0
89+
totalImages: 0
90+
imagesWithoutAlt: 0
91+
automationReadiness:
92+
status: "Poor"
93+
explanation: "The lack of structured data and robots.txt/llms.txt hinders automation."
94+
issues:
95+
- "Missing robots.txt"
96+
- "Missing llms.txt"
97+
- "Lack of structured data"
98+
jsRendering:
99+
status: "Good"
100+
explanation: "The website appears to be statically rendered with minimal to no JavaScript."
101+
frameworkDetected: "None"
102+
renderingType: "Static"
103+
aiAccessibility: "Excellent"
104+
contentAvailability: "All content in HTML"
105+
recommendations: []
106+
quickWins:
107+
- title: "Add a Meta Description"
108+
description: "Implement a meta description tag in the <head> section."
109+
impact: "Medium"
110+
- title: "Implement robots.txt"
111+
description: "Create a robots.txt file to explicitly define crawling rules."
112+
impact: "Medium"
113+
status: "completed"
114+
accountId: 216
115+
accountUrl: "https://example.com"
116+
'401':
117+
description: Unauthorized - Invalid or missing API key
118+
content:
119+
application/json:
120+
schema:
121+
$ref: '#/components/schemas/ErrorResponse'
122+
'422':
123+
description: Validation Error - Invalid request format
124+
content:
125+
application/json:
126+
schema:
127+
$ref: '#/components/schemas/ValidationError'
128+
security:
129+
- ApiKey: []
130+
components:
131+
schemas:
132+
AuditRequest:
133+
type: object
134+
required:
135+
- url
136+
properties:
137+
url:
138+
type: string
139+
format: uri
140+
title: URL
141+
description: The full URL of the website to audit
142+
example: "https://example.com"
143+
144+
AuditResponse:
145+
type: object
146+
properties:
147+
success:
148+
type: boolean
149+
description: Indicates if the audit was successful
150+
data:
151+
$ref: '#/components/schemas/AuditData'
152+
153+
AuditData:
154+
type: object
155+
properties:
156+
url:
157+
type: string
158+
description: The audited URL (may include trailing slash)
159+
domain:
160+
type: string
161+
description: The base domain of the audited URL
162+
timestamp:
163+
type: string
164+
format: date-time
165+
description: ISO 8601 timestamp of when the audit was performed
166+
overallScore:
167+
type: integer
168+
minimum: 0
169+
maximum: 100
170+
description: Overall SEO and AI-readiness score (0-100)
171+
summary:
172+
type: string
173+
description: High-level summary of the audit findings
174+
siteFiles:
175+
$ref: '#/components/schemas/SiteFiles'
176+
seoFundamentals:
177+
$ref: '#/components/schemas/SeoFundamentals'
178+
structuredData:
179+
$ref: '#/components/schemas/StructuredData'
180+
contentStructure:
181+
$ref: '#/components/schemas/ContentStructure'
182+
imageAccessibility:
183+
$ref: '#/components/schemas/ImageAccessibility'
184+
automationReadiness:
185+
$ref: '#/components/schemas/AutomationReadiness'
186+
jsRendering:
187+
$ref: '#/components/schemas/JsRendering'
188+
quickWins:
189+
type: array
190+
items:
191+
$ref: '#/components/schemas/QuickWin'
192+
status:
193+
type: string
194+
enum: [completed, pending, failed]
195+
description: Status of the audit process
196+
accountId:
197+
type: integer
198+
description: Account ID associated with the audit
199+
accountUrl:
200+
type: string
201+
description: Account URL associated with the audit
202+
203+
SiteFiles:
204+
type: object
205+
properties:
206+
status:
207+
type: string
208+
enum: [Excellent, Good, Needs Improvement, Poor, Not Applicable]
209+
description: Overall status of site files
210+
explanation:
211+
type: string
212+
description: Detailed explanation of site files evaluation
213+
robotsTxt:
214+
type: string
215+
enum: [found, not_found, error]
216+
description: Status of robots.txt file
217+
llmsTxt:
218+
type: string
219+
enum: [found, not_found, error]
220+
description: Status of llms.txt file (AI model instructions)
221+
botAccess:
222+
type: object
223+
properties:
224+
gptbot:
225+
type: string
226+
enum: [allowed, disallowed, not_specified]
227+
claude:
228+
type: string
229+
enum: [allowed, disallowed, not_specified]
230+
googlebot:
231+
type: string
232+
enum: [allowed, disallowed, not_specified]
233+
234+
SeoFundamentals:
235+
type: object
236+
properties:
237+
status:
238+
type: string
239+
enum: [Excellent, Good, Needs Improvement, Poor, Not Applicable]
240+
explanation:
241+
type: string
242+
title:
243+
type: string
244+
nullable: true
245+
description: Page title tag content
246+
description:
247+
type: string
248+
nullable: true
249+
description: Meta description content
250+
h1Count:
251+
type: integer
252+
description: Number of H1 headings on the page
253+
254+
StructuredData:
255+
type: object
256+
properties:
257+
status:
258+
type: string
259+
enum: [Excellent, Good, Needs Improvement, Poor, Not Applicable]
260+
explanation:
261+
type: string
262+
hasSchema:
263+
type: boolean
264+
description: Whether schema.org markup is present
265+
hasJsonLd:
266+
type: boolean
267+
description: Whether JSON-LD structured data is present
268+
detectedSchemas:
269+
type: array
270+
items:
271+
type: string
272+
description: List of detected schema types
273+
274+
ContentStructure:
275+
type: object
276+
properties:
277+
status:
278+
type: string
279+
enum: [Excellent, Good, Needs Improvement, Poor, Not Applicable]
280+
explanation:
281+
type: string
282+
semanticHtmlScore:
283+
type: integer
284+
minimum: 0
285+
maximum: 10
286+
description: Score for semantic HTML usage (0-10)
287+
288+
ImageAccessibility:
289+
type: object
290+
properties:
291+
status:
292+
type: string
293+
enum: [Excellent, Good, Needs Improvement, Poor, Not Applicable]
294+
explanation:
295+
type: string
296+
missingAltPercentage:
297+
type: number
298+
minimum: 0
299+
maximum: 100
300+
description: Percentage of images missing alt text
301+
totalImages:
302+
type: integer
303+
description: Total number of images on the page
304+
imagesWithoutAlt:
305+
type: integer
306+
description: Number of images without alt text
307+
308+
AutomationReadiness:
309+
type: object
310+
properties:
311+
status:
312+
type: string
313+
enum: [Excellent, Good, Needs Improvement, Poor, Not Applicable]
314+
explanation:
315+
type: string
316+
issues:
317+
type: array
318+
items:
319+
type: string
320+
description: List of issues affecting automation readiness
321+
322+
JsRendering:
323+
type: object
324+
properties:
325+
status:
326+
type: string
327+
enum: [Excellent, Good, Needs Improvement, Poor, Not Applicable]
328+
explanation:
329+
type: string
330+
frameworkDetected:
331+
type: string
332+
description: Detected JavaScript framework (React, Vue, Angular, etc.)
333+
renderingType:
334+
type: string
335+
enum: [Static, SSR, CSR, Hybrid]
336+
description: Type of rendering used by the site
337+
aiAccessibility:
338+
type: string
339+
enum: [Excellent, Good, Fair, Poor]
340+
description: How accessible the content is to AI agents
341+
contentAvailability:
342+
type: string
343+
description: Description of content availability in HTML
344+
recommendations:
345+
type: array
346+
items:
347+
type: string
348+
description: Recommendations for improving JS rendering
349+
350+
QuickWin:
351+
type: object
352+
properties:
353+
title:
354+
type: string
355+
description: Title of the quick win recommendation
356+
description:
357+
type: string
358+
description: Detailed description of the recommendation
359+
impact:
360+
type: string
361+
enum: [High, Medium, Low]
362+
description: Expected impact of implementing this recommendation
363+
364+
ErrorResponse:
365+
type: object
366+
properties:
367+
success:
368+
type: boolean
369+
example: false
370+
error:
371+
type: string
372+
description: Error message
373+
374+
ValidationError:
375+
type: object
376+
properties:
377+
detail:
378+
type: array
379+
items:
380+
type: object
381+
properties:
382+
loc:
383+
type: array
384+
items:
385+
type: string
386+
msg:
387+
type: string
388+
type:
389+
type: string
390+
391+
securitySchemes:
392+
ApiKey:
393+
type: apiKey
394+
in: header
395+
name: Authorization
396+
description: |
397+
API Key authentication. Use the format: `Key [your-wordlift-key]`
398+
399+
Example: `Authorization: Key wl_abc123def456`

0 commit comments

Comments
 (0)