{"openapi":"3.1.0","info":{"title":"Brickway API","version":"0.1.0"},"paths":{"/ingest/custom-set-image":{"post":{"tags":["ingest"],"summary":"Ingest Custom Set Image","description":"Copy a custom set's image into our store from a source URL (see module docstring).\n\nImage readiness is best-effort — a fetch failure marks img_status='failed', it\nnever errors the set itself.","operationId":"ingest_custom_set_image_ingest_custom_set_image_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomSetImageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ingest Custom Set Image Ingest Custom Set Image Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/ingest/custom-set-photo":{"post":{"tags":["ingest"],"summary":"Ingest Custom Set Photo","description":"Screen + mirror a directly uploaded photo for a custom set (multipart).\n\nThe user's own photo has no source URL — ``img_source_url`` is stamped NULL (the\nprovenance IS \"user upload\"). Oversized → 413 and non-raster → 415 stamp nothing;\na flagged verdict stamps 'blocked' (fail closed, recorded in custom_set_screenings);\nscreening down → 502 with nothing stamped; a mirror failure → 502, stamping 'failed'\nonly when the row wasn't already serving a good mirrored image.","operationId":"ingest_custom_set_photo_ingest_custom_set_photo_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_ingest_custom_set_photo_ingest_custom_set_photo_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ingest Custom Set Photo Ingest Custom Set Photo Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/mocs/resolve":{"post":{"tags":["mocs"],"summary":"Resolve Moc","operationId":"resolve_moc_mocs_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MocResolveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Resolve Moc Mocs Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/imports/connect":{"post":{"tags":["imports"],"summary":"Connect","operationId":"connect_imports_connect_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Connect Imports Connect Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/imports/run":{"post":{"tags":["imports"],"summary":"Run","operationId":"run_imports_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Run Imports Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/contact":{"post":{"tags":["contact"],"summary":"Contact","operationId":"contact_contact_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/contact/app":{"post":{"tags":["contact"],"summary":"Contact From App","operationId":"contact_from_app_contact_app_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppContactRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppContactResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/sync":{"post":{"tags":["billing"],"summary":"Sync Entitlement","operationId":"sync_entitlement_billing_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sync Entitlement Billing Sync Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/revenuecat":{"post":{"tags":["billing"],"summary":"Revenuecat Webhook","operationId":"revenuecat_webhook_billing_revenuecat_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revenuecat Webhook Billing Revenuecat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/availability":{"get":{"tags":["availability"],"summary":"Availability","operationId":"availability_availability_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PreBeta"},{"$ref":"#/components/schemas/BetaOpen"},{"$ref":"#/components/schemas/BetaFull"},{"$ref":"#/components/schemas/General"}],"title":"Response Availability Availability Get","discriminator":{"propertyName":"state","mapping":{"pre_beta":"#/components/schemas/PreBeta","beta_open":"#/components/schemas/BetaOpen","beta_full":"#/components/schemas/BetaFull","general":"#/components/schemas/General"}}}}}}}}},"/waitlist/subscribe":{"post":{"tags":["waitlist"],"summary":"Subscribe","operationId":"subscribe_waitlist_subscribe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/waitlist/confirm":{"get":{"tags":["waitlist"],"summary":"Confirm Interstitial","operationId":"confirm_interstitial_waitlist_confirm_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":4096,"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["waitlist"],"summary":"Confirm","operationId":"confirm_waitlist_confirm_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/shares":{"post":{"tags":["shares"],"summary":"Create Share","operationId":"create_share_shares_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/shares/{token}":{"get":{"tags":["shares"],"summary":"Get Public Share","operationId":"get_public_share_shares__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":256,"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicShareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/beta/testflight/start":{"post":{"tags":["beta"],"summary":"Start Claim","description":"Reserve the verified install and create an UNCONFIRMED passwordless auth row.\n\nThe client then calls Supabase's ordinary signInWithOtp/verifyOtp flow. Creating the row is an\ninvite-only allowlist operation, not proof that the requester owns the supplied address.","operationId":"start_claim_beta_testflight_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartClaimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Start Claim Beta Testflight Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/beta/testflight/complete":{"post":{"tags":["beta"],"summary":"Complete Claim","description":"Bind the verified-email session and idempotently grant lifetime Premium.","operationId":"complete_claim_beta_testflight_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppTransactionProof"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Complete Claim Beta Testflight Complete Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/ai/chat":{"post":{"tags":["ai"],"summary":"Chat","operationId":"chat_ai_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Chat Ai Chat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/internal/rebrickable/{path}":{"get":{"tags":["cache"],"summary":"Proxy Rebrickable","operationId":"proxy_rebrickable_internal_rebrickable__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}},{"name":"x-cache-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Cache-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/instructions/pending":{"get":{"tags":["instructions"],"summary":"Pending","description":"The next PDFs to mirror, smallest first (see 0123 for why size-ascending).","operationId":"pending_internal_instructions_pending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"x-instructions-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Instructions-Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PendingItem"},"title":"Response Pending Internal Instructions Pending Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/instructions/record":{"post":{"tags":["instructions"],"summary":"Record","description":"Record a batch of outcomes.\n\nEach result is recorded independently. One malformed or losing row must not\ndiscard the rest of a 15-minute run's work, so a failure here is logged with its\nURL and the batch continues; the URL simply stays pending and is retried. The\nRPC owns the state machine, including refusing to reopen a terminal row.","operationId":"record_internal_instructions_record_post","parameters":[{"name":"x-instructions-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Instructions-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/instructions/run/start":{"post":{"tags":["instructions"],"summary":"Run Start","description":"Open a run row and return its id.\n\nUnlike /record this does NOT swallow failures: if the run cannot be recorded the\nWorker must hear about it, because a run that mirrors nothing leaves no other trace\nand would otherwise be indistinguishable from the schedule not firing at all.\nThe RPC also reaps runs killed before they could report (0124).","operationId":"run_start_internal_instructions_run_start_post","parameters":[{"name":"x-instructions-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Instructions-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStartRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/instructions/run/finish":{"post":{"tags":["instructions"],"summary":"Run Finish","description":"Close a run with its summary. A run already closed by the reaper stays closed.","operationId":"run_finish_internal_instructions_run_finish_post","parameters":[{"name":"x-instructions-token","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Instructions-Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunFinishRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Health Get"}}}}}}}},"components":{"schemas":{"AppContactRequest":{"properties":{"message":{"type":"string","maxLength":5000,"minLength":1,"title":"Message"}},"additionalProperties":false,"type":"object","required":["message"],"title":"AppContactRequest"},"AppContactResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"}},"type":"object","required":["ok"],"title":"AppContactResponse"},"AppTransactionProof":{"properties":{"app_transaction_jws":{"type":"string","maxLength":16384,"minLength":100,"title":"App Transaction Jws"},"device_verification_id":{"type":"string","format":"uuid","title":"Device Verification Id"}},"type":"object","required":["app_transaction_jws","device_verification_id"],"title":"AppTransactionProof"},"BetaFull":{"properties":{"state":{"type":"string","const":"beta_full","title":"State"},"joined":{"type":"integer","title":"Joined"},"cap":{"type":"integer","title":"Cap"},"remaining":{"type":"integer","const":0,"title":"Remaining"},"notification_signup_open":{"type":"boolean","title":"Notification Signup Open"}},"additionalProperties":false,"type":"object","required":["state","joined","cap","remaining","notification_signup_open"],"title":"BetaFull"},"BetaOpen":{"properties":{"state":{"type":"string","const":"beta_open","title":"State"},"joined":{"type":"integer","title":"Joined"},"cap":{"type":"integer","title":"Cap"},"remaining":{"type":"integer","title":"Remaining"},"testflight_url":{"type":"string","title":"Testflight Url"}},"additionalProperties":false,"type":"object","required":["state","joined","cap","remaining","testflight_url"],"title":"BetaOpen"},"Body_ingest_custom_set_photo_ingest_custom_set_photo_post":{"properties":{"custom_set_id":{"type":"string","title":"Custom Set Id"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["custom_set_id","file"],"title":"Body_ingest_custom_set_photo_ingest_custom_set_photo_post"},"ChatHistoryEntry":{"properties":{"role":{"type":"string","enum":["user","assistant"],"title":"Role"},"text":{"type":"string","maxLength":2000,"minLength":1,"title":"Text"}},"type":"object","required":["role","text"],"title":"ChatHistoryEntry","description":"One bounded text-only prior message — never tool calls, hidden state, or actions."},"ChatRequest":{"properties":{"op_id":{"type":"string","format":"uuid","title":"Op Id","description":"Client-minted turn id; the reserve idempotency key"},"message":{"type":"string","maxLength":4000,"minLength":1,"title":"Message"},"household_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Household Id","description":"The client's active household; grounds the turn in that collection's stats"},"prior":{"items":{"$ref":"#/components/schemas/ChatHistoryEntry"},"type":"array","maxItems":12,"title":"Prior","description":"Recent text-only conversation context, oldest first"}},"type":"object","required":["op_id","message"],"title":"ChatRequest"},"ConnectRequest":{"properties":{"provider":{"type":"string","enum":["rebrickable","brickset","brickowl"],"title":"Provider"},"household_id":{"type":"string","format":"uuid","title":"Household Id"},"username":{"type":"string","maxLength":200,"minLength":1,"title":"Username"},"password":{"type":"string","maxLength":1024,"minLength":1,"title":"Password"}},"type":"object","required":["provider","household_id","username","password"],"title":"ConnectRequest"},"CreateShareRequest":{"properties":{"source_kind":{"type":"string","enum":["inventory_item","build","achievement"],"title":"Source Kind"},"source_ref":{"type":"string","format":"uuid","title":"Source Ref"},"kind":{"type":"string","enum":["item","build_completed","ordered","mail_day","new_addition","wishlist","active_build","collection_milestone","build_milestone","figdex_milestone","year_recap"],"title":"Kind"},"card_theme":{"type":"string","enum":["light","dark"],"title":"Card Theme"},"idempotency_key":{"type":"string","format":"uuid","title":"Idempotency Key"},"timezone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timezone"}},"additionalProperties":false,"type":"object","required":["source_kind","source_ref","kind","card_theme","idempotency_key"],"title":"CreateShareRequest"},"CreateShareResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"public_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Public Url"},"card_link_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Card Link Url"},"card_post_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Card Post Url"},"card_story_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Card Story Url"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"additionalProperties":false,"type":"object","required":["id","public_url","card_link_url","card_post_url","card_story_url","created_at"],"title":"CreateShareResponse"},"CustomSetImageRequest":{"properties":{"custom_set_id":{"type":"string","title":"Custom Set Id"},"source_url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Source Url"}},"type":"object","required":["custom_set_id","source_url"],"title":"CustomSetImageRequest"},"General":{"properties":{"state":{"type":"string","const":"general","title":"State"},"ios_store_url":{"type":"string","title":"Ios Store Url"},"android_store_url":{"type":"string","title":"Android Store Url"}},"additionalProperties":false,"type":"object","required":["state","ios_store_url","android_store_url"],"title":"General"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MirrorResult":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url"},"asset_id":{"type":"string","maxLength":128,"minLength":1,"title":"Asset Id"},"status":{"type":"string","enum":["mirrored","gone","retry"],"title":"Status"},"r2_key":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"R2 Key"},"bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bytes"},"etag":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Etag"},"sha256":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Sha256"},"error":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Error"}},"type":"object","required":["url","asset_id","status"],"title":"MirrorResult","description":"One Worker verdict about one PDF.\n\n``status`` mirrors the RPC's vocabulary: ``mirrored`` (in R2, verified),\n``gone`` (LEGO answered 404/410, a terminal fact), ``retry`` (transient, put it\nback in the queue and let the attempt cap decide when to give up)."},"MocResolveRequest":{"properties":{"moc":{"type":"string","title":"Moc"},"alt_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Of"}},"type":"object","required":["moc"],"title":"MocResolveRequest"},"PendingItem":{"properties":{"url":{"type":"string","title":"Url"},"asset_id":{"type":"string","title":"Asset Id"},"bytes":{"type":"integer","title":"Bytes"}},"type":"object","required":["url","asset_id","bytes"],"title":"PendingItem"},"PreBeta":{"properties":{"state":{"type":"string","const":"pre_beta","title":"State"}},"additionalProperties":false,"type":"object","required":["state"],"title":"PreBeta"},"PublicShareResponse":{"properties":{"version":{"type":"integer","enum":[1,2],"title":"Version","default":1},"kind":{"type":"string","enum":["item","build_completed","ordered","mail_day","new_addition","wishlist","active_build","collection_milestone","build_milestone","figdex_milestone","year_recap"],"title":"Kind"},"title":{"type":"string","maxLength":80,"minLength":1,"title":"Title"},"subject":{"anyOf":[{"$ref":"#/components/schemas/ShareSubjectV1"},{"type":"null"}]},"moment_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Moment At"},"moment_tz":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Moment Tz"},"build":{"anyOf":[{"$ref":"#/components/schemas/ShareBuildV1"},{"type":"null"}]},"achievement":{"anyOf":[{"$ref":"#/components/schemas/ShareAchievementV1"},{"type":"null"}]},"template_version":{"anyOf":[{"type":"integer","const":1},{"type":"null"}],"title":"Template Version"},"card_theme":{"type":"string","enum":["light","dark"],"title":"Card Theme"}},"additionalProperties":false,"type":"object","required":["kind","title","card_theme"],"title":"PublicShareResponse","description":"Public snapshot plus its frozen first-publication presentation theme.\n\nExplicit light/dark card variants are query overrides; the stored default\nis joined into this narrowly-shaped renderer response for bare URLs and OG."},"RecordRequest":{"properties":{"results":{"items":{"$ref":"#/components/schemas/MirrorResult"},"type":"array","maxItems":500,"minItems":1,"title":"Results"}},"type":"object","required":["results"],"title":"RecordRequest"},"RecordResponse":{"properties":{"recorded":{"type":"integer","title":"Recorded"}},"type":"object","required":["recorded"],"title":"RecordResponse"},"RunFinishRequest":{"properties":{"run_id":{"type":"integer","minimum":1.0,"title":"Run Id"},"mirrored":{"type":"integer","minimum":0.0,"title":"Mirrored","default":0},"gone":{"type":"integer","minimum":0.0,"title":"Gone","default":0},"retry":{"type":"integer","minimum":0.0,"title":"Retry","default":0},"bytes":{"type":"integer","minimum":0.0,"title":"Bytes","default":0},"batches":{"type":"integer","minimum":0.0,"title":"Batches","default":0},"stopped_on_budget":{"type":"boolean","title":"Stopped On Budget","default":false},"error":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Error"}},"type":"object","required":["run_id"],"title":"RunFinishRequest"},"RunRequest":{"properties":{"provider":{"type":"string","enum":["rebrickable","brickset","brickowl"],"title":"Provider"},"household_id":{"type":"string","format":"uuid","title":"Household Id"},"scope":{"type":"string","title":"Scope","default":"owned_sets"}},"type":"object","required":["provider","household_id"],"title":"RunRequest"},"RunStartRequest":{"properties":{"trigger":{"type":"string","enum":["cron","manual"],"title":"Trigger"},"cron":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Cron"}},"type":"object","required":["trigger"],"title":"RunStartRequest"},"RunStartResponse":{"properties":{"run_id":{"type":"integer","title":"Run Id"}},"type":"object","required":["run_id"],"title":"RunStartResponse"},"ShareAchievementV1":{"properties":{"achievement_kind":{"type":"string","enum":["collection_sets","collection_pieces","completed_builds","built_pieces","cmf_series","year_recap"],"title":"Achievement Kind"},"achievement_key":{"type":"string","maxLength":120,"minLength":1,"title":"Achievement Key"},"threshold":{"anyOf":[{"type":"integer","maximum":1000000000.0,"minimum":1.0},{"type":"null"}],"title":"Threshold"},"current_count":{"anyOf":[{"type":"integer","maximum":1000000000.0,"minimum":0.0},{"type":"null"}],"title":"Current Count"},"series_name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Series Name"},"year":{"anyOf":[{"type":"integer","maximum":2200.0,"minimum":2000.0},{"type":"null"}],"title":"Year"},"sets_built":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Sets Built"},"pieces_built":{"anyOf":[{"type":"integer","maximum":1000000000.0,"minimum":0.0},{"type":"null"}],"title":"Pieces Built"},"hands_on_seconds":{"anyOf":[{"type":"integer","maximum":1000000000.0,"minimum":0.0},{"type":"null"}],"title":"Hands On Seconds"}},"additionalProperties":false,"type":"object","required":["achievement_kind","achievement_key"],"title":"ShareAchievementV1","description":"Frozen, database-derived milestone/recap facts.\n\nThe values are deliberately generic and numeric/string-only.  No tenant\nidentifiers or free-form household text can enter the public contract."},"ShareBuildV1":{"properties":{"tracking_fidelity":{"type":"string","enum":["active","calendar","untimed","imported"],"title":"Tracking Fidelity"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"active_seconds":{"anyOf":[{"type":"integer","maximum":100000000.0,"minimum":1.0},{"type":"null"}],"title":"Active Seconds"},"piece_count":{"anyOf":[{"type":"integer","maximum":10000000.0,"minimum":1.0},{"type":"null"}],"title":"Piece Count"},"active_status":{"anyOf":[{"type":"string","enum":["building","paused"]},{"type":"null"}],"title":"Active Status"}},"additionalProperties":false,"type":"object","required":["tracking_fidelity"],"title":"ShareBuildV1"},"ShareSubjectV1":{"properties":{"catalog_kind":{"type":"string","enum":["lego_set","global_alt_set","canonical_minifig"],"title":"Catalog Kind"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"display_id":{"type":"string","maxLength":128,"minLength":1,"title":"Display Id"},"catalog_ref":{"type":"string","maxLength":128,"minLength":1,"title":"Catalog Ref"},"set_num":{"anyOf":[{"type":"string","maxLength":128,"minLength":1},{"type":"null"}],"title":"Set Num"},"maker":{"type":"string","maxLength":100,"minLength":1,"title":"Maker"},"manufacturer_slug":{"type":"string","maxLength":50,"minLength":1,"title":"Manufacturer Slug"},"maker_url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Maker Url"},"image_ref":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Image Ref"},"year":{"anyOf":[{"type":"integer","maximum":2200.0,"minimum":1800.0},{"type":"null"}],"title":"Year"},"pieces":{"anyOf":[{"type":"integer","maximum":10000000.0,"minimum":1.0},{"type":"null"}],"title":"Pieces"},"quantity":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":1.0},{"type":"null"}],"title":"Quantity"},"retired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Retired"},"custom_visibility":{"anyOf":[{"type":"string","const":"global"},{"type":"null"}],"title":"Custom Visibility"},"verified_amazon_asin":{"anyOf":[{"type":"string","pattern":"^[A-Z0-9]{10}$"},{"type":"null"}],"title":"Verified Amazon Asin"}},"additionalProperties":false,"type":"object","required":["catalog_kind","name","display_id","catalog_ref","maker","manufacturer_slug"],"title":"ShareSubjectV1"},"StartClaimRequest":{"properties":{"app_transaction_jws":{"type":"string","maxLength":16384,"minLength":100,"title":"App Transaction Jws"},"device_verification_id":{"type":"string","format":"uuid","title":"Device Verification Id"},"email":{"type":"string","maxLength":254,"minLength":3,"title":"Email"}},"type":"object","required":["app_transaction_jws","device_verification_id","email"],"title":"StartClaimRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}