{"openapi":"3.1.0","info":{"title":"CAN-TAP Verified API","version":"2.0.0","description":"Canadian business directory + NFC tap analytics + free dofollow backlink platform. Agent-discoverable.","contact":{"email":"info@can-tap-verified.com","url":"https://can-tap-verified.com"},"license":{"name":"Open use with rate limit (5/IP/day on /api/claim)"}},"servers":[{"url":"https://api.can-tap-verified.com"}],"paths":{"/health":{"get":{"summary":"Health check","responses":{"200":{"description":"OK"}}}},"/llms.txt":{"get":{"summary":"Agent-friendly manifest (markdown)","responses":{"200":{"description":"Markdown manifest for AI agents"}}}},"/api/listings/free":{"get":{"summary":"List free claimable directory listings (free dofollow backlink opportunities)","parameters":[{"name":"city","in":"query","schema":{"type":"string"}},{"name":"trade","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":50}}],"responses":{"200":{"description":"List of claimable listings"}}}},"/api/claim":{"post":{"summary":"Claim a free directory listing for a Canadian business — receives a free permanent dofollow backlink upon verification","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["business_name","website","city","province","email"],"properties":{"business_name":{"type":"string","maxLength":200},"website":{"type":"string","format":"uri"},"city":{"type":"string","maxLength":100},"province":{"type":"string","enum":["ON","BC","AB","QC","MB","SK","NS","NB","NL","PE","NT","YT","NU"]},"email":{"type":"string","format":"email"},"phone":{"type":"string","maxLength":50},"trade":{"type":"string","maxLength":100},"google_review_link":{"type":"string","format":"uri"},"source":{"type":"string","description":"web, agent, mcp, api"}}}}}},"responses":{"200":{"description":"Claim received — verification email sent"},"400":{"description":"Invalid input"},"429":{"description":"Rate limit exceeded (5 per IP per day)"}}}},"/api/business/{slug}/stats":{"get":{"summary":"Get tap analytics for a business","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Stats"},"404":{"description":"Not found"}}}},"/api/business/{slug}/feedback":{"get":{"summary":"Get private feedback log for a business","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Feedback array"}}}},"/api/business/{slug}/backlink":{"get":{"summary":"Check backlink status (verified, dofollow, public listing URL)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Backlink status"}}}},"/api/tap":{"post":{"summary":"Log an NFC tap (called by /r/{slug} pages on the static site)","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["slug","stars"],"properties":{"slug":{"type":"string"},"stars":{"type":"integer","minimum":1,"maximum":5},"source":{"type":"string"},"stand_id":{"type":"string"},"referrer":{"type":"string"}}}}}},"responses":{"200":{"description":"Tap logged + redirect URL if 4-5 star"}}}},"/api/feedback":{"post":{"summary":"Submit private feedback (1-3 star path → keeps unhappy customers off Google)","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["slug","rating"],"properties":{"slug":{"type":"string"},"rating":{"type":"integer","minimum":1,"maximum":5},"text":{"type":"string"},"name":{"type":"string"},"contact":{"type":"string"}}}}}},"responses":{"200":{"description":"Feedback recorded"}}}},"/api/admin/overview":{"get":{"summary":"Admin god view (totals, recent claims)","responses":{"200":{"description":"Overview"}}}}}}