{"openapi":"3.1.0","info":{"title":"Atlas Data Exchange API","description":"Measured, provenance-aware, multi-source infrastructure and hazard intelligence with explicit spatial confidence and machine-readable quality contracts. Discovery, contracts, samples and quotes need no account; paid access is a self-serve Stripe checkout and every feed request is metered against the buyer's own key. Human storefront: https://app.atlasipholdingsllc.com/intelligence. MCP: https://app.atlasipholdingsllc.com/mcp","contact":{"name":"Atlas IP Holdings LLC","url":"https://atlasipholdingsllc.com/"},"version":"2026-09-11.2"},"paths":{"/api/account/signup":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Signup","operationId":"account_signup_api_account_signup_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/login":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Login","operationId":"account_login_api_account_login_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/logout":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Logout","operationId":"account_logout_api_account_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/password/forgot":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Password Forgot","operationId":"account_password_forgot_api_account_password_forgot_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/password/reset":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Password Reset","operationId":"account_password_reset_api_account_password_reset_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/verify-email":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Verify Email","description":"Confirm an email address from the link we mailed at signup. Single-use + 24h expiry: the token\nis matched by sha256, the account is flagged verified, and the token is burned in one txn.","operationId":"account_verify_email_api_account_verify_email_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/verify-email/resend":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Verify Email Resend","description":"Re-mint + re-email a verify link for the logged-in account. Per-IP throttled (anti-spam);\nno-ops cleanly if the account is already verified.","operationId":"account_verify_email_resend_api_account_verify_email_resend_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/delete":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Delete","description":"GDPR/CCPA erasure. Deletes the account; FK cascades remove entitlements, subscriptions, billing\ncustomer + reset tokens. Onboarding submissions (signed NDAs) are FK SET NULL -> retained\nde-linked as legal records (Art.17(3) legal-obligation exception).","operationId":"account_delete_api_account_delete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/me":{"get":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Me","operationId":"account_me_api_account_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/export":{"get":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Account Export","description":"GDPR/CCPA data portability: download EVERYTHING we hold for this account as a JSON file\n(the atlas_users row minus password_hash, plus subscriptions, entitlements, billing customer, and\nemail drip enrollments). Served as an attachment; json.dumps(default=str) stringifies datetimes/UUIDs.","operationId":"account_export_api_account_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/email/tick":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Admin Email Tick","description":"Out-of-process backstop for the in-process email drip loop (hang-guard; same SPOF class as the G1\npubdata/market pull backstop). Runs ONE tick+drain pass. Auth: admin session OR header X-Backstop-Secret\n== ATLAS_BACKSTOP_SECRET (a curl cron has no session, so without this branch it always 403s). No-ops when\nemail is disabled. Lets a Render cron defeat a frozen/dead in-process email loop.","operationId":"admin_email_tick_api_admin_email_tick_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/plans":{"get":{"tags":["Atlas Identity / Billing / SSO"],"summary":"List Plans","operationId":"list_plans_api_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/checkout":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Billing Checkout","operationId":"billing_checkout_api_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/portal":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Billing Portal","description":"Self-serve Stripe Billing Portal session (manage/cancel/update card). 2026-08-05: customers\ncould subscribe but had NO path to manage or cancel — a churn/chargeback and EU-compliance\nsurface. Comped accounts (stripe_customer_id NULL) have nothing to manage -> clear 404.","operationId":"billing_portal_api_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/simulate":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Billing Simulate","description":"DEV ONLY (ATLAS_BILLING_ALLOW_SIMULATE=1): grant a plan without paying so\nthe full chain can be verified before Stripe keys exist.","operationId":"billing_simulate_api_billing_simulate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/webhook":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Billing Webhook","operationId":"billing_webhook_api_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sso/authorize":{"get":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Sso Authorize","description":"Product -> Atlas. If the visitor isn't logged in, send them to the store\n(carrying product+return so they come back). If logged in but not entitled,\nsend them to the store with ?need=<product>. If entitled, mint a short-lived\nsigned token and bounce back to the product's return URL.","operationId":"sso_authorize_sso_authorize_get","parameters":[{"name":"product","in":"query","required":false,"schema":{"type":"string","default":"","title":"Product"}},{"name":"ret","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ret"}},{"name":"return_url","in":"query","required":false,"schema":{"type":"string","default":"","title":"Return Url"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/moderation/entitlement":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Moderation Entitlement","description":"Server-to-server, HMAC-signed with ATLAS_SOURCE_SECRET_DOSSIER (the same secret as the key-sync push). The\nmoderation service calls this to RE-VALIDATE that an account still holds moderation_api, so a lost sync (a stranded\nlive $99 key, or a locked-out payer) is caught at key-check time and doesn't depend on the push landing ($2).","operationId":"moderation_entitlement_api_moderation_entitlement_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sso/verify":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Sso Verify","description":"Called server-side BY a product to validate the token Atlas issued. Re-checks\nthe entitlement is still live, then returns the identity + entitlements.","operationId":"sso_verify_api_sso_verify_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/accounts":{"get":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Admin List Accounts","description":"Every customer account with their plan(s) + the products they can access.","operationId":"admin_list_accounts_api_admin_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/accounts/{account_id}/grant":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Admin Grant","description":"Grant access by plan_code (full plan) OR a single product_key (manual).","operationId":"admin_grant_api_admin_accounts__account_id__grant_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/accounts/{account_id}/revoke":{"post":{"tags":["Atlas Identity / Billing / SSO"],"summary":"Admin Revoke","description":"Revoke a product_key for an account (across all sources).","operationId":"admin_revoke_api_admin_accounts__account_id__revoke_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data":{"get":{"tags":["DataPacks"],"summary":"Data Exchange Page","description":"The Atlas Data Exchange surface - catalog of indices + historical charts + buy/feed.","operationId":"data_exchange_page_data_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/datapacks/admin/packs":{"post":{"tags":["DataPacks"],"summary":"Admin Upsert Pack","description":"Atlas-admin pack curation (any owner - collective or on behalf of a product).","operationId":"admin_upsert_pack_api_datapacks_admin_packs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["DataPacks"],"summary":"Admin List Packs","description":"All packs incl. draft/archived (admin), optionally filtered by owner.","operationId":"admin_list_packs_api_datapacks_admin_packs_get","parameters":[{"name":"owner","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Owner"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/admin/packs/{slug}/status":{"post":{"tags":["DataPacks"],"summary":"Admin Pack Status","description":"Publish / unpublish (listed | draft | archived).","operationId":"admin_pack_status_api_datapacks_admin_packs__slug__status_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"status","in":"query","required":true,"schema":{"type":"string","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/product/packs":{"get":{"tags":["DataPacks"],"summary":"Product List Packs","description":"A product backend lists ITS OWN packs (all statuses incl. draft). HMAC-signed (empty body).","operationId":"product_list_packs_api_datapacks_product_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["DataPacks"],"summary":"Product Publish Pack","description":"Per-product SELF-publish: a product backend signs and publishes a pack from ITS OWN\nentitled streams. owner is FORCED to the authenticated product. No human session needed.","operationId":"product_publish_pack_api_datapacks_product_packs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks":{"get":{"tags":["DataPacks"],"summary":"List Datapacks","operationId":"list_datapacks_api_datapacks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/datapacks/{slug}/series":{"get":{"tags":["DataPacks"],"summary":"Datapack Series","description":"Derived daily analytics time-series for charts / historicals / live feeds (aggregated,\ndefensible — same product as the pack). Every access is recorded as Atlas's own usage data.","operationId":"datapack_series_api_datapacks__slug__series_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/usage":{"get":{"tags":["DataPacks"],"summary":"Datapack Usage","description":"Internal usage analytics - who/what/when across feeds + downloads (admin only).","operationId":"datapack_usage_api_datapacks_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/datapacks/buy":{"post":{"tags":["DataPacks"],"summary":"Buy Datapack","operationId":"buy_datapack_api_datapacks_buy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuyIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/confirm":{"get":{"tags":["DataPacks"],"summary":"Confirm Datapack","operationId":"confirm_datapack_api_datapacks_confirm_get","parameters":[{"name":"session_id","in":"query","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/download":{"get":{"tags":["DataPacks"],"summary":"Download Datapack","description":"Token-gated download of a purchased pack, in any EXPORT_FORMATS value\n(csv/tsv/json/ndjson/xml/xlsx) and any resolution the purchased tier allows\n(daily | weekly | monthly | rolling7 | rolling30 | derived for the history tier).","operationId":"download_datapack_api_datapacks_download_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"csv","title":"Format"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","default":"daily","title":"Resolution"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/formats":{"get":{"tags":["DataPacks"],"summary":"Datapack Formats","description":"Advertise the export formats a buyer can request on download.","operationId":"datapack_formats_api_datapacks_formats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/surface/{product}":{"get":{"tags":["Surfaces"],"summary":"Surface Api","operationId":"surface_api_api_surface__product__get","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string","title":"Product"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":90,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/starhop/anomalies":{"get":{"tags":["Surfaces","Surfaces"],"summary":"Starhop Anomalies Api","description":"Star Hop geophysical anomaly watch — geomagnetic storms + significant quakes + seismic swarms.","operationId":"starhop_anomalies_api_api_starhop_anomalies_get","parameters":[{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","default":72,"title":"Window Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/surfaces":{"get":{"tags":["Surfaces"],"summary":"Surfaces List","operationId":"surfaces_list_surfaces_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/surface/{product}":{"get":{"tags":["Surfaces"],"summary":"Surface Page","operationId":"surface_page_surface__product__get","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string","title":"Product"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feeds/subscribe":{"post":{"tags":["Feeds"],"summary":"Subscribe","operationId":"subscribe_api_feeds_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscribeIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/health":{"get":{"tags":["Feeds"],"summary":"Billing Health Route","description":"Public yes/no only; the detail (which events are missing) is for admins.","operationId":"billing_health_route_api_billing_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/client-ip-source":{"get":{"tags":["Feeds"],"summary":"Client Ip Source","description":"Which proxy headers reach the app and how many X-Forwarded-For entries they carry. No addresses are returned.\nUsed by the launch audit to key the rate limiter on the address the edge wrote, not one a caller forged.","operationId":"client_ip_source_api_client_ip_source_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feeds/confirm":{"get":{"tags":["Feeds"],"summary":"Confirm","operationId":"confirm_api_feeds_confirm_get","parameters":[{"name":"session_id","in":"query","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feeds/{slug}/entitlement":{"get":{"tags":["Feeds"],"summary":"Feed Entitlement","description":"USAGE TRANSPARENCY, machine-readable: what you bought, what you used, what remains, what the\nlast request cost, what THIS request would cost (projected, never metered), when usage resets,\nand the metering semantics (replay $0, failed $0, gate-blocked $0, success metered).","operationId":"feed_entitlement_api_feeds__slug__entitlement_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","title":"Resolution"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}},{"name":"bbox","in":"query","required":false,"schema":{"type":"string","title":"Bbox"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feeds/{slug}/changes":{"get":{"tags":["Feeds"],"summary":"Feed Changes","description":"WHAT CHANGED SINCE I LAST CHECKED. Incremental by cursor; the subscription's own watch filters\napply by default and can be narrowed per call. Metered per delivered change event; a dry run or a\nreplay of the same Idempotency-Key costs nothing.","operationId":"feed_changes_api_feeds__slug__changes_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"since","in":"query","required":false,"schema":{"type":"string","title":"Since"}},{"name":"signals","in":"query","required":false,"schema":{"type":"string","title":"Signals"}},{"name":"min_severity","in":"query","required":false,"schema":{"type":"string","title":"Min Severity"}},{"name":"cohorts","in":"query","required":false,"schema":{"type":"string","title":"Cohorts"}},{"name":"bbox","in":"query","required":false,"schema":{"type":"string","title":"Bbox"}},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"number","title":"Min Confidence"}},{"name":"min_join_confidence","in":"query","required":false,"schema":{"type":"number","title":"Min Join Confidence"}},{"name":"transitions_only","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Transitions Only"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Dry Run"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feeds/{slug}/usage":{"get":{"tags":["Feeds"],"summary":"Feed Usage","description":"This key's current-month usage against its tier quota. Records, not calls: failed, empty and\nreplayed pulls never count.","operationId":"feed_usage_api_feeds__slug__usage_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feeds/mine":{"get":{"tags":["Feeds"],"summary":"My Feeds","operationId":"my_feeds_api_feeds_mine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/feeds/{slug}":{"get":{"tags":["Feeds"],"summary":"Pull Feed","description":"Keyed pull at any resolution the tier allows. METERED in successful records: a pull that\nwould exceed the month's quota is refused (429) and counts nothing; a pull replayed with the same\nIdempotency-Key within 24h returns the stored result and counts nothing.","operationId":"pull_feed_api_feeds__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":90,"title":"Days"}},{"name":"resolution","in":"query","required":false,"schema":{"type":"string","default":"daily","title":"Resolution"}},{"name":"event_types","in":"query","required":false,"schema":{"type":"string","title":"Event Types"}},{"name":"bbox","in":"query","required":false,"schema":{"type":"string","title":"Bbox"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Dry Run"}},{"name":"hazard_class","in":"query","required":false,"schema":{"type":"string","title":"Hazard Class"}},{"name":"elevated_only","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Elevated Only"}},{"name":"min_transmission_km","in":"query","required":false,"schema":{"type":"number","title":"Min Transmission Km"}},{"name":"min_pipeline_km","in":"query","required":false,"schema":{"type":"number","title":"Min Pipeline Km"}},{"name":"min_bridges","in":"query","required":false,"schema":{"type":"integer","title":"Min Bridges"}},{"name":"min_exposure_index","in":"query","required":false,"schema":{"type":"number","title":"Min Exposure Index"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feeds/{sub_id}/cancel":{"post":{"tags":["Feeds"],"summary":"Cancel Feed","operationId":"cancel_feed_api_feeds__sub_id__cancel_post","parameters":[{"name":"sub_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/catalog.json":{"get":{"tags":["Contracts"],"summary":"Catalog","description":"Every listed pack with the numbers a buyer (human or agent) needs to decide, one line each.","operationId":"catalog_api_datapacks_catalog_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/datapacks/quote":{"post":{"tags":["Contracts"],"summary":"Quote","description":"AGENT PURCHASE, step one. \"I need current marine conditions, refreshed within 24h, budget $30\"\n-> ranked matches with the cheapest tier that fits, estimated records and cost, max-spend check,\nfreshness, quality, coverage, a sample, and exactly how to buy. Step two is POST /api/feeds/subscribe\n(or /api/datapacks/buy for the history tier) with the returned slug + tier.","operationId":"quote_api_datapacks_quote_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/answer":{"post":{"tags":["Contracts"],"summary":"Answer Route","description":"ANSWER PRODUCTS: ask the question; get the verdict, the evidence, the datasets and features\nused, and the exact purchase for continuous access. Computed live from the vault.","operationId":"answer_route_api_datapacks_answer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnswerIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/factory/gain":{"get":{"tags":["Contracts"],"summary":"Gain Route","description":"P3: information gain of candidate sources (why ingest X), with live measurement for ingested ones.","operationId":"gain_route_api_factory_gain_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/factory/status":{"get":{"tags":["Contracts"],"summary":"Factory Status","description":"Cross-source layer health: how much of the vault is normalized, how many cells, how fresh. Internal: it listed\nsource namespaces and pipeline internals to anonymous callers and ran status queries unthrottled (launch audit\n2026-09-12).","operationId":"factory_status_api_factory_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/factory/admin/sync":{"post":{"tags":["Contracts"],"summary":"Factory Sync","operationId":"factory_sync_api_factory_admin_sync_post","parameters":[{"name":"max_batches","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Max Batches"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/factory/discover":{"get":{"tags":["Contracts"],"summary":"Factory Discover","description":"DATA DISCOVERY ENGINE (admin): what can Atlas make from what it already has.","operationId":"factory_discover_api_factory_discover_get","parameters":[{"name":"propose","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Propose"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/{slug}/contract":{"get":{"tags":["Contracts"],"summary":"Contract","operationId":"contract_api_datapacks__slug__contract_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/{slug}/sample":{"get":{"tags":["Contracts"],"summary":"Sample","description":"The first rows of the REAL deliverable (k-anon applied where the pack is anonymized), free.","operationId":"sample_api_datapacks__slug__sample_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/{slug}/quality":{"get":{"tags":["Contracts"],"summary":"Quality History","description":"Assessment history (a series). Public: buyers can see the track record, not just today.","operationId":"quality_history_api_datapacks__slug__quality_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/admin/quality/run":{"post":{"tags":["Contracts"],"summary":"Admin Run Quality","operationId":"admin_run_quality_api_datapacks_admin_quality_run_post","parameters":[{"name":"slug","in":"query","required":false,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/datapacks/{slug}/lineage":{"get":{"tags":["Contracts"],"summary":"Lineage","description":"Product -> sources -> event types -> pipeline -> quality history -> customers -> deliveries.","operationId":"lineage_api_datapacks__slug__lineage_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/changes/preview":{"get":{"tags":["Contracts"],"summary":"Changes Preview","description":"Anonymous preview of the signal feed: the latest day's top change events, evidence included,\nno key, no metering. Enough to decide whether to buy a watch.","operationId":"changes_preview_api_changes_preview_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/llms.txt":{"get":{"tags":["Contracts"],"summary":"Llms Txt","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/.well-known/atlas-data-catalog.json":{"get":{"tags":["Contracts"],"summary":"Well Known","operationId":"well_known__well_known_atlas_data_catalog_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/product-evidence":{"get":{"tags":["Internal product evidence"],"summary":"Evidence Report","operationId":"evidence_report_api_admin_product_evidence_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/product-evidence/candidates":{"post":{"tags":["Internal product evidence"],"summary":"Assess Candidate","operationId":"assess_candidate_api_admin_product_evidence_candidates_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/demand":{"get":{"tags":["Internal demand evidence"],"summary":"Demand Route","operationId":"demand_route_api_admin_demand_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp":{"get":{"tags":["Agent discovery (MCP, agents.txt)"],"summary":"Mcp Get","operationId":"mcp_get_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["Agent discovery (MCP, agents.txt)"],"summary":"Mcp","operationId":"mcp_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/intelligence":{"get":{"tags":["Agent discovery (MCP, agents.txt)"],"summary":"Intelligence Page","description":"The human surface: problems first, then region -> question -> free result -> evidence -> quote -> API / watch.","operationId":"intelligence_page_intelligence_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/mcp-registry-auth":{"get":{"tags":["Agent discovery (MCP, agents.txt)"],"summary":"Mcp Registry Auth","operationId":"mcp_registry_auth__well_known_mcp_registry_auth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/mcp/server-card.json":{"get":{"tags":["Agent discovery (MCP, agents.txt)"],"summary":"Server Card","operationId":"server_card__well_known_mcp_server_card_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/agents.json":{"get":{"tags":["Agent discovery (MCP, agents.txt)"],"summary":"Agents Json","operationId":"agents_json_agents_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/agents.txt":{"get":{"tags":["Agent discovery (MCP, agents.txt)"],"summary":"Agents Txt","operationId":"agents_txt_agents_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/admin/market/pull":{"post":{"tags":["Market"],"summary":"Admin Market Pull","description":"Manual trigger — admin session OR the out-of-process backstop cron (header X-Backstop-Secret ==\nATLAS_BACKSTOP_SECRET). Lets a Render cron POST this to defeat an in-process loop freeze silently\nstarving the market feed (G1); without a secret branch a curl cron has no session and always 403s.","operationId":"admin_market_pull_api_admin_market_pull_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pubdata/pull":{"post":{"tags":["PublicData"],"summary":"Admin Pubdata Pull","description":"Manual trigger — admin session OR the out-of-process backstop cron (header X-Backstop-Secret ==\nATLAS_BACKSTOP_SECRET). The backstop lets a Render cron POST this to defeat an in-process loop freeze\nsilently starving the feed (G1); without a secret branch a curl cron has no session and always 403s.","operationId":"admin_pubdata_pull_api_admin_pubdata_pull_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/security/brand-scan":{"post":{"tags":["Security"],"summary":"Admin Brand Scan","operationId":"admin_brand_scan_api_admin_security_brand_scan_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/security/lookalikes":{"get":{"tags":["Security"],"summary":"Admin Lookalikes","operationId":"admin_lookalikes_api_admin_security_lookalikes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/fleet":{"get":{"summary":"Fleet","description":"Ping every service /health server-side (no CORS), concurrently so wall time stays\nbounded by the per-ping timeout rather than 10x it.","operationId":"fleet_api_admin_command_fleet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/freshness":{"get":{"summary":"Freshness","description":"Per vault source: event count, last-seen, and a stale flag — catches frozen feeds\n(e.g. market/fred manual pulls, the empty security surface).","operationId":"freshness_api_admin_command_freshness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/integrity":{"get":{"summary":"Integrity","description":"Live dedup / data-integrity audit of the vault. All-zero = healthy.","operationId":"integrity_api_admin_command_integrity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/customers":{"get":{"summary":"Customers","description":"Every account, role, plan and entitlement — folds the old /admin/users view in.","operationId":"customers_api_admin_command_customers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/datasold":{"get":{"summary":"Datasold","description":"The data marketplace: catalog, real purchases/revenue, and access usage.","operationId":"datasold_api_admin_command_datasold_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/pipeline":{"get":{"summary":"Pipeline","description":"Intel/screening pipeline health — OPTIONAL (needs DOSSIER_DATABASE_URL in env).","operationId":"pipeline_api_admin_command_pipeline_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/crons":{"get":{"summary":"Crons","description":"Real cron run status from Render — OPTIONAL (needs RENDER_API_KEY in env).","operationId":"crons_api_admin_command_crons_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/command/summary":{"get":{"summary":"Summary","description":"Top-line cockpit numbers for the header strip.","operationId":"summary_api_admin_command_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/email/provider_webhooks/sendgrid/{token}":{"post":{"tags":["Atlas Email Marketing"],"summary":"Sendgrid Events","description":"Ingest a batch of SendGrid events.\n\nReturns 200 for anything it managed to read. That is deliberate: SendGrid retries non-2xx\nresponses for up to 24 hours and then drops the batch, so a single malformed event must not\ncost us the good ones next to it — `record_provider_events` counts rejects instead. The one\nthing that DOES fail loudly is a bad path token, because that is not a delivery problem.","operationId":"sendgrid_events_email_provider_webhooks_sendgrid__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/email/inbound/{token}":{"post":{"tags":["Atlas Email Marketing"],"summary":"Inbound Reply","description":"SendGrid Inbound Parse: one human reply to something the rail sent.\n\nParse POSTs multipart form fields (`from`, `to`, `subject`, `text`, `html`, `headers`),\nnot JSON. Answers 200 for anything it can read, because Parse discards a message after\nrepeated non-2xx responses and a dropped reply is a lost lead.\n\nNot IMAP, deliberately: 23 of the estate's 25 Titan mailboxes refuse third-party login, so\na reply rail built on reading those boxes is one that mostly cannot run. This path needs no\nmailbox credential and cannot be switched off per-mailbox.","operationId":"inbound_reply_email_inbound__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/email/replies":{"get":{"tags":["Atlas Email Marketing"],"summary":"Admin Replies","description":"Open replies, leads first. This is the queue that says whether outreach is working.","operationId":"admin_replies_api_admin_email_replies_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/email/unsubscribe/{token}":{"get":{"tags":["Atlas Email Marketing"],"summary":"Unsubscribe Get","description":"The footer link.\n\nMARKETING mail links here without ?confirm, and this ACTS rather than showing a confirm button: some clients\nand security scanners prefetch links, and the failure modes are not symmetric for marketing: honouring an\nopt-out that a scanner triggered costs one address, while failing to honour a real one earns a spam complaint.\n\nTRANSACTIONAL mail (receipts, verification, password resets) links here WITH ?confirm=1. That asymmetry does not\nhold there: nobody is complaining about a receipt, and a scanner pre-fetching it must not unsubscribe the\ncustomer. So confirm=1 only renders a button, and the button POSTs.","operationId":"unsubscribe_get_email_unsubscribe__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"confirm","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Confirm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Atlas Email Marketing"],"summary":"Unsubscribe Post","description":"RFC 8058 one-click: the mail client POSTs here with no body and wants a plain 200. The confirm page posts\nwith ?html=1 and gets the human page back instead.","operationId":"unsubscribe_post_email_unsubscribe__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"html","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Html"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/email/signup":{"post":{"tags":["Atlas Email Marketing"],"summary":"Email Signup","description":"Public capture: a newsletter box, a waitlist, a \"request info\" button.\n\nBody: {email, brand?, first_name?, company?, list?, sequence?, source?}\n\nAlways answers the same shape whether or not the address was accepted, and never says\nwhether an address is already known. A signup form that reports \"already subscribed\" is an\naccount-enumeration oracle, and there is no product reason to give one.","operationId":"email_signup_api_email_signup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/email/doctor":{"get":{"tags":["Atlas Email Marketing"],"summary":"Admin Email Doctor","operationId":"admin_email_doctor_api_admin_email_doctor_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/email/campaigns":{"get":{"tags":["Atlas Email Marketing"],"summary":"Admin Campaigns","operationId":"admin_campaigns_api_admin_email_campaigns_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/email/campaign/{key}/send":{"post":{"tags":["Atlas Email Marketing"],"summary":"Admin Campaign Send","description":"Release one throttled batch of a campaign, then drain.\n\nBatched on purpose: there is no \"send to everyone right now\" button anywhere in this rail.\nA blast that goes out in bounded batches can be paused after the first hundred if the\nnumbers look wrong, and that has saved more sending reputations than any content review.","operationId":"admin_campaign_send_api_admin_email_campaign__key__send_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","title":"Limit"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Dry Run"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/email/campaign/{key}/build":{"post":{"tags":["Atlas Email Marketing"],"summary":"Admin Campaign Build","operationId":"admin_campaign_build_api_admin_email_campaign__key__build_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/email/campaign/{key}/pause":{"post":{"tags":["Atlas Email Marketing"],"summary":"Admin Campaign Pause","operationId":"admin_campaign_pause_api_admin_email_campaign__key__pause_post","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"summary":"Logout","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/me":{"get":{"summary":"Me","operationId":"me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/owner/me":{"get":{"summary":"Owner Me","operationId":"owner_me_api_owner_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/owner/assets":{"get":{"summary":"Owner Assets","operationId":"owner_assets_api_owner_assets_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/owner/onboarding":{"get":{"summary":"Owner Onboarding","operationId":"owner_onboarding_api_owner_onboarding_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/onboarding/{onboarding_id}/approve":{"post":{"summary":"Approve Onboarding","operationId":"approve_onboarding_api_admin_onboarding__onboarding_id__approve_post","parameters":[{"name":"onboarding_id","in":"path","required":true,"schema":{"type":"string","title":"Onboarding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"307":{"description":"Successful Response"}}}},"/store":{"get":{"summary":"Store Redirect","operationId":"store_redirect_store_get","responses":{"307":{"description":"Successful Response"}}}},"/products":{"get":{"summary":"Products Redirect","operationId":"products_redirect_products_get","responses":{"307":{"description":"Successful Response"}}}},"/admin":{"get":{"summary":"Admin Page","operationId":"admin_page_admin_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/command":{"get":{"summary":"Command Page","operationId":"command_page_command_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/legacy":{"get":{"summary":"Admin Legacy Page","operationId":"admin_legacy_page_admin_legacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/users":{"get":{"summary":"Admin Users Page","operationId":"admin_users_page_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/vault":{"get":{"summary":"Admin Vault Page","operationId":"admin_vault_page_admin_vault_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vault":{"get":{"summary":"Vault Page","operationId":"vault_page_vault_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/owner":{"get":{"summary":"Owner Page","operationId":"owner_page_owner_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/login":{"get":{"summary":"Admin Login Redirect","operationId":"admin_login_redirect_admin_login_get","responses":{"307":{"description":"Successful Response"}}}},"/onboard":{"get":{"summary":"Onboard Redirect","operationId":"onboard_redirect_onboard_get","responses":{"307":{"description":"Successful Response"}}}},"/legal/privacy":{"get":{"summary":"Privacy Redirect","operationId":"privacy_redirect_legal_privacy_get","responses":{"307":{"description":"Successful Response"}}}},"/legal/terms":{"get":{"summary":"Terms Redirect","operationId":"terms_redirect_legal_terms_get","responses":{"307":{"description":"Successful Response"}}}},"/api/atlas/onboarding":{"post":{"summary":"Submit Onboarding","operationId":"submit_onboarding_api_atlas_onboarding_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding":{"get":{"summary":"List Onboarding","operationId":"list_onboarding_api_admin_onboarding_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"submitted","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/{onboarding_id}":{"get":{"summary":"Get Onboarding","operationId":"get_onboarding_api_admin_onboarding__onboarding_id__get","parameters":[{"name":"onboarding_id","in":"path","required":true,"schema":{"type":"string","title":"Onboarding Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/onboarding/{onboarding_id}/status":{"post":{"summary":"Set Onboarding Status","operationId":"set_onboarding_status_api_admin_onboarding__onboarding_id__status_post","parameters":[{"name":"onboarding_id","in":"path","required":true,"schema":{"type":"string","title":"Onboarding Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vault/ingest":{"post":{"summary":"Vault Ingest","operationId":"vault_ingest_api_vault_ingest_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vault_ingest_api_vault_ingest_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vault/events":{"post":{"summary":"Vault Events Ingest","description":"Machine-to-machine structured event ingest — the destination for the\nproject -> Dossier -> Atlas chain. HMAC-authenticated per source (no human\nsession). The transport source (header) authenticates the push; the event's\nown source_system (body) records the true origin. Idempotent on event_id.","operationId":"vault_events_ingest_api_vault_events_post","parameters":[{"name":"X-Atlas-Source","in":"header","required":false,"schema":{"type":"string","title":"X-Atlas-Source"}},{"name":"X-Atlas-Timestamp","in":"header","required":false,"schema":{"type":"string","title":"X-Atlas-Timestamp"}},{"name":"X-Atlas-Signature","in":"header","required":false,"schema":{"type":"string","title":"X-Atlas-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vault/feed":{"get":{"summary":"Vault Feed Pull","description":"Per-product data distribution — the \"funnel out\" half of the chain. A product\nauthenticates as ITSELF (HMAC-signed, empty-body GET) and pulls the vault events it\nconsumes: its OWN source_system events (leads it was routed + lifecycle it emitted)\nPLUS the cross-product data streams its surface subscribes to (energy / grid / solar /\nmarine / market / geophysical / ...). Routing comes from atlas_surfaces.feed_selectors\n(one source of truth with the dashboards). Cursor on created_at (ascending); the client\ndedupes on event_id, so created_at>=since never skips a same-timestamp row.","operationId":"vault_feed_pull_api_vault_feed_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"string","default":"","title":"Since"}},{"name":"since_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Since Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Kind"}},{"name":"include_own","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Include Own"}},{"name":"X-Atlas-Source","in":"header","required":false,"schema":{"type":"string","title":"X-Atlas-Source"}},{"name":"X-Atlas-Timestamp","in":"header","required":false,"schema":{"type":"string","title":"X-Atlas-Timestamp"}},{"name":"X-Atlas-Signature","in":"header","required":false,"schema":{"type":"string","title":"X-Atlas-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/vault/events":{"get":{"summary":"List Vault Events","operationId":"list_vault_events_api_admin_vault_events_get","parameters":[{"name":"source_system","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Source System"}},{"name":"event_type","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Event Type"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/vault/summary":{"get":{"summary":"Vault Summary","description":"Cross-product roll-up for the Vault Explorer: totals + per-source + per-type.","operationId":"vault_summary_api_admin_vault_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/vault/events/{event_pk}":{"get":{"summary":"Vault Event Detail","operationId":"vault_event_detail_api_admin_vault_events__event_pk__get","parameters":[{"name":"event_pk","in":"path","required":true,"schema":{"type":"string","title":"Event Pk"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/vault/objects":{"get":{"summary":"List Vault Objects","operationId":"list_vault_objects_api_admin_vault_objects_get","parameters":[{"name":"source_key","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Source Key"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/vault/objects/{object_id}/download":{"get":{"summary":"Download Vault Object","operationId":"download_vault_object_api_admin_vault_objects__object_id__download_get","parameters":[{"name":"object_id","in":"path","required":true,"schema":{"type":"string","title":"Object Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/owners":{"post":{"summary":"Create Owner","operationId":"create_owner_api_admin_owners_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Owners","operationId":"list_owners_api_admin_owners_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/assets":{"post":{"summary":"Create Asset","operationId":"create_asset_api_admin_assets_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"List Assets","operationId":"list_assets_api_admin_assets_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/owner/docs":{"get":{"summary":"Owner Docs","operationId":"owner_docs_api_owner_docs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/owner/docs/{doc_id}/download":{"get":{"summary":"Owner Doc Download","operationId":"owner_doc_download_api_owner_docs__doc_id__download_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docs":{"get":{"summary":"Admin Docs","operationId":"admin_docs_api_admin_docs_get","parameters":[{"name":"owner_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Owner Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/docs/{doc_id}/download":{"get":{"summary":"Admin Doc Download","operationId":"admin_doc_download_api_admin_docs__doc_id__download_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"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":{}}}}}}}},"components":{"schemas":{"AnswerIn":{"properties":{"question":{"type":"string","title":"Question"},"bbox":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Bbox"}},"type":"object","required":["question"],"title":"AnswerIn"},"Body_vault_ingest_api_vault_ingest_post":{"properties":{"source_key":{"type":"string","title":"Source Key"},"org_id":{"type":"string","title":"Org Id","default":""},"tenant_id":{"type":"string","title":"Tenant Id","default":""},"schema_version":{"type":"string","title":"Schema Version","default":""},"manifest_json":{"type":"string","title":"Manifest Json","default":""},"bundle":{"type":"string","format":"binary","title":"Bundle"}},"type":"object","required":["source_key","bundle"],"title":"Body_vault_ingest_api_vault_ingest_post"},"BuyIn":{"properties":{"pack_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Id"},"pack_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pack Slug"},"tier":{"type":"string","title":"Tier","default":"history"}},"type":"object","title":"BuyIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PackIn":{"properties":{"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"owner":{"type":"string","title":"Owner","default":"atlas"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"event_type_prefix":{"items":{"type":"string"},"type":"array","title":"Event Type Prefix","default":[]},"source_system":{"items":{"type":"string"},"type":"array","title":"Source System","default":[]},"metrics":{"items":{"type":"string"},"type":"array","title":"Metrics","default":[]},"price_usd":{"type":"number","title":"Price Usd","default":0},"monthly_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Usd"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","default":"custom"},"anonymize":{"type":"boolean","title":"Anonymize","default":true},"methodology":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Methodology"},"license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"License"},"status":{"type":"string","title":"Status","default":"draft"}},"type":"object","required":["slug","title"],"title":"PackIn","description":"A product (or Atlas) curating + publishing a sellable pack from the vault."},"QuoteIn":{"properties":{"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"max_age_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Age Hours"},"budget_usd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Budget Usd"},"resolution":{"type":"string","title":"Resolution","default":"daily"},"window_days":{"type":"integer","title":"Window Days","default":30},"records":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Records"},"mode":{"type":"string","title":"Mode","default":"dataset"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region"},"bbox":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Bbox"},"signals":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Signals"},"min_severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Min Severity"},"cohorts":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cohorts"},"min_confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Confidence"}},"type":"object","title":"QuoteIn","description":"What an agent needs. mode = dataset (default) | question | watch. Any of text/keywords/category;\nfreshness and budget are the hard limits; region = a named region or bbox [s,w,n,e]."},"SubscribeIn":{"properties":{"slug":{"type":"string","title":"Slug"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"tier":{"type":"string","title":"Tier","default":"api"},"mode":{"type":"string","title":"Mode","default":"data"},"watch":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Watch"}},"type":"object","required":["slug"],"title":"SubscribeIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}