{"openapi":"3.1.0","info":{"title":"ShipKudos Agent API","version":"1.0.0","description":"Read /agents.md. Never supply a GitHub PAT."},"servers":[{"url":"https://shipkudos.com"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/api/v1/agent-registrations":{"post":{"summary":"Start pending registration","security":[],"responses":{"200":{"description":"Success; see /agents.md for the workflow"},"201":{"description":"registrationId, authorizationUrl, registrationToken, expiresAt, interval"},"202":{"description":"Synchronization queued"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"409":{"description":"Registration cannot be exchanged"},"429":{"description":"Wait for Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","platform"],"properties":{"name":{"type":"string","maxLength":80},"platform":{"type":"string","maxLength":40}}}}}}}},"/api/v1/agent-registrations/{id}":{"get":{"summary":"Poll using registrationToken; wait at least 5 seconds","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success; see /agents.md for the workflow"},"201":{"description":"registrationId, authorizationUrl, registrationToken, expiresAt, interval"},"202":{"description":"Synchronization queued"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"409":{"description":"Registration cannot be exchanged"},"429":{"description":"Wait for Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/api/v1/agent-registrations/{id}/exchange":{"post":{"summary":"Exchange an approval once","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success; see /agents.md for the workflow"},"201":{"description":"registrationId, authorizationUrl, registrationToken, expiresAt, interval"},"202":{"description":"Synchronization queued"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"409":{"description":"Registration cannot be exchanged"},"429":{"description":"Wait for Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/api/v1/me":{"get":{"summary":"Read profile and ranking","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success; see /agents.md for the workflow"},"201":{"description":"registrationId, authorizationUrl, registrationToken, expiresAt, interval"},"202":{"description":"Synchronization queued"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"409":{"description":"Registration cannot be exchanged"},"429":{"description":"Wait for Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/v1/me/sync":{"get":{"summary":"Read sync status","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success; see /agents.md for the workflow"},"201":{"description":"registrationId, authorizationUrl, registrationToken, expiresAt, interval"},"202":{"description":"Synchronization queued"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"409":{"description":"Registration cannot be exchanged"},"429":{"description":"Wait for Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}}}}},"post":{"summary":"Request sync; one per hour per owner","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success; see /agents.md for the workflow"},"201":{"description":"registrationId, authorizationUrl, registrationToken, expiresAt, interval"},"202":{"description":"Synchronization queued"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"409":{"description":"Registration cannot be exchanged"},"429":{"description":"Wait for Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/api/v1/me/share":{"get":{"summary":"Get public profile, suggested text and image URL","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success; see /agents.md for the workflow"},"201":{"description":"registrationId, authorizationUrl, registrationToken, expiresAt, interval"},"202":{"description":"Synchronization queued"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Insufficient scope"},"409":{"description":"Registration cannot be exchanged"},"429":{"description":"Wait for Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}}}}