{"openapi":"3.1.0","info":{"title":"Action AR API","version":"1.0.0","description":"Partner API for managed location-based collectibles and hosted mobile AR."},"servers":[{"url":"https://www.action-tokens.com/api/ar/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Server-side partner API key."}},"schemas":{"ExperienceInput":{"type":"object","required":["title","mediaUrl","mediaType"],"properties":{"externalId":{"type":"string"},"title":{"type":"string","maxLength":120},"description":{"type":"string","maxLength":2000},"mediaUrl":{"type":"string","format":"uri"},"mediaType":{"enum":["image","video"]},"thumbnailUrl":{"type":"string","format":"uri"},"ctaLabel":{"type":"string"},"ctaUrl":{"type":"string","format":"uri"}}},"PinInput":{"type":"object","required":["experienceId","latitude","longitude"],"properties":{"experienceId":{"type":"string","format":"uuid"},"externalId":{"type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"collectionRadiusM":{"type":"integer","minimum":10,"maximum":50000,"default":100},"startsAt":{"type":"string","format":"date-time"},"endsAt":{"type":"string","format":"date-time"},"maxCollections":{"type":"integer","minimum":1}}},"CollectionInput":{"type":"object","required":["pinId","externalUserId","latitude","longitude"],"properties":{"pinId":{"type":"string","format":"uuid"},"externalUserId":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"}}},"LaunchInput":{"type":"object","required":["experienceId","externalUserId"],"properties":{"experienceId":{"type":"string","format":"uuid"},"externalUserId":{"type":"string"}}}}},"paths":{"/health":{"get":{"summary":"Verify credentials and capabilities","responses":{"200":{"description":"Healthy"},"401":{"description":"Invalid key"}}}},"/experiences":{"get":{"summary":"List experiences","responses":{"200":{"description":"Experience list"}}},"post":{"summary":"Create an experience","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExperienceInput"}}}},"responses":{"201":{"description":"Created"}}}},"/pins":{"get":{"summary":"List pins","responses":{"200":{"description":"Pin list"}}},"post":{"summary":"Place a pin","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PinInput"}}}},"responses":{"201":{"description":"Created"}}}},"/pins/nearby":{"get":{"summary":"Find nearby active pins","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number"}},{"name":"radius","in":"query","schema":{"type":"number","maximum":100000}}],"responses":{"200":{"description":"Pins ordered by distance"}}}},"/collections":{"get":{"summary":"List a partner user’s collection","parameters":[{"name":"externalUserId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Collection list"}}},"post":{"summary":"Collect a pin after server-side range validation","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionInput"}}}},"responses":{"201":{"description":"Collected"},"403":{"description":"Out of range"},"409":{"description":"Sold out"}}}},"/launch":{"post":{"summary":"Create a 15-minute hosted AR launch URL","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchInput"}}}},"responses":{"200":{"description":"Launch URL"},"403":{"description":"Experience not collected"}}}}}}