{"components":{"responses":{"BadRequest":{"description":"Invalid query or parameter."},"Forbidden":{"description":"API key lacks the required scope."},"NotFound":{"description":"Requested Scrykeeper record not found."},"RateLimited":{"description":"Hourly or daily quota exceeded. Consult Retry-After."},"Unauthorized":{"description":"Missing or invalid API key."}},"schemas":{"DataNotice":{"description":"Compact semantic warnings included with normal successful API responses.","properties":{"audience_overlap":{"type":"string"},"author_catalogue":{"type":"string"},"commercial_absence":{"type":"string"},"freshness":{"type":"string"},"reader_metrics":{"type":"string"}},"type":"object"}},"securitySchemes":{"ApiKeyAuth":{"description":"Alternative API-key header.","in":"header","name":"X-API-Key","type":"apiKey"},"BearerAuth":{"bearerFormat":"Scrykeeper API key","description":"Use an issued sk_v1_ API key as a Bearer token.","scheme":"bearer","type":"http"}}},"externalDocs":{"description":"Scrykeeper API documentation","url":"https://scrykeeper.com/api/docs"},"info":{"description":"Structured Royal Road market, story, author, audience, identity, and known commercial intelligence. Reader metrics describe Scrykeeper's sampled public favourite graph and are not total readership counts.","title":"Scrykeeper Intelligence API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/v1":{"get":{"operationId":"getApiCapabilities","responses":{"200":{"description":"Current API capabilities."}},"security":[],"summary":"Discover API capabilities","tags":["Discovery"]}},"/api/v1/about-data":{"get":{"operationId":"getDataMethodology","responses":{"200":{"description":"Authoritative machine-readable description of Scrykeeper's current dataset."}},"security":[],"summary":"Get current coverage, freshness, methodology, and limitations","tags":["Methodology"]}},"/api/v1/author/{identity_id}":{"get":{"description":"Returns the resolved Scrykeeper author identity, known Royal Road works, accepted aliases, and deduplicated reader observations. Known works are not guaranteed to be a complete bibliography.","operationId":"getAuthor","parameters":[{"in":"path","name":"identity_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Author Intelligence record."},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{},{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Author Intelligence","tags":["Author Intelligence"]}},"/api/v1/health":{"get":{"operationId":"getApiHealth","responses":{"200":{"description":"Service is healthy."},"503":{"description":"One or more required data layers are unavailable."}},"security":[],"summary":"Check API and data-layer health","tags":["Discovery"]}},"/api/v1/market/search":{"get":{"description":"Search stories using structured Royal Road metadata, Scrykeeper reader observations, and known commercial mappings. Requires an API key with market:read scope.","operationId":"searchMarket","parameters":[{"description":"Title or author substring.","in":"query","name":"q","schema":{"maxLength":120,"type":"string"}},{"in":"query","name":"genre","schema":{"enum":["litrpg","progression","cultivation","xianxia","dungeon_core","time_loop","cozy","fanfiction"],"type":"string"}},{"in":"query","name":"lifecycle","schema":{"enum":["ongoing","completed","stubbed","hiatus","inactive","dropped","unknown"],"type":"string"}},{"in":"query","name":"followers_min","schema":{"minimum":0,"type":"integer"}},{"in":"query","name":"followers_max","schema":{"minimum":0,"type":"integer"}},{"description":"Minimum observed readers in Scrykeeper's sampled graph.","in":"query","name":"readers_min","schema":{"minimum":0,"type":"integer"}},{"in":"query","name":"readers_max","schema":{"minimum":0,"type":"integer"}},{"description":"none means no accepted commercial mapping in Scrykeeper; it does not mean unpublished.","in":"query","name":"commercial","schema":{"default":"all","enum":["all","known","none"],"type":"string"}},{"in":"query","name":"updated_days","schema":{"maximum":3650,"minimum":1,"type":"integer"}},{"in":"query","name":"sort","schema":{"default":"audience","enum":["audience","followers","recent"],"type":"string"}},{"description":"Maximum varies by API tier. Free keys currently allow up to 50 results per request.","in":"query","name":"limit","schema":{"default":20,"maximum":200,"minimum":1,"type":"integer"}},{"description":"Opaque signed cursor returned by the previous response.","in":"query","name":"cursor","schema":{"type":"string"}}],"responses":{"200":{"description":"Market search results."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Search Scrykeeper market intelligence","tags":["Market Intelligence"]}},"/api/v1/story/{rr_fiction_id}":{"get":{"description":"Returns known Royal Road metadata, sampled reader-graph observations, author identity, and accepted commercial mappings for one Royal Road fiction ID.","operationId":"getStory","parameters":[{"in":"path","name":"rr_fiction_id","required":true,"schema":{"minimum":1,"type":"integer"}}],"responses":{"200":{"description":"Story Intelligence record."},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"security":[{},{"BearerAuth":[]},{"ApiKeyAuth":[]}],"summary":"Get Story Intelligence","tags":["Story Intelligence"]}}},"servers":[{"url":"https://scrykeeper.com"}],"tags":[{"name":"Discovery"},{"name":"Story Intelligence"},{"name":"Author Intelligence"},{"name":"Market Intelligence"},{"name":"Methodology"}],"x-scrykeeper":{"agent_guidance":{"author_catalogue":"Known resolved works; do not infer complete bibliography.","commercial_false":"No accepted Scrykeeper mapping; do not infer unpublished status.","observed_readers":"Sampled observed readers, not total story or author readership."},"data_contract_version":"scrykeeper_data_contract_v1.1.0","human_documentation":"https://scrykeeper.com/api/docs","mcp_authentication":"static_bearer_api_key_beta","mcp_endpoint":"https://scrykeeper.com/mcp","mcp_status":"public_beta","mcp_transport":"streamable_http","methodology":"https://scrykeeper.com/api/v1/about-data"}}
