{"openapi":"3.1.0","info":{"title":"Rushie API","version":"1.0","description":"Search, license and commission AI-generated pictures. Searching is open; a bearer token (an API key from your account page, an OAuth access token, or a Firebase ID token) credits commissions to you as their originator. For agents, prefer the MCP server at https://rushie.ai/mcp.","contact":{"url":"https://rushie.ai/docs"}},"servers":[{"url":"https://rushie.ai"}],"externalDocs":{"description":"Documentation","url":"https://rushie.ai/docs"},"paths":{"/api/account/config":{"get":{"tags":["account"],"summary":"Config","description":"What the browser needs to offer sign-in, and the share an originator earns.\n\nIt also tells the app which side of the door it is on. The same bundle is the owner's\nstudio on this machine and a stranger's shop through the tunnel, and a stranger's copy\nmust not start the studio - every call it makes would be refused.","operationId":"config_api_account_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Config Api Account Config Get"}}}}},"security":[{"bearer":[]},{}]}},"/api/account/me":{"get":{"tags":["account"],"summary":"Me","operationId":"me_api_account_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Me Api Account Me Get"}}}}},"security":[{"bearer":[]},{}]},"delete":{"tags":["account"],"summary":"Forget Me","description":"Erase the person, keep the ledger. See `accounts.erase`.","operationId":"forget_me_api_account_me_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Forget Me Api Account Me Delete"}}}}},"security":[{"bearer":[]},{}]}},"/api/account/earnings":{"get":{"tags":["account"],"summary":"Earnings","operationId":"earnings_api_account_earnings_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Earnings Api Account Earnings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/account/credits":{"get":{"tags":["account"],"summary":"My Credits","operationId":"my_credits_api_account_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response My Credits Api Account Credits Get"}}}}},"security":[{"bearer":[]},{}]}},"/api/account/keys":{"get":{"tags":["account"],"summary":"My Keys","operationId":"my_keys_api_account_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response My Keys Api Account Keys Get"}}}}},"security":[{"bearer":[]},{}]},"post":{"tags":["account"],"summary":"New Key","description":"The only response that ever carries the key itself.","operationId":"new_key_api_account_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response New Key Api Account Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/account/keys/{key_id}":{"delete":{"tags":["account"],"summary":"Drop Key","operationId":"drop_key_api_account_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Drop Key Api Account Keys  Key Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/account/connections":{"get":{"tags":["account"],"summary":"My Connections","description":"Apps signed in to this account over OAuth: Claude, Cursor, anything that asked.","operationId":"my_connections_api_account_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response My Connections Api Account Connections Get"}}}}},"security":[{"bearer":[]},{}]}},"/api/account/connections/{grant_id}":{"delete":{"tags":["account"],"summary":"Drop Connection","operationId":"drop_connection_api_account_connections__grant_id__delete","parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string","title":"Grant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Drop Connection Api Account Connections  Grant Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/info":{"get":{"tags":["bank"],"summary":"Info","description":"What this bank is and what its licences grant. The front page of the catalogue.","operationId":"info_api_bank_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Info Api Bank Info Get"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/search":{"get":{"tags":["bank"],"summary":"Search","description":"The catalogue. Published assets only, previews only, no prompts and no seeds.\n\nA text query is ranked by meaning: the words are expanded through the concept map in\n`services/search.py`, so \"stressed\" finds the picture whose prompt says \"pressing the\nbridge of their nose\". Filters still narrow first, because a buyer who asked for vertical\nclips does not want the best horizontal one.","operationId":"search_api_bank_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"orientation","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Orientation"}},{"name":"min_megapixels","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Megapixels"}},{"name":"color","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","default":"relevance","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":40,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Api Bank Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/asset/{asset_id}":{"get":{"tags":["bank"],"summary":"Asset","operationId":"asset_api_bank_asset__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Asset Api Bank Asset  Asset Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/preview/{asset_id}":{"get":{"tags":["bank"],"summary":"Preview","description":"A watermarked copy, built on first request and cached.","operationId":"preview_api_bank_preview__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/license":{"post":{"tags":["bank"],"summary":"License Asset","description":"Issue a licence and hand back a signed, expiring download link.\n\nPayment is deliberately pluggable. With `bank_free_licensing` on, the bank issues licences\nwithout charge, which is how a private or internal catalogue runs. Otherwise a settlement\nreference must be supplied, and the x402 rail already in the MCP server provides one.","operationId":"license_asset_api_bank_license_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LicenseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response License Asset Api Bank License Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/licence/{license_id}":{"get":{"tags":["bank"],"summary":"Verify Licence","description":"Public proof that a picture is cleared: what licence, on what, when. Never who or how much.","operationId":"verify_licence_api_bank_licence__license_id__get","parameters":[{"name":"license_id","in":"path","required":true,"schema":{"type":"string","title":"License Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Verify Licence Api Bank Licence  License Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/placements":{"get":{"tags":["bank"],"summary":"Placements List","description":"Named sizes a licence can be delivered in: /api/bank/download/{token}?fit=<name>.","operationId":"placements_list_api_bank_placements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Placements List Api Bank Placements Get"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/download/{token}":{"get":{"tags":["bank"],"summary":"Download","description":"The original, against a signed licence token that is still good for a redemption.\n\nWith `fit` (a placement name like `hero`, or `1200x630`) the same licence delivers the\npicture cut to that size around its subject - one licence, every size. See\nservices/placements.py.","operationId":"download_api_bank_download__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"fit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fit"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"jpg","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/request":{"post":{"tags":["bank"],"summary":"Request Asset","description":"Make the thing the catalogue did not have.\n\nThis is the answer to an empty result page that no library with fixed inventory can give.\nThe render is queued, listed automatically once it passes the same checks as everything\nelse, and licensed like any other asset.","operationId":"request_asset_api_bank_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Request Asset Api Bank Request Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/request/{request_id}":{"get":{"tags":["bank"],"summary":"Request Status","description":"Where a made-to-order contest has got to: a draft while judging, a listing when done.","operationId":"request_status_api_bank_request__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Request Status Api Bank Request  Request Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}},"/api/bank/request/{request_id}/draft":{"get":{"tags":["bank"],"summary":"Request Draft","description":"The winning candidate, watermarked, while the full-size version is still being made.\n\nA buyer should see the picture about a minute before the file is ready, not stare at a\nspinner for the whole contest. It is scoped to this request rather than published.","operationId":"request_draft_api_bank_request__request_id__draft_get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"bearer":[]},{}]}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyBody":{"properties":{"name":{"type":"string","maxLength":60,"title":"Name","default":""}},"type":"object","title":"KeyBody"},"LicenseRequest":{"properties":{"asset_id":{"type":"string","title":"Asset Id"},"license_type":{"type":"string","title":"License Type","default":"standard"},"buyer":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Buyer"},"payment_ref":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Payment Ref"}},"type":"object","required":["asset_id"],"title":"LicenseRequest"},"RequestBody":{"properties":{"query":{"type":"string","maxLength":160,"minLength":3,"title":"Query"},"source":{"type":"string","title":"Source","default":"web"},"shape":{"type":"string","title":"Shape","default":"landscape"},"candidates":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Candidates","default":3}},"type":"object","required":["query"],"title":"RequestBody"}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"rsh_... API key, OAuth access token, or Firebase ID token"}}}}