{"openapi":"3.1.0","info":{"title":"Sovereign AI API","version":"2.0.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots Txt","operationId":"robots_txt_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Landing Page","operationId":"landing_page__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/v1/chat/completions":{"post":{"summary":"Chat Completions","operationId":"chat_completions_api_v1_chat_completions_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/calculate_fibonacci/{limit}":{"post":{"summary":"Calculate Fibonacci","operationId":"calculate_fibonacci_calculate_fibonacci__limit__post","parameters":[{"name":"limit","in":"path","required":true,"schema":{"type":"integer","title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/prime/check":{"post":{"summary":"Prime Check","description":"Product: Prime Check API\nCheck if a number is prime. Accepts JSON body: {\"number\": <int>}\nBounded input to prevent DoS: number must be between -10**15 and 10**15.","operationId":"prime_check_api_v1_prime_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/gcd":{"post":{"summary":"Sandbox Gcd","operationId":"sandbox_gcd_api_v1_sequence_gcd_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/odds":{"post":{"summary":"Sequence Odds","operationId":"sequence_odds_api_v1_sequence_odds_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/even":{"post":{"summary":"Sequence Even","operationId":"sequence_even_api_v1_sequence_even_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/prime":{"post":{"summary":"Sequence Prime","operationId":"sequence_prime_api_v1_sequence_prime_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/text/summarize":{"post":{"summary":"Summarize Sequence","description":"Generate a summary of a given text using the GLM chat model.","operationId":"summarize_sequence_api_v1_text_summarize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/factorize":{"post":{"summary":"Factorize Sequence","operationId":"factorize_sequence_api_v1_sequence_factorize_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/permutations":{"post":{"summary":"Sequence Permutations","operationId":"sequence_permutations_api_v1_sequence_permutations_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/prime_pairs":{"post":{"summary":"Sequence Prime Pairs","description":"Generate pairs of prime numbers (p, p+2) up to a specified limit.","operationId":"sequence_prime_pairs_api_v1_sequence_prime_pairs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/harmonic":{"post":{"summary":"Sequence Harmonic","operationId":"sequence_harmonic_api_v1_sequence_harmonic_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/palindrome":{"post":{"summary":"Sequence Palindrome","description":"Check if a given number is a palindrome.","operationId":"sequence_palindrome_api_v1_sequence_palindrome_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/fibonacci_pair":{"post":{"summary":"Fibonacci Pair","operationId":"fibonacci_pair_api_v1_sequence_fibonacci_pair_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/collatz_conjecture":{"post":{"summary":"Collatz Conjecture","operationId":"collatz_conjecture_api_v1_sequence_collatz_conjecture_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/totient":{"post":{"summary":"Totient Handler","operationId":"totient_handler_api_v1_sequence_totient_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/mersenne":{"post":{"summary":"Mersenne Check","description":"Check if 2^p - 1 is a Mersenne prime for a given exponent p.\nExpects JSON body: {\"p\": <int>}","operationId":"mersenne_check_api_v1_sequence_mersenne_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/catalan":{"post":{"summary":"Catalan Number","description":"Calculate the nth Catalan number. C(n) = (2n)! / ((n+1)! * n!)","operationId":"catalan_number_api_v1_sequence_catalan_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/handshake":{"post":{"summary":"Sequence Handshake","description":"Generate a random handshake sequence (numbers and symbols) for secure connections.\nProduct: Secure Handshake Sequence Generator API.","operationId":"sequence_handshake_api_v1_sequence_handshake_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/hamming_weight":{"post":{"summary":"Hamming Weight Endpoint","description":"Calculate the Hamming weight (number of 1 bits) of a non-negative integer.","operationId":"hamming_weight_endpoint_api_v1_sequence_hamming_weight_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sequence/hexadecimal":{"post":{"summary":"Hexadecimal Endpoint","operationId":"hexadecimal_endpoint_api_v1_sequence_hexadecimal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/web/scrape":{"post":{"summary":"Web Scrape","description":"Scrape a URL via Firecrawl and return clean Markdown.\nPriced at $0.01 (Firecrawl's own list price is ~$0.005-0.008/credit,\n1 credit per basic scrape, so this covers cost with margin -- adjust\nif the Firecrawl plan/pricing changes).","operationId":"web_scrape_api_v1_web_scrape_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector/pinecone/upsert":{"post":{"summary":"Pinecone Upsert","description":"Upsert vectors into an existing Pinecone index via the control+data plane REST API.","operationId":"pinecone_upsert_api_v1_vector_pinecone_upsert_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector/pinecone/query":{"post":{"summary":"Pinecone Query","description":"Query an existing Pinecone index for nearest neighbors via the REST API.","operationId":"pinecone_query_api_v1_vector_pinecone_query_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector/qdrant/upsert":{"post":{"summary":"Qdrant Upsert","description":"Upsert points into a Qdrant collection, creating the collection on first use.","operationId":"qdrant_upsert_api_v1_vector_qdrant_upsert_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/vector/qdrant/query":{"post":{"summary":"Qdrant Query","description":"Query a Qdrant collection for nearest points to a given vector.","operationId":"qdrant_query_api_v1_vector_qdrant_query_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/repo/github/file":{"post":{"summary":"Github File","description":"Fetch a file's contents from a GitHub repository at a given ref.","operationId":"github_file_api_v1_repo_github_file_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sequence/roman":{"post":{"summary":"Sequence Roman","operationId":"sequence_roman_api_v1_sequence_roman_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/code/exec":{"post":{"summary":"Code Exec","description":"Execute Python code in a real, isolated E2B cloud sandbox. Priced at\n$0.02 to cover E2B's per-second sandbox runtime cost with margin --\nadjust if E2B's pricing or typical execution time changes materially.","operationId":"code_exec_api_v1_code_exec_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/email/send":{"post":{"summary":"Email Send","description":"Send an email via Resend. The 'from' address is fixed to Resend's\nshared sandbox sender (onboarding@resend.dev) rather than customer-\ncontrolled, to prevent spoofing/impersonation. NOTE: until a sending\ndomain is verified on this Resend account (resend.com/domains), the\nsandbox sender can only deliver to the account owner's own verified\nemail -- any other recipient gets Resend's real 403 back, surfaced\nhere as-is. Once a domain is verified, this same code starts working\nfor arbitrary recipients with no changes needed.","operationId":"email_send_api_v1_email_send_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/qrcode":{"post":{"summary":"Generate Qrcode","description":"Generate a real, scannable QR code as SVG using the `qrcode` library\n(pure Python, no Pillow/raster dependency needed for SVG output) --\nverified against a real decoder (OpenCV's QRCodeDetector) round-trip\nbefore this replaced an earlier version that only drew the input text\nas a label, which was not an actual QR code.","operationId":"generate_qrcode_api_v1_qrcode_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"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"}}}}