{"openapi":"3.1.0","info":{"title":"Semantic Integrity Gateway","version":"0.4.0"},"paths":{"/":{"get":{"summary":"Root","description":"Unauthenticated service banner -- lets load balancers / uptime\nchecks / a bare curl to the domain root get a 200 instead of the\nFastAPI-default 404, without exposing anything sensitive.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Root  Get"}}}}}}},"/v1/pricing":{"get":{"summary":"Pricing Endpoint","description":"Public, unauthenticated: current tier prices. BTC price is the base\nprice; the response reports the current fiat/credit-card surcharge.","operationId":"pricing_endpoint_v1_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Pricing Endpoint V1 Pricing Get"}}}}}}},"/v1/quote":{"post":{"summary":"Quote Endpoint","description":"Public, unauthenticated: build a payment quote for a tier+currency.\nNever claims a payment path is ready unless it actually is -- see\npricing.py docstring.","operationId":"quote_endpoint_v1_quote_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Quote Endpoint V1 Quote Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/version":{"get":{"summary":"Version","operationId":"version_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Version Version Get"}}}}}}},"/privacy":{"get":{"summary":"Privacy","operationId":"privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Privacy Privacy Get"}}}}}}},"/v1/audit/stacks":{"get":{"tags":["Free reference tokenizer audit"],"summary":"Audit Stacks","operationId":"audit_stacks_v1_audit_stacks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/audit":{"post":{"tags":["Free reference tokenizer audit"],"summary":"Audit Endpoint","operationId":"audit_endpoint_v1_audit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeAuditRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/normalize":{"post":{"summary":"Normalize","operationId":"normalize_v1_normalize_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NormalizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Normalize V1 Normalize Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fuse":{"post":{"summary":"Fuse Endpoint","operationId":"fuse_endpoint_v1_fuse_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/leads":{"post":{"summary":"Leads Endpoint","description":"Public, unauthenticated lead capture for the landing page CTA. No\nexternal email service is wired up yet, so this durably persists the\nlead to disk (append-only JSONL) rather than silently discarding it or\npretending an email was sent that wasn't.","operationId":"leads_endpoint_v1_leads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Leads Endpoint V1 Leads Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/delivery-models":{"get":{"summary":"Delivery Models Endpoint","description":"Public, unauthenticated: the three ENTERPRISE software-delivery models.\n\nThis is a catalogue, not a store. Every entry carries\navailability='by_agreement_scoped', self_service=False and\nprice_is_indicative=True, so no client can mistake it for a purchasable\nSKU. Nothing here is provisioned by this API -- the companion\nPOST /v1/delivery-interest exists purely so a buyer can TELL US which\nmodel they want, and a human follows up.","operationId":"delivery_models_endpoint_v1_delivery_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Delivery Models Endpoint V1 Delivery Models Get"}}}}}}},"/v1/delivery-interest":{"post":{"summary":"Delivery Interest Endpoint","description":"Record which enterprise delivery model a buyer wants.\n\nHONEST BY CONSTRUCTION:\n  * Issues no API key and starts no provisioning.\n  * Returns no order id, no invoice, no download link, because none exist.\n  * Persists append-only to disk so a lead is never silently dropped just\n    because no CRM/email service is wired up yet.\n  * The response `next_step` says a human will reply -- it never claims an\n    automated fulfilment that does not exist.","operationId":"delivery_interest_endpoint_v1_delivery_interest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryInterestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Delivery Interest Endpoint V1 Delivery Interest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/btc":{"post":{"summary":"Create Btc Order","description":"Create a real on-chain BTC invoice: a fresh, never-reused receiving\naddress from our own node, at the live BTC-price-based amount.","operationId":"create_btc_order_v1_checkout_btc_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Btc Order V1 Checkout Btc Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/btc/{order_id}/qr.svg":{"get":{"summary":"Btc Order Qr","description":"Scannable QR for an existing order, as inline-able SVG.\n\nEncodes a BIP-21 URI so any wallet prefills BOTH address and amount --\na customer who scans this cannot underpay by mistyping the amount.\n\nThe scheme is deliberately LOWERCASE (\"bitcoin:\"): some wallets (Strike\namong them) reject an uppercased URI outright, even though QR alphanumeric\nmode would compress better with uppercase. Correctness over density.","operationId":"btc_order_qr_v1_checkout_btc__order_id__qr_svg_get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/btc/{order_id}":{"get":{"summary":"Check Btc Order","operationId":"check_btc_order_v1_checkout_btc__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Check Btc Order V1 Checkout Btc  Order Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/lightning":{"post":{"summary":"Create Lightning Order","description":"Mint a real mainnet BOLT11 invoice for the requested tier.","operationId":"create_lightning_order_v1_checkout_lightning_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOrderRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Lightning Order V1 Checkout Lightning Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/card/status":{"get":{"summary":"Card Status","description":"Is a card/PayPal rail actually live for this tier?\n\nThe frontend uses this to decide between a real checkout button and the\nemail-capture fallback. It reports only what is genuinely configured -- with\nno processor credentials on disk this returns configured=False, which is the\nhonest current state.","operationId":"card_status_v1_checkout_card_status_get","parameters":[{"name":"tier","in":"query","required":false,"schema":{"type":"string","default":"growth","title":"Tier"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Card Status V1 Checkout Card Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/lightning/capacity":{"get":{"summary":"Lightning Capacity","description":"Report whether Lightning can actually receive a given tier RIGHT NOW.\n\nThe frontend calls this before showing the Lightning option, so a customer\nis never offered a rail that will fail on click. Inbound liquidity is a\nlive property of the node, not a static config value.","operationId":"lightning_capacity_v1_checkout_lightning_capacity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Lightning Capacity V1 Checkout Lightning Capacity Get"}}}}}}},"/v1/checkout/lightning/{payment_hash}/qr.svg":{"get":{"summary":"Lightning Order Qr","description":"Scannable QR for a Lightning invoice.\n\nThe BOLT11 string already encodes the amount, so there is no underpayment\nrisk. Scheme is lowercase \"lightning:\" -- Strike (and others) reject an\nuppercased URI, so we take the QR size hit rather than break wallets.","operationId":"lightning_order_qr_v1_checkout_lightning__payment_hash__qr_svg_get","parameters":[{"name":"payment_hash","in":"path","required":true,"schema":{"type":"string","title":"Payment Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/lightning/{payment_hash}":{"get":{"summary":"Check Lightning Order","description":"Poll settle state. Issues the API key exactly once, on first settle.","operationId":"check_lightning_order_v1_checkout_lightning__payment_hash__get","parameters":[{"name":"payment_hash","in":"path","required":true,"schema":{"type":"string","title":"Payment Hash"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Check Lightning Order V1 Checkout Lightning  Payment Hash  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/unsubscribe":{"get":{"summary":"Unsubscribe Page","operationId":"unsubscribe_page_unsubscribe_get","parameters":[{"name":"e","in":"query","required":false,"schema":{"type":"string","default":"","title":"E"}},{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Unsubscribe Oneclick","description":"RFC 8058 one-click target. Mail clients POST here with a body of\nList-Unsubscribe=One-Click. Read the raw body rather than using\nfastapi.Form, which hard-requires python-multipart at import time and will\ncrash the whole app on startup if it is absent.\n\nMUST return 2xx even on a bad token -- a non-2xx makes the mail client\nreport a broken unsubscribe, which hurts placement more than the opt-out\nitself costs us.","operationId":"unsubscribe_oneclick_unsubscribe_post","parameters":[{"name":"e","in":"query","required":false,"schema":{"type":"string","default":"","title":"E"}},{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/c/{token}":{"get":{"summary":"Click Redirect","description":"Log the click, then 302 to the real destination.\n\n302 not 301: a permanently-cached redirect means the browser never hits us\nagain and every repeat visit becomes invisible.","operationId":"click_redirect_c__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"d","in":"query","required":false,"schema":{"type":"string","default":"/","title":"D"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/checkout/card/webhook":{"post":{"summary":"Card Webhook","description":"Authoritative settlement for the card rail.\n\nSignature verification is MANDATORY (stripe.Webhook.construct_event).\nWithout it anyone could POST a fake checkout.session.completed and mint\nthemselves a paid API key, so a missing secret FAILS CLOSED with 503 --\nit never falls back to trusting the body.\n\nIdempotent by both event id and checkout-session id: Stripe retries until\nit sees a 2xx and an operator can hit \"Resend\", so a replay must return\n200 without issuing a second key.","operationId":"card_webhook_v1_checkout_card_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Card Webhook V1 Checkout Card Webhook Post"}}}}}}},"/v1/checkout/card/webhook/status":{"get":{"summary":"Card Webhook Status","description":"Secret-free report of whether card settlement can actually run.","operationId":"card_webhook_status_v1_checkout_card_webhook_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Card Webhook Status V1 Checkout Card Webhook Status Get"}}}}}}},"/v1/checkout/card/{session_id}":{"get":{"summary":"Check Card Order","description":"Success-page pickup for a card order.\n\nThe webhook is authoritative but its response goes to STRIPE, not to the\nbuyer -- and api_keys only persists the hash. So the raw key is parked for\nexactly ONE retrieval here. Without this the paying customer sees a\nsuccess page with no credential.","operationId":"check_card_order_v1_checkout_card__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Check Card Order V1 Checkout Card  Session Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/card/success":{"get":{"summary":"Card Success Page","description":"One-time reveal of the key the webhook minted for a paid session.","operationId":"card_success_page_card_success_get","parameters":[{"name":"session_id","in":"query","required":false,"schema":{"type":"string","default":"","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"}}}}}}}},"components":{"schemas":{"CreateOrderRequest":{"properties":{"tier":{"type":"string","title":"Tier","description":"one of: developer, growth, enterprise"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"source":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Source"},"segment":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Segment"},"campaign":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Campaign"},"event_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Event Id"}},"type":"object","required":["tier"],"title":"CreateOrderRequest"},"DeliveryInterestRequest":{"properties":{"email":{"type":"string","maxLength":320,"title":"Email"},"delivery_model":{"type":"string","title":"Delivery Model","description":"one of: dedicated_byoc, self_hosted_appliance, oem_embedded"},"company":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company"},"cloud":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Cloud","description":"aws | gcp | azure | on_prem | other"},"monthly_chars":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Monthly Chars","description":"rough monthly character volume"},"timeline":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Timeline","description":"evaluating | this_quarter | next_quarter | urgent"},"compliance":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Compliance","description":"e.g. HIPAA, FedRAMP, SOC2, air-gap required"},"message":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Message"},"source":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Source"},"segment":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Segment"},"campaign":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Campaign"},"event_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Event Id"}},"type":"object","required":["email","delivery_model"],"title":"DeliveryInterestRequest","description":"Structured 'which delivery model do you want' capture.\n\nDeliberately narrow. We ask only what we need in order to scope the\nengagement and route it to a human; we do NOT collect anything that would\nimply we are about to provision or bill something."},"FreeAuditRequest":{"properties":{"text":{"anyOf":[{"type":"string","maxLength":100000},{"type":"null"}],"title":"Text"},"records":{"anyOf":[{"items":{"type":"string","maxLength":20000},"type":"array","maxItems":500},{"type":"null"}],"title":"Records"},"format":{"type":"string","enum":["auto","lines","csv","jsonl","json"],"title":"Format","default":"auto"},"stack":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Stack"},"vertical":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Vertical"},"company":{"type":"string","maxLength":200,"title":"Company","default":""},"corpus_records_total":{"anyOf":[{"type":"integer","maximum":10000000000.0,"minimum":0.0},{"type":"null"}],"title":"Corpus Records Total"},"monthly_queries":{"anyOf":[{"type":"integer","maximum":10000000000.0,"minimum":0.0},{"type":"null"}],"title":"Monthly Queries"},"months_running":{"anyOf":[{"type":"number","maximum":600.0,"minimum":0.0},{"type":"null"}],"title":"Months Running"},"aov_usd":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Aov Usd"},"ticket_cost_usd":{"anyOf":[{"type":"number","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Ticket Cost Usd"},"use_case":{"type":"string","enum":["search","ecommerce","support","rag","both"],"title":"Use Case","default":"both"},"surface":{"type":"string","enum":["records","queries"],"title":"Surface","default":"records"},"include_html":{"type":"boolean","title":"Include Html","default":true},"include_text":{"type":"boolean","title":"Include Text","default":false}},"additionalProperties":false,"type":"object","title":"FreeAuditRequest"},"FuseDoc":{"properties":{"id":{"type":"string","title":"Id","description":"Caller-assigned document id, echoed back in results."},"text":{"type":"string","title":"Text","description":"Document text used for BM25 and (optionally) embedding."},"dense_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Dense Score","description":"Pre-computed dense similarity score for this doc against the query, from the caller's own vector DB / embedding call. If omitted for ANY doc in the request, the proxy will compute dense scores itself for ALL docs (embed mode) using `embed_model`."}},"type":"object","required":["id","text"],"title":"FuseDoc"},"FuseRequest":{"properties":{"query":{"type":"string","title":"Query","description":"The user query text."},"docs":{"items":{"$ref":"#/components/schemas/FuseDoc"},"type":"array","minItems":1,"title":"Docs","description":"Candidate documents to re-rank."},"method":{"type":"string","title":"Method","description":"Fusion method: 'maxnorm' (recommended default) or 'rrf' (baseline, for comparison only).","default":"maxnorm"},"tokenizer":{"type":"string","title":"Tokenizer","description":"BM25 tokenizer: 'ws' (whitespace/alnum, latin scripts) or 'ngram' (char bigrams, CJK).","default":"ws"},"embed_model":{"type":"string","title":"Embed Model","description":"sentence-transformers model to use if dense scores must be computed server-side.","default":"BAAI/bge-base-en-v1.5"},"entity_map":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Entity Map","description":"Optional entity-substitution dictionary (surface form -> plain-word/latin substitute), applied to both query and doc text before embedding (embed mode only)."},"top_k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Top K","description":"If set, truncate results to top_k after fusion."}},"type":"object","required":["query","docs"],"title":"FuseRequest"},"FuseResponse":{"properties":{"query":{"type":"string","title":"Query"},"method":{"type":"string","title":"Method"},"tokenizer":{"type":"string","title":"Tokenizer"},"dense_source":{"type":"string","title":"Dense Source"},"results":{"items":{"$ref":"#/components/schemas/RankedDoc"},"type":"array","title":"Results"}},"type":"object","required":["query","method","tokenizer","dense_source","results"],"title":"FuseResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LeadRequest":{"properties":{"email":{"type":"string","maxLength":320,"title":"Email"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"},"message":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Message"},"source":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Source"},"segment":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Segment"},"campaign":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Campaign"},"event_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Event Id"}},"type":"object","required":["email"],"title":"LeadRequest"},"NormalizeRequest":{"properties":{"text":{"type":"string","maxLength":100000,"title":"Text"},"mode":{"type":"string","title":"Mode","default":"augment"},"chinese_glosses":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Chinese Glosses"},"contextual":{"type":"boolean","title":"Contextual","default":true}},"type":"object","required":["text"],"title":"NormalizeRequest"},"QuoteRequest":{"properties":{"tier":{"type":"string","title":"Tier","description":"one of: developer, growth, enterprise"},"currency":{"type":"string","title":"Currency","description":"'btc' or 'fiat'"}},"type":"object","required":["tier","currency"],"title":"QuoteRequest"},"RankedDoc":{"properties":{"id":{"type":"string","title":"Id"},"text":{"type":"string","title":"Text"},"dense_score":{"type":"number","title":"Dense Score"},"bm25_score":{"type":"number","title":"Bm25 Score"},"fused_score":{"type":"number","title":"Fused Score"},"rank":{"type":"integer","title":"Rank"}},"type":"object","required":["id","text","dense_score","bm25_score","fused_score","rank"],"title":"RankedDoc"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}