{"openapi":"3.1.0","info":{"title":"DOOMSCROLLR API","version":"1.1.0","description":"DOOMSCROLLR API v1 lets you register accounts, publish posts, manage subscribers, sell products, connect domains, and automate integrations. All endpoints use a Bearer API key in the Authorization header.\n\nRate limits: authenticated API v1 requests are counted monthly per account API key. FREE and STARTER accounts receive 1,000 requests\/month, DOOMSCROLLR receives 100,000 requests\/month, and ENTERPRISE is unlimited. Responses include X-RateLimit-* headers. Exceeded limits return HTTP 429 with reset metadata. Includes first-class \u201cbuild me X \u2014 but owned\u201d flows for Linktree\/Komi, Shopify\/ecommerce, Substack\/newsletter, Wix\/Squarespace\/WordPress, Instagram\/Tumblr\/Myspace, and OnlyFans\/membership replacements.","contact":{"email":"contact@doomscrollr.com","url":"https:\/\/doomscrollr.com"},"license":{"name":"Proprietary"}},"servers":[{"url":"https:\/\/doomscrollr.com\/api\/v1","description":"Production v1 (recommended)"}],"tags":[{"name":"Account","description":"Register and inspect DOOMSCROLLR accounts."},{"name":"Profile & Settings","description":"Profile and dashboard settings."},{"name":"Posts","description":"Create, list, update, delete posts."},{"name":"Products","description":"Create and manage products for sale."},{"name":"Audience","description":"Manage subscribers."},{"name":"Domains","description":"Search, connect, buy, and manage domains."},{"name":"Integrations","description":"Pinterest, Instagram, RSS integrations."},{"name":"Embed","description":"Embeddable subscriber capture widget."},{"name":"Replacement Flows","description":"First-class \u201cbuild me X \u2014 but owned\u201d flows for owned-audience websites."},{"name":"Affiliate","description":"Affiliate recommendation and creator-commerce workflows"}],"security":[{"bearerAuth":[]}],"paths":{"\/register":{"post":{"tags":["Account"],"operationId":"register","summary":"Register a new DOOMSCROLLR","description":"Create a new free DOOMSCROLLR account and return an API key the caller can use for every other endpoint. No authentication required.","security":[],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["email","username","password"],"properties":{"email":{"type":"string","format":"email","example":"user@example.com"},"username":{"type":"string","example":"johndoe123","description":"Becomes {username}.doomscrollr.com"},"password":{"type":"string","format":"password","example":"Sup3rSecret!"},"name":{"type":"string","example":"John Doe"}}}}}},"responses":{"201":{"description":"Account created","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/RegisterResponse"}}}}}}},"\/profile":{"get":{"tags":["Profile & Settings"],"operationId":"getProfile","summary":"Get the current DOOMSCROLLR profile","description":"Returns the authenticated DOOMSCROLLR's profile, stats (post\/subscriber\/product counts), and feature flags.","responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Profile"}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/settings":{"get":{"tags":["Profile & Settings"],"operationId":"getSettings","summary":"Get the current settings","responses":{"200":{"description":"OK"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"patch":{"tags":["Profile & Settings"],"operationId":"updateSettings","summary":"Update appearance and settings","description":"Update any subset of settings \u2014 name, bio, title, description, font, analytics, and more.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"bio":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"font_id":{"type":"integer"},"google_analytics_account_id":{"type":"string"},"facebook_pixel_id":{"type":"string"},"draft_mode":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Updated"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/posts":{"get":{"tags":["Posts"],"operationId":"listPosts","summary":"List recent posts","parameters":[{"name":"per_page","in":"query","schema":{"type":"integer","default":20,"maximum":50}},{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"q","in":"query","schema":{"type":"string"},"description":"Search title, description, or URL"},{"name":"status","in":"query","schema":{"type":"string","enum":["published","draft","scheduled"]}},{"name":"tag","in":"query","schema":{"type":"string"},"description":"Filter by exact tag name"}],"responses":{"200":{"description":"Paginated list of posts","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/PaginatedPosts"}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"post":{"tags":["Posts"],"operationId":"createLinkPost","summary":"Create a link post","description":"Publish a link post. When `url` is provided we auto-scrape og:image\/title\/description.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https:\/\/example.com\/article"},"title":{"type":"string"},"description":{"type":"string"},"tags":{"type":"string","description":"Comma-separated tags"},"status":{"type":"string","enum":["published","draft","scheduled"],"default":"published"},"publish_at":{"type":"string","format":"date-time","description":"Future publish time. When provided, status is set to scheduled."}}}}}},"responses":{"201":{"description":"Post created","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Post"}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/posts\/image":{"post":{"tags":["Posts"],"operationId":"createImagePost","summary":"Create an image post","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"uri"},"title":{"type":"string"},"description":{"type":"string"},"tags":{"type":"string"},"status":{"type":"string","enum":["published","draft","scheduled"]},"publish_at":{"type":"string","format":"date-time","description":"Future publish time. When provided, status is set to scheduled."}}}}}},"responses":{"201":{"description":"Post created","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Post"}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/posts\/{id}":{"get":{"tags":["Posts"],"operationId":"getPost","summary":"Get a single post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Post"}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"patch":{"tags":["Posts"],"operationId":"updatePost","summary":"Update a post","description":"Update title, description, status (draft\/published), or tags. Only fields you pass are changed.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["published","draft","scheduled"]},"tags":{"type":"string"},"publish_at":{"type":"string","format":"date-time","description":"Future publish time. When provided, status is set to scheduled."}}}}}},"responses":{"200":{"description":"Updated","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Post"}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"delete":{"tags":["Posts"],"operationId":"deletePost","summary":"Delete a post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Deleted","content":{"application\/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/products":{"get":{"tags":["Products"],"operationId":"listProducts","summary":"List products","parameters":[{"name":"per_page","in":"query","schema":{"type":"integer","default":20,"maximum":50}},{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"q","in":"query","schema":{"type":"string"},"description":"Search title, description, or SKU"},{"name":"type","in":"query","schema":{"type":"string","enum":["physical","digital","ticket","subscription"]}},{"name":"min_price","in":"query","schema":{"type":"number"},"description":"Minimum product or variant price."},{"name":"max_price","in":"query","schema":{"type":"number"},"description":"Maximum product or variant price."}],"responses":{"200":{"description":"Paginated list of products"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"post":{"tags":["Products"],"operationId":"createProduct","summary":"Create a product","description":"Physical goods, digital downloads, event tickets, or subscriptions.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["title","price","type"],"properties":{"title":{"type":"string","example":"Limited Edition Hoodie"},"description":{"type":"string"},"price":{"type":"number","example":89.99},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"},"inventory_count":{"type":"integer","example":100}}},"example":{"title":"Limited Edition Hoodie","description":"Premium cotton hoodie for the spring capsule.","price":89.99,"type":"physical","cover_photo_url":"https:\/\/example.com\/hoodie.jpg","shipping_required":true,"variant_options":[{"name":"Color","values":["Black","Ivory"]},{"name":"Size","values":["S","M"]}],"variants":[{"variant_data":{"Color":"Black","Size":"S"},"price":89.99,"inventory_count":10},{"variant_data":{"Color":"Black","Size":"M"},"price":89.99,"inventory_count":10},{"variant_data":{"Color":"Ivory","Size":"S"},"price":89.99,"inventory_count":8},{"variant_data":{"Color":"Ivory","Size":"M"},"price":89.99,"inventory_count":8}]}}}},"responses":{"201":{"description":"Created"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/products\/{id}":{"get":{"tags":["Products"],"operationId":"getProduct","summary":"Get a single product","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"patch":{"tags":["Products"],"operationId":"updateProduct","summary":"Update a product","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"inventory_count":{"type":"integer"},"cover_photo_url":{"type":"string","format":"uri"}}}}}},"responses":{"200":{"description":"Updated"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"delete":{"tags":["Products"],"operationId":"deleteProduct","summary":"Delete a product","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Deleted"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/audience":{"get":{"tags":["Audience"],"operationId":"listSubscribers","summary":"List subscribers","parameters":[{"name":"per_page","in":"query","schema":{"type":"integer","default":20,"maximum":50}},{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"q","in":"query","schema":{"type":"string"},"description":"Search email, name, username, or phone"},{"name":"tag","in":"query","schema":{"type":"string"},"description":"Filter by exact tag name"},{"name":"bounced","in":"query","schema":{"type":"boolean"},"description":"Filter subscribers by bounced status."}],"responses":{"200":{"description":"Paginated list of subscribers with meta.bounced_count and meta.unsubscribed_count."},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"post":{"tags":["Audience"],"operationId":"addSubscriber","summary":"Add a subscriber","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":[],"properties":{"email":{"type":"string","format":"email","description":"Subscriber email address. Optional when email_md5 is provided."},"email_md5":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"MD5 hash of lowercase trimmed email when raw email is unavailable."},"first_name":{"type":"string"},"last_name":{"type":"string"},"phone":{"type":"string"},"gender":{"type":"string"},"source":{"type":"string","example":"email_signup"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"bio":{"type":"string"},"username":{"type":"string"},"followers":{"type":"integer","minimum":0},"tags":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"string"}]},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_content":{"type":"string"},"utm_term":{"type":"string"}},"description":"Provide either email or email_md5."},"example":{"email":"user@example.com","first_name":"John","last_name":"Doe","phone":"+1234567890","gender":"M","source":"email_signup","city":"Los Angeles","state":"California","country":"United States","bio":"Creative Director","username":"johndoe123","followers":10000000,"tags":["fashion","design","luxury"],"utm_source":"doomscrollr","utm_medium":"social","utm_campaign":"spring_sale_2025","utm_content":"carousel_ad_1","utm_term":"trendy_jackets"}}}},"responses":{"201":{"description":"Created"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/audience\/{id}":{"get":{"tags":["Audience"],"operationId":"getSubscriber","summary":"Get a single subscriber","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"delete":{"tags":["Audience"],"operationId":"removeSubscriber","summary":"Remove a subscriber","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Deleted"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"patch":{"tags":["Audience"],"operationId":"updateSubscriber","summary":"Update a subscriber","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Subscriber email address. Optional when email_md5 is provided."},"email_md5":{"type":"string","pattern":"^[a-f0-9]{32}$","description":"MD5 hash of lowercase trimmed email when raw email is unavailable."},"first_name":{"type":"string"},"last_name":{"type":"string"},"phone":{"type":"string"},"gender":{"type":"string"},"source":{"type":"string","example":"email_signup"},"city":{"type":"string"},"state":{"type":"string"},"country":{"type":"string"},"bio":{"type":"string"},"username":{"type":"string"},"followers":{"type":"integer","minimum":0},"tags":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"string"}]},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_content":{"type":"string"},"utm_term":{"type":"string"}}},"example":{"city":"New York","tags":["fashion","vip"],"utm_campaign":"fall_drop_2025"}}}},"responses":{"200":{"description":"Updated subscriber"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/domain\/search":{"post":{"tags":["Domains"],"operationId":"searchDomains","summary":"Check domain availability","description":"Checks .com, .io, .co, and .world TLDs.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"johndoe123"}}}}}},"responses":{"200":{"description":"Availability results"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/domain\/connect":{"post":{"tags":["Domains"],"operationId":"connectDomain","summary":"Connect an external domain","description":"Bring your own domain \u2014 returns DNS records to add at your registrar.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"johndoe123.com"}}}}}},"responses":{"200":{"description":"DNS records to add"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/domain\/buy":{"post":{"tags":["Domains"],"operationId":"buyDomain","summary":"Purchase a domain","description":"Creates a Stripe PaymentIntent and returns a checkout URL. After payment, OpenSRS + Cloudflare auto-configure in ~60 seconds.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"johndoe123.com"}}}}}},"responses":{"200":{"description":"Payment intent + checkout URL"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/domain\/status":{"get":{"tags":["Domains"],"operationId":"domainStatus","summary":"Get status of all domains on this account","responses":{"200":{"description":"OK"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/integrations\/pinterest\/connect":{"post":{"tags":["Integrations"],"operationId":"connectPinterest","summary":"Connect a public Pinterest board","description":"Auto-posts pins from the board every 15 minutes. Works without OAuth \u2014 uses public scraping.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["board_url"],"properties":{"board_url":{"type":"string","format":"uri","example":"https:\/\/www.pinterest.com\/archdigest\/kitchens\/"}}}}}},"responses":{"200":{"description":"Connected"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/integrations\/pinterest\/status":{"get":{"tags":["Integrations"],"operationId":"pinterestStatus","summary":"Get Pinterest integration status","responses":{"200":{"description":"OK"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/integrations\/pinterest":{"delete":{"tags":["Integrations"],"operationId":"disconnectPinterest","summary":"Disconnect Pinterest integration(s)","parameters":[{"name":"integration_id","in":"query","required":false,"schema":{"type":"integer"},"description":"Disconnect a specific integration. Omit to disconnect all Pinterest boards."}],"responses":{"200":{"description":"Disconnected"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/integrations\/instagram":{"post":{"tags":["Integrations"],"operationId":"connectInstagram","summary":"Start Instagram (Zapier) setup","description":"Returns a Zapier setup URL that the user opens in a browser to complete OAuth. This endpoint does not complete the connection by itself.","responses":{"200":{"description":"Zapier setup URL + instructions"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/integrations\/rss":{"post":{"tags":["Integrations"],"operationId":"connectRss","summary":"Connect native RSS polling","description":"Creates or reactivates a native RSS integration. New feed items are imported as link posts by the scheduler.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["feed_url"],"properties":{"feed_url":{"type":"string","format":"uri","maxLength":500}}}}}},"responses":{"200":{"description":"Native RSS integration connected"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"delete":{"tags":["Integrations"],"operationId":"disconnectRss","summary":"Disconnect RSS integration(s)","parameters":[{"name":"integration_id","in":"query","required":false,"schema":{"type":"integer"},"description":"Disconnect a specific integration. Omit to disconnect all RSS feeds."}],"responses":{"200":{"description":"Disconnected"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/embed":{"get":{"tags":["Embed"],"operationId":"getEmbedCode","summary":"Get the embeddable subscriber capture widget","responses":{"200":{"description":"HTML snippet + JS"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/capture":{"get":{"tags":["Embed"],"operationId":"getCaptureSettings","summary":"Get capture widget settings","responses":{"200":{"description":"OK"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"patch":{"tags":["Embed"],"operationId":"updateCaptureSettings","summary":"Update capture widget settings","responses":{"200":{"description":"Updated"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/audience\/export":{"get":{"tags":["Audience"],"operationId":"exportAudienceCsv","summary":"Export subscribers as CSV","parameters":[{"name":"q","in":"query","schema":{"type":"string"},"description":"Search email, name, username, or phone"},{"name":"tag","in":"query","schema":{"type":"string"},"description":"Filter by exact tag name"},{"name":"bounced","in":"query","schema":{"type":"boolean"},"description":"Filter subscribers by bounced status."}],"responses":{"200":{"description":"CSV stream with id,email,phone,name,first_name,last_name,tags,bounced,unsubscribed,spam,created_at","content":{"text\/csv":{"schema":{"type":"string"}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/domain\/{domain}":{"delete":{"tags":["Domains"],"operationId":"disconnectDomain","summary":"Disconnect a custom domain","description":"Disconnects the domain from the authenticated account without deleting purchased domain registrations.","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Domain name; dots are allowed."}],"responses":{"200":{"description":"Disconnected"},"404":{"description":"Domain is not connected to this account"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/curation-theme":{"get":{"tags":["Profile & Settings"],"operationId":"getCurationTheme","summary":"Get curation theme","responses":{"200":{"description":"OK","content":{"application\/json":{"schema":{"type":"object","properties":{"theme":{"type":["string","null"]}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"put":{"tags":["Profile & Settings"],"operationId":"updateCurationTheme","summary":"Update curation theme","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"theme":{"type":["string","null"],"maxLength":10000}}}}}},"responses":{"200":{"description":"Updated","content":{"application\/json":{"schema":{"type":"object","properties":{"theme":{"type":["string","null"]}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/integrations\/rss\/status":{"get":{"tags":["Integrations"],"operationId":"rssStatus","summary":"Get RSS integration status","responses":{"200":{"description":"OK"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/posts\/bulk":{"patch":{"tags":["Posts"],"operationId":"bulkUpdatePosts","summary":"Bulk update posts","description":"Update up to 100 posts owned by the API key account. Supports status\/scheduling, feed flags, and tag replace\/append\/remove.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer"}},"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["published","draft","scheduled"]},"publish_at":{"type":"string","format":"date-time"},"tags":{"type":"string","description":"Comma-separated tags"},"tag_mode":{"type":"string","enum":["replace","append","remove"],"default":"replace"},"hide_main_feed":{"type":"boolean"},"subscription_only":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Bulk update result","content":{"application\/json":{"schema":{"type":"object","properties":{"updated":{"type":"integer"},"deleted":{"type":"integer"},"ids":{"type":"array","items":{"type":"integer"}},"missing_ids":{"type":"array","items":{"type":"integer"}}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"delete":{"tags":["Posts"],"operationId":"bulkDeletePosts","summary":"Bulk delete posts","description":"Delete up to 100 posts owned by the API key account.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"Bulk delete result","content":{"application\/json":{"schema":{"type":"object","properties":{"updated":{"type":"integer"},"deleted":{"type":"integer"},"ids":{"type":"array","items":{"type":"integer"}},"missing_ids":{"type":"array","items":{"type":"integer"}}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/audience\/bulk":{"patch":{"tags":["Audience"],"operationId":"bulkUpdateSubscribers","summary":"Bulk update subscribers","description":"Update up to 500 audience members owned by the API key account. Supports bounced\/unsubscribed\/spam flags and tag replace\/append\/remove.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"integer"}},"tags":{"type":"string","description":"Comma-separated tags, or array in JSON clients"},"tag_mode":{"type":"string","enum":["replace","append","remove"],"default":"replace"},"bounced":{"type":"boolean"},"unsubscribed":{"type":"boolean"},"spam":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Bulk update result","content":{"application\/json":{"schema":{"type":"object","properties":{"updated":{"type":"integer"},"deleted":{"type":"integer"},"ids":{"type":"array","items":{"type":"integer"}},"missing_ids":{"type":"array","items":{"type":"integer"}}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"delete":{"tags":["Audience"],"operationId":"bulkDeleteSubscribers","summary":"Bulk delete subscribers","description":"Delete up to 500 audience members owned by the API key account.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"Bulk delete result","content":{"application\/json":{"schema":{"type":"object","properties":{"updated":{"type":"integer"},"deleted":{"type":"integer"},"ids":{"type":"array","items":{"type":"integer"}},"missing_ids":{"type":"array","items":{"type":"integer"}}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/products\/bulk":{"patch":{"tags":["Products"],"operationId":"bulkUpdateProducts","summary":"Bulk update products","description":"Update up to 100 products owned by the API key account. Supports price\/inventory\/shipping\/cover updates for simple bulk maintenance.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer"}},"price":{"type":"number","minimum":0},"inventory_count":{"type":"integer","minimum":0},"shipping_required":{"type":"boolean"},"shipping_cost":{"type":"number","minimum":0},"cover_photo_url":{"type":"string","format":"uri"}}}}}},"responses":{"200":{"description":"Bulk update result","content":{"application\/json":{"schema":{"type":"object","properties":{"updated":{"type":"integer"},"deleted":{"type":"integer"},"ids":{"type":"array","items":{"type":"integer"}},"missing_ids":{"type":"array","items":{"type":"integer"}}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}},"delete":{"tags":["Products"],"operationId":"bulkDeleteProducts","summary":"Bulk delete products","description":"Delete up to 100 products owned by the API key account. Posts that referenced a deleted product are preserved and unlinked.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["ids"],"properties":{"ids":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"Bulk delete result","content":{"application\/json":{"schema":{"type":"object","properties":{"updated":{"type":"integer"},"deleted":{"type":"integer"},"ids":{"type":"array","items":{"type":"integer"}},"missing_ids":{"type":"array","items":{"type":"integer"}}}}}}},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/linktree":{"post":{"tags":["Replacement Flows"],"operationId":"buildLinktree","summary":"Build an owned Linktree replacement","description":"Creates an owned contact\/link page with navigation and audience-capture next steps. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["links"],"properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Links","links":[{"label":"Shop","url":"https:\/\/example.com\/shop"},{"label":"Newsletter","url":"https:\/\/example.com\/newsletter"}]}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/komi":{"post":{"tags":["Replacement Flows"],"operationId":"buildKomi","summary":"Build an owned Komi replacement","description":"Creates an owned creator links\/contact page with first-party audience capture. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["links"],"properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Owned site"}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/shopify":{"post":{"tags":["Replacement Flows"],"operationId":"buildShopify","summary":"Build an owned Shopify replacement","description":"Creates an owned storefront with optional products, checkout\/customer-data capture, and buyer graph next steps. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Shop","products":[{"title":"Tie Dye Pants","price":50,"type":"physical"}]}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/ecommerce":{"post":{"tags":["Replacement Flows"],"operationId":"buildEcommerce","summary":"Build an owned ecommerce store","description":"Creates an owned storefront with optional products and buyer\/audience graph next steps. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Owned site"}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/substack":{"post":{"tags":["Replacement Flows"],"operationId":"buildSubstack","summary":"Build an owned Substack replacement","description":"Creates an owned newsletter\/publishing page with subscriber capture. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Newsletter","intro":"Weekly drops and notes."}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/newsletter":{"post":{"tags":["Replacement Flows"],"operationId":"buildNewsletter","summary":"Build an owned newsletter","description":"Creates an owned newsletter site with first-party email list capture. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Owned site"}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/website":{"post":{"tags":["Replacement Flows"],"operationId":"buildWebsite","summary":"Build an owned website","description":"Creates an owned Wix\/Squarespace\/WordPress-style site with pages, navigation, styling, and capture next steps. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"My Brand","pages":[{"title":"Home","content":"<p>Welcome.<\/p>"}]}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/social-feed":{"post":{"tags":["Replacement Flows"],"operationId":"buildSocialFeed","summary":"Build an owned social feed","description":"Creates or seeds an owned Instagram\/Tumblr\/Myspace-style visual feed. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Moodboard","source_query":"air cooled Porsche","limit":6}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/flows\/membership":{"post":{"tags":["Replacement Flows"],"operationId":"buildMembership","summary":"Build an owned membership site","description":"Creates an owned OnlyFans\/Patreon-style membership destination. Returns created artifacts, URLs, next steps, and an ownership message.","requestBody":{"required":false,"content":{"application\/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"intro":{"type":"string"},"style_preset":{"type":"string","enum":["skims","brutalist","editorial","minimal"]},"add_to_navigation":{"type":"boolean"},"navigation_label":{"type":"string"},"links":{"type":"array","items":{"type":"object","required":["label","url"],"properties":{"label":{"type":"string"},"url":{"type":"string"}}}},"products":{"type":"array","items":{"type":"object","required":["title","price"],"properties":{"title":{"type":"string"},"description":{"type":"string"},"price":{"type":"number"},"type":{"type":"string","enum":["physical","digital","ticket","subscription"]},"cover_photo_url":{"type":"string","format":"uri"}}}},"pages":{"type":"array","items":{"type":"object","required":["title","content"],"properties":{"title":{"type":"string"},"content":{"type":"string"}}}},"feed_url":{"type":"string","format":"uri"},"source_query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":10},"price":{"type":"number"},"cover_photo_url":{"type":"string","format":"uri"}}},"example":{"title":"Members","price":10}}}},"responses":{"200":{"description":"Replacement flow created"},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"description":"Validation error"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}},"\/affiliate\/shopmy\/posts":{"post":{"tags":["Affiliate"],"operationId":"postShopmyProducts","summary":"Post ShopMy affiliate product recommendations","description":"Creates rich DOOMSCROLLR posts from ShopMy affiliate\/product URLs. The API crawls the final retail product page for title\/description\/photo while preserving the original ShopMy URL as the click target so affiliate commission attribution remains intact.","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["products"],"properties":{"products":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"ShopMy affiliate\/product URL"},"title":{"type":"string","description":"Optional title override"},"description":{"type":"string","description":"Optional description override"},"note":{"type":"string","description":"Creator recommendation note"}}}},"collection_title":{"type":"string","description":"Collection\/edit title, e.g. Holiday gift guide under $100"},"use_case":{"type":"string","description":"Use case\/category, e.g. outfit edit, beauty routine, home finds"},"tags":{"type":"string","description":"Comma-separated tags; shopmy, affiliate, and product-recommendation are added automatically"},"status":{"type":"string","enum":["published","draft","scheduled"],"default":"draft"},"publish_at":{"type":"string","format":"date-time"}}}}}},"responses":{"201":{"description":"Created affiliate recommendation posts","content":{"application\/json":{"schema":{"type":"object","properties":{"created":{"type":"integer"},"posts":{"type":"array","items":{"$ref":"#\/components\/schemas\/Post"}},"message":{"type":"string"}}}}}},"401":{"$ref":"#\/components\/responses\/Unauthorized"},"422":{"$ref":"#\/components\/responses\/ValidationError"},"429":{"$ref":"#\/components\/responses\/RateLimitExceeded"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"Your DOOMSCROLLR API key. Get one at https:\/\/doomscrollr.com\/dashboard."}},"schemas":{"RegisterResponse":{"type":"object","properties":{"username":{"type":"string"},"api_key":{"type":"string","description":"Use this as the Bearer token for all subsequent requests."},"hub_url":{"type":"string","format":"uri"},"dashboard_url":{"type":"string","format":"uri"},"message":{"type":"string"}}},"Profile":{"type":"object","properties":{"username":{"type":"string"},"name":{"type":"string"},"bio":{"type":"string"},"url":{"type":"string"},"custom_domain":{"type":["string","null"]},"subscriber_count":{"type":"integer"},"post_count":{"type":"integer"},"product_count":{"type":"integer"},"bounced_count":{"type":"integer"}}},"Post":{"type":"object","properties":{"id":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"image":{"type":"string","format":"uri"},"status":{"type":"string","enum":["published","draft","scheduled"]},"post_type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"publish_at":{"type":["string","null"],"format":"date-time"}}},"PaginatedPosts":{"type":"object","properties":{"current_page":{"type":"integer"},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Post"}},"per_page":{"type":"integer"},"total":{"type":"integer"}}}},"responses":{"RateLimitExceeded":{"description":"Monthly API rate limit exceeded","headers":{"X-RateLimit-Plan":{"schema":{"type":"string"},"description":"Effective DOOMSCROLLR plan for this API key"},"X-RateLimit-Limit":{"schema":{"oneOf":[{"type":"integer"},{"type":"string","enum":["unlimited"]}]},"description":"Monthly request limit"},"X-RateLimit-Remaining":{"schema":{"oneOf":[{"type":"integer"},{"type":"string","enum":["unlimited"]}]},"description":"Requests remaining in the current monthly window"},"X-RateLimit-Used":{"schema":{"type":"integer"},"description":"Requests used in the current monthly window"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp when the monthly window resets"},"X-RateLimit-Reset-At":{"schema":{"type":"string","format":"date-time"},"description":"ISO 8601 reset time"},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until the limit resets"}},"content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"API rate limit exceeded"},"message":{"type":"string"},"plan":{"type":"string","enum":["FREE","STARTER","DOOMSCROLLR","ENTERPRISE"]},"limit":{"type":"integer","nullable":true},"used":{"type":"integer"},"remaining":{"type":"integer"},"reset_at":{"type":"string","format":"date-time"},"retry_after":{"type":"integer"}}}}}}}}}