{"openapi":"3.1.0","info":{"title":"Kompair API","version":"1.0.0","description":"What a developer stack costs at your scale. Every price cites the pricing page or official SKU it came from."},"servers":[{"url":"https://kompair.dev"}],"components":{"schemas":{},"parameters":{}},"paths":{"/v1/auth/register":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"name":{"type":"string","minLength":1,"maxLength":100}},"required":["email","name"]}}}},"responses":{"201":{"description":"API key created. Raw key is shown only this once.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"rateLimit":{"type":"integer"},"emailVerified":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"key":{"type":"string"}},"required":["id","name","email","rateLimit","emailVerified","createdAt","key"]}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/auth/verify":{"get":{"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"token","in":"query"}],"responses":{"200":{"description":"Email verified successfully","content":{"text/html":{"schema":{"type":"string"}}}},"400":{"description":"Invalid or expired token","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/auth/me":{"get":{"responses":{"200":{"description":"Current API key account info","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"tier":{"type":"string"},"rateLimit":{"type":"integer"},"billingPortalUrl":{"type":"string","nullable":true,"format":"uri"},"createdAt":{"type":"string","format":"date-time"}},"required":["name","email","tier","rateLimit","billingPortalUrl","createdAt"]}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/auth/checkout":{"post":{"responses":{"200":{"description":"Polar checkout session URL","content":{"application/json":{"schema":{"type":"object","properties":{"checkoutUrl":{"type":"string","format":"uri"}},"required":["checkoutUrl"]}}}},"401":{"description":"Not authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"409":{"description":"Already on Pro tier","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}},"503":{"description":"Billing service unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/health":{"get":{"responses":{"200":{"description":"Health check","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"timestamp":{"type":"string"}},"required":["status","timestamp"]}}}}}}},"/v1/catalog":{"get":{"summary":"Every published offering with its price model, outbound links and today's exchange rates","responses":{"200":{"description":"The published catalog","content":{"application/json":{"schema":{"type":"object","properties":{"offerings":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"name":{"type":"string","minLength":1},"provider":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"name":{"type":"string","minLength":1}},"required":["slug","name"]},"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"type":{"type":"string","enum":["saas","hyperscaler","self_hosted"]},"url":{"type":"string","format":"uri"},"pricingUrl":{"type":"string","format":"uri"},"pricing":{"type":"array","items":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"string","enum":["us-east","us-west","eu-west","eu-central","uk","ap-southeast"]},"minItems":1},"currency":{"type":"string","enum":["USD","EUR","GBP"]},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"name":{"type":"string","minLength":1},"monthly":{"type":"object","nullable":true,"properties":{"amount":{"type":"number","minimum":0},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["amount","citation"]},"annual":{"type":"object","nullable":true,"properties":{"amount":{"type":"number","minimum":0},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["amount","citation"]},"customPricing":{"type":"boolean","default":false},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"mode":{"type":"string","enum":["per_unit","graduated","volume"]},"unitAmount":{"type":"number","nullable":true,"minimum":0,"default":null},"brackets":{"type":"array","items":{"type":"object","properties":{"upTo":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true},"unitAmount":{"type":"number","minimum":0},"flatAmount":{"type":"number","minimum":0,"default":0}},"required":["upTo","unitAmount"]},"default":[]},"packageSize":{"type":"number","minimum":0,"exclusiveMinimum":true,"default":1},"rounding":{"type":"string","enum":["up","exact"],"default":"exact"},"included":{"type":"number","minimum":0,"default":0},"includedCitation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]},{"nullable":true}],"default":null},"scope":{"type":"string","enum":["account","project"],"default":"account"},"minimum":{"type":"number","nullable":true,"minimum":0,"default":null},"cap":{"type":"number","nullable":true,"minimum":0,"default":null},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["id","meter","mode","citation"]},"default":[]},"limits":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"max":{"type":"number","minimum":0},"per":{"type":"string","enum":["month","day"],"default":"month"},"scope":{"type":"string","enum":["account","project"],"default":"account"},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["meter","max","citation"]},"default":[]},"features":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["key","citation"]},"default":[]},"unmetered":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["meter","citation"]},"default":[]},"elastic":{"type":"array","items":{"type":"string","enum":["vcpu","ram_gb","retention_days"]},"default":[]},"capacities":{"type":"object","properties":{"vcpu":{"type":"number","minimum":0,"exclusiveMinimum":true},"ram_gb":{"type":"number","minimum":0,"exclusiveMinimum":true},"retention_days":{"type":"number","minimum":0,"exclusiveMinimum":true}},"default":{}},"configurationGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"label":{"type":"string","minLength":1},"scope":{"type":"string","enum":["account","project"],"default":"account"},"required":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"label":{"type":"string","minLength":1},"amount":{"type":"number","minimum":0},"capacities":{"type":"object","properties":{"vcpu":{"type":"number","minimum":0,"exclusiveMinimum":true},"ram_gb":{"type":"number","minimum":0,"exclusiveMinimum":true},"retention_days":{"type":"number","minimum":0,"exclusiveMinimum":true}},"default":{}},"features":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"default":[]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"mode":{"type":"string","enum":["per_unit","graduated","volume"]},"unitAmount":{"type":"number","nullable":true,"minimum":0,"default":null},"brackets":{"type":"array","items":{"type":"object","properties":{"upTo":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true},"unitAmount":{"type":"number","minimum":0},"flatAmount":{"type":"number","minimum":0,"default":0}},"required":["upTo","unitAmount"]},"default":[]},"packageSize":{"type":"number","minimum":0,"exclusiveMinimum":true,"default":1},"rounding":{"type":"string","enum":["up","exact"],"default":"exact"},"included":{"type":"number","minimum":0,"default":0},"includedCitation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]},{"nullable":true}],"default":null},"scope":{"type":"string","enum":["account","project"],"default":"account"},"minimum":{"type":"number","nullable":true,"minimum":0,"default":null},"cap":{"type":"number","nullable":true,"minimum":0,"default":null},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["id","meter","mode","citation"]},"default":[]},"limits":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"max":{"type":"number","minimum":0},"per":{"type":"string","enum":["month","day"],"default":"month"},"scope":{"type":"string","enum":["account","project"],"default":"account"},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["meter","max","citation"]},"default":[]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["id","label","amount","citation"]},"minItems":1}},"required":["id","label","required","options"]},"default":[]},"credit":{"type":"object","nullable":true,"properties":{"amount":{"type":"number","minimum":0,"exclusiveMinimum":true},"appliesTo":{"type":"string","enum":["usage_and_configurations","configurations"]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"default":null,"required":["amount","appliesTo","citation"]}},"required":["id","name","monthly","annual"]},"minItems":1}},"required":["regions","currency","plans"]},"minItems":1},"operatedByYou":{"type":"array","items":{"type":"string"},"default":[]},"checkedAt":{"type":"string","format":"date-time"}},"required":["slug","name","provider","kind","type","url","pricingUrl","pricing","checkedAt"]}},"links":{"type":"object","additionalProperties":{"type":"object","properties":{"pricingUrl":{"type":"string","format":"uri"},"affiliateUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["pricingUrl","affiliateUrl"]}},"published":{"type":"object","additionalProperties":{"type":"object","properties":{"version":{"type":"integer"},"publishedAt":{"type":"string"}},"required":["version","publishedAt"]}},"fx":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"perEur":{"type":"object","properties":{"USD":{"type":"number","minimum":0,"exclusiveMinimum":true},"EUR":{"type":"number","minimum":0,"exclusiveMinimum":true},"GBP":{"type":"number","minimum":0,"exclusiveMinimum":true}}}},"required":["date","perEur"]}},"required":["offerings","links","published","fx"]}}}}}}},"/v1/offerings/{slug}":{"get":{"summary":"One published offering","parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"The offering","content":{"application/json":{"schema":{"type":"object","properties":{"offering":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"name":{"type":"string","minLength":1},"provider":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"name":{"type":"string","minLength":1}},"required":["slug","name"]},"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"type":{"type":"string","enum":["saas","hyperscaler","self_hosted"]},"url":{"type":"string","format":"uri"},"pricingUrl":{"type":"string","format":"uri"},"pricing":{"type":"array","items":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"string","enum":["us-east","us-west","eu-west","eu-central","uk","ap-southeast"]},"minItems":1},"currency":{"type":"string","enum":["USD","EUR","GBP"]},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"name":{"type":"string","minLength":1},"monthly":{"type":"object","nullable":true,"properties":{"amount":{"type":"number","minimum":0},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["amount","citation"]},"annual":{"type":"object","nullable":true,"properties":{"amount":{"type":"number","minimum":0},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["amount","citation"]},"customPricing":{"type":"boolean","default":false},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"mode":{"type":"string","enum":["per_unit","graduated","volume"]},"unitAmount":{"type":"number","nullable":true,"minimum":0,"default":null},"brackets":{"type":"array","items":{"type":"object","properties":{"upTo":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true},"unitAmount":{"type":"number","minimum":0},"flatAmount":{"type":"number","minimum":0,"default":0}},"required":["upTo","unitAmount"]},"default":[]},"packageSize":{"type":"number","minimum":0,"exclusiveMinimum":true,"default":1},"rounding":{"type":"string","enum":["up","exact"],"default":"exact"},"included":{"type":"number","minimum":0,"default":0},"includedCitation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]},{"nullable":true}],"default":null},"scope":{"type":"string","enum":["account","project"],"default":"account"},"minimum":{"type":"number","nullable":true,"minimum":0,"default":null},"cap":{"type":"number","nullable":true,"minimum":0,"default":null},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["id","meter","mode","citation"]},"default":[]},"limits":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"max":{"type":"number","minimum":0},"per":{"type":"string","enum":["month","day"],"default":"month"},"scope":{"type":"string","enum":["account","project"],"default":"account"},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["meter","max","citation"]},"default":[]},"features":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["key","citation"]},"default":[]},"unmetered":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["meter","citation"]},"default":[]},"elastic":{"type":"array","items":{"type":"string","enum":["vcpu","ram_gb","retention_days"]},"default":[]},"capacities":{"type":"object","properties":{"vcpu":{"type":"number","minimum":0,"exclusiveMinimum":true},"ram_gb":{"type":"number","minimum":0,"exclusiveMinimum":true},"retention_days":{"type":"number","minimum":0,"exclusiveMinimum":true}},"default":{}},"configurationGroups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"label":{"type":"string","minLength":1},"scope":{"type":"string","enum":["account","project"],"default":"account"},"required":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"label":{"type":"string","minLength":1},"amount":{"type":"number","minimum":0},"capacities":{"type":"object","properties":{"vcpu":{"type":"number","minimum":0,"exclusiveMinimum":true},"ram_gb":{"type":"number","minimum":0,"exclusiveMinimum":true},"retention_days":{"type":"number","minimum":0,"exclusiveMinimum":true}},"default":{}},"features":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"default":[]},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z0-9]+(?:[-_.][a-z0-9]+)*$"},"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"mode":{"type":"string","enum":["per_unit","graduated","volume"]},"unitAmount":{"type":"number","nullable":true,"minimum":0,"default":null},"brackets":{"type":"array","items":{"type":"object","properties":{"upTo":{"type":"number","nullable":true,"minimum":0,"exclusiveMinimum":true},"unitAmount":{"type":"number","minimum":0},"flatAmount":{"type":"number","minimum":0,"default":0}},"required":["upTo","unitAmount"]},"default":[]},"packageSize":{"type":"number","minimum":0,"exclusiveMinimum":true,"default":1},"rounding":{"type":"string","enum":["up","exact"],"default":"exact"},"included":{"type":"number","minimum":0,"default":0},"includedCitation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]},{"nullable":true}],"default":null},"scope":{"type":"string","enum":["account","project"],"default":"account"},"minimum":{"type":"number","nullable":true,"minimum":0,"default":null},"cap":{"type":"number","nullable":true,"minimum":0,"default":null},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["id","meter","mode","citation"]},"default":[]},"limits":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"max":{"type":"number","minimum":0},"per":{"type":"string","enum":["month","day"],"default":"month"},"scope":{"type":"string","enum":["account","project"],"default":"account"},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["meter","max","citation"]},"default":[]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["id","label","amount","citation"]},"minItems":1}},"required":["id","label","required","options"]},"default":[]},"credit":{"type":"object","nullable":true,"properties":{"amount":{"type":"number","minimum":0,"exclusiveMinimum":true},"appliesTo":{"type":"string","enum":["usage_and_configurations","configurations"]},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"default":null,"required":["amount","appliesTo","citation"]}},"required":["id","name","monthly","annual"]},"minItems":1}},"required":["regions","currency","plans"]},"minItems":1},"operatedByYou":{"type":"array","items":{"type":"string"},"default":[]},"checkedAt":{"type":"string","format":"date-time"}},"required":["slug","name","provider","kind","type","url","pricingUrl","pricing","checkedAt"]},"links":{"type":"object","properties":{"pricingUrl":{"type":"string","format":"uri"},"affiliateUrl":{"type":"string","nullable":true,"format":"uri"}},"required":["pricingUrl","affiliateUrl"]},"published":{"type":"object","properties":{"version":{"type":"integer"},"publishedAt":{"type":"string"}},"required":["version","publishedAt"]}},"required":["offering","links","published"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/offerings/{slug}/history":{"get":{"summary":"Published versions of an offering with what changed in each","parameters":[{"schema":{"type":"string"},"required":true,"name":"slug","in":"path"}],"responses":{"200":{"description":"Newest first","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"version":{"type":"integer"},"publishedAt":{"type":"string"},"changes":{"type":"array","items":{"type":"object","properties":{"plan":{"type":"string"},"text":{"type":"string"}},"required":["plan","text"]}}},"required":["version","publishedAt","changes"]}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/scrapes/{id}":{"get":{"summary":"The stored pricing page a published price cites","parameters":[{"schema":{"type":"integer","nullable":true},"required":false,"name":"id","in":"path"}],"responses":{"200":{"description":"The stored page","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"number"},"url":{"type":"string"},"fetcher":{"type":"string"},"content":{"type":"string"},"fetchedAt":{"type":"string"}},"required":["id","url","fetcher","content","fetchedAt"]}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/estimate":{"post":{"summary":"Monthly cost of a stack: every offering per workload, best first, with cited line items","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"drivers":{"type":"object","properties":{"mau":{"type":"number","minimum":0},"requests_per_user":{"type":"number","minimum":0},"data_per_user_mb":{"type":"number","minimum":0},"files_per_user_mb":{"type":"number","minimum":0},"emails_per_user":{"type":"number","minimum":0},"revenue_per_user":{"type":"number","minimum":0},"jobs_per_user":{"type":"number","minimum":0}},"required":["mau","requests_per_user","data_per_user_mb","files_per_user_mb","emails_per_user","revenue_per_user","jobs_per_user"]},"assumptions":{"type":"object","properties":{"peak_factor":{"type":"number","minimum":0},"rps_per_vcpu":{"type":"number","minimum":0},"ram_per_vcpu_gb":{"type":"number","minimum":0},"db_rps_per_vcpu":{"type":"number","minimum":0},"working_set_ratio":{"type":"number","minimum":0},"response_kb":{"type":"number","minimum":0},"db_kb_per_request":{"type":"number","minimum":0},"cache_kb_per_user":{"type":"number","minimum":0},"cache_ops_per_request":{"type":"number","minimum":0},"cache_value_kb":{"type":"number","minimum":0},"file_reads_per_user":{"type":"number","minimum":0},"file_writes_per_user":{"type":"number","minimum":0},"file_read_kb":{"type":"number","minimum":0},"error_rate":{"type":"number","minimum":0},"log_kb_per_request":{"type":"number","minimum":0},"log_retention_days":{"type":"number","minimum":0},"avg_transaction":{"type":"number","minimum":0},"hours_per_month":{"type":"number","minimum":0}},"default":{}},"region":{"type":"string","enum":["us-east","us-west","eu-west","eu-central","uk","ap-southeast"],"default":"us-east"},"currency":{"type":"string","enum":["USD","EUR","GBP"],"default":"USD"},"interval":{"type":"string","enum":["monthly","annual"],"default":"monthly"},"projects":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"seats":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"workloads":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"requiredFeatures":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"default":[]},"overrides":{"type":"object","additionalProperties":{"type":"number","minimum":0},"default":{}},"pinned":{"type":"string","nullable":true,"default":null}},"required":["kind"]},"minItems":1}},"required":["drivers","workloads"]}}}},"responses":{"200":{"description":"The resolved stack","content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"object","additionalProperties":{"type":"number"}},"workloads":{"type":"array","items":{"type":"object","properties":{"spec":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"requiredFeatures":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"default":[]},"overrides":{"type":"object","additionalProperties":{"type":"number","minimum":0},"default":{}},"pinned":{"type":"string","nullable":true,"default":null}},"required":["kind"]},"workload":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"usage":{"type":"object","properties":{"storage.gb_month":{"type":"number"},"backup.gb_month":{"type":"number"},"egress.gb":{"type":"number"},"requests.count":{"type":"number"},"requests.write":{"type":"number"},"requests.read":{"type":"number"},"compute.vcpu_hour":{"type":"number"},"compute.ram_gb_hour":{"type":"number"},"build.minute":{"type":"number"},"auth.mau":{"type":"number"},"auth.sso_connection":{"type":"number"},"email.sent":{"type":"number"},"errors.event":{"type":"number"},"logs.ingest_gb":{"type":"number"},"payments.volume":{"type":"number"},"payments.transaction":{"type":"number"},"queue.message":{"type":"number"},"jobs.run":{"type":"number"},"team.seat":{"type":"number"},"project.count":{"type":"number"}}},"capacities":{"type":"object","properties":{"vcpu":{"type":"number"},"ram_gb":{"type":"number"},"retention_days":{"type":"number"}}},"requiredFeatures":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]}},"formulas":{"type":"object","additionalProperties":{"nullable":true,"description":"Formula tree: a number, {ref}, {op, args} or {op: 'ceil', arg}"}}},"required":["kind","usage","capacities","requiredFeatures","formulas"]},"results":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"slug":{"type":"string"},"status":{"type":"string","enum":["ok"]},"incomplete":{"type":"boolean"},"choice":{"type":"object","properties":{"plan":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"]},"configurations":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"}},"required":["group","id","label"]}},"cost":{"type":"object","properties":{"total":{"type":"number"},"lines":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["base","configuration","usage","credit"]},"label":{"type":"string"},"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"quantity":{"type":"number"},"amount":{"type":"number"},"citations":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"note":{"type":"string"}},"required":["kind","label","amount","citations"]}},"unpriced":{"type":"array","items":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]}},"breaches":{"type":"array","items":{"type":"object","properties":{"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"max":{"type":"number"},"usage":{"type":"number"},"citation":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["quote"]},"scrapeId":{"type":"string","minLength":1},"quote":{"type":"string","minLength":1}},"required":["kind","scrapeId","quote"]},{"type":"object","properties":{"kind":{"type":"string","enum":["sku"]},"source":{"type":"string","enum":["aws","azure","gcp","oci","hetzner"]},"sku":{"type":"string","minLength":1},"note":{"type":"string"}},"required":["kind","source","sku"]}]}},"required":["meter","max","usage","citation"]}}},"required":["total","lines","unpriced","breaches"]},"total":{"type":"number"},"currency":{"type":"string","enum":["USD","EUR","GBP"]},"conversion":{"type":"object","nullable":true,"properties":{"from":{"type":"string","enum":["USD","EUR","GBP"]},"to":{"type":"string","enum":["USD","EUR","GBP"]},"rate":{"type":"number"},"date":{"type":"string"}},"required":["from","to","rate","date"]}},"required":["plan","configurations","cost","total","currency","conversion"]}},"required":["slug","status","incomplete","choice"]},{"type":"object","properties":{"slug":{"type":"string"},"status":{"type":"string","enum":["unmet"]},"unmet":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["feature"]},"feature":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]}},"required":["kind","feature"]},{"type":"object","properties":{"kind":{"type":"string","enum":["capacity"]},"capacity":{"type":"string","enum":["vcpu","ram_gb","retention_days"]},"required":{"type":"number"},"available":{"type":"number"}},"required":["kind","capacity","required","available"]},{"type":"object","properties":{"kind":{"type":"string","enum":["limit"]},"meter":{"type":"string","enum":["storage.gb_month","backup.gb_month","egress.gb","requests.count","requests.write","requests.read","compute.vcpu_hour","compute.ram_gb_hour","build.minute","auth.mau","auth.sso_connection","email.sent","errors.event","logs.ingest_gb","payments.volume","payments.transaction","queue.message","jobs.run","team.seat","project.count"]},"max":{"type":"number"},"usage":{"type":"number"}},"required":["kind","meter","max","usage"]}]}},"planName":{"type":"string"},"contactSales":{"type":"boolean"}},"required":["slug","status","unmet","planName","contactSales"]},{"type":"object","properties":{"slug":{"type":"string"},"status":{"type":"string","enum":["custom_pricing"]}},"required":["slug","status"]},{"type":"object","properties":{"slug":{"type":"string"},"status":{"type":"string","enum":["unavailable_in_region"]}},"required":["slug","status"]}]}},"selected":{"type":"string","nullable":true}},"required":["spec","workload","results","selected"]}},"total":{"type":"number"},"currency":{"type":"string","enum":["USD","EUR","GBP"]},"incomplete":{"type":"boolean"}},"required":["scope","workloads","total","currency","incomplete"]}}}}}}},"/v1/curves":{"post":{"summary":"Cost of every offering from 1k to 1M monthly active users, with crossover points","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"drivers":{"type":"object","properties":{"mau":{"type":"number","minimum":0},"requests_per_user":{"type":"number","minimum":0},"data_per_user_mb":{"type":"number","minimum":0},"files_per_user_mb":{"type":"number","minimum":0},"emails_per_user":{"type":"number","minimum":0},"revenue_per_user":{"type":"number","minimum":0},"jobs_per_user":{"type":"number","minimum":0}},"required":["mau","requests_per_user","data_per_user_mb","files_per_user_mb","emails_per_user","revenue_per_user","jobs_per_user"]},"assumptions":{"type":"object","properties":{"peak_factor":{"type":"number","minimum":0},"rps_per_vcpu":{"type":"number","minimum":0},"ram_per_vcpu_gb":{"type":"number","minimum":0},"db_rps_per_vcpu":{"type":"number","minimum":0},"working_set_ratio":{"type":"number","minimum":0},"response_kb":{"type":"number","minimum":0},"db_kb_per_request":{"type":"number","minimum":0},"cache_kb_per_user":{"type":"number","minimum":0},"cache_ops_per_request":{"type":"number","minimum":0},"cache_value_kb":{"type":"number","minimum":0},"file_reads_per_user":{"type":"number","minimum":0},"file_writes_per_user":{"type":"number","minimum":0},"file_read_kb":{"type":"number","minimum":0},"error_rate":{"type":"number","minimum":0},"log_kb_per_request":{"type":"number","minimum":0},"log_retention_days":{"type":"number","minimum":0},"avg_transaction":{"type":"number","minimum":0},"hours_per_month":{"type":"number","minimum":0}},"default":{}},"region":{"type":"string","enum":["us-east","us-west","eu-west","eu-central","uk","ap-southeast"],"default":"us-east"},"currency":{"type":"string","enum":["USD","EUR","GBP"],"default":"USD"},"interval":{"type":"string","enum":["monthly","annual"],"default":"monthly"},"projects":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"seats":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"workloads":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"requiredFeatures":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"default":[]},"overrides":{"type":"object","additionalProperties":{"type":"number","minimum":0},"default":{}},"pinned":{"type":"string","nullable":true,"default":null}},"required":["kind"]},"minItems":1}},"required":["drivers","workloads"]}}}},"responses":{"200":{"description":"Cost curves","content":{"application/json":{"schema":{"type":"object","properties":{"mau":{"type":"array","items":{"type":"number"}},"stack":{"type":"array","items":{"type":"number","nullable":true}},"kinds":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"series":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"points":{"type":"array","items":{"type":"number","nullable":true}}},"required":["slug","points"]}}},"required":["kind","series"]}},"crossovers":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"cheaperBelow":{"type":"string"},"cheaperAbove":{"type":"string"},"mau":{"type":"number"}},"required":["kind","cheaperBelow","cheaperAbove","mau"]}}},"required":["mau","stack","kinds","crossovers"]}}}}}}},"/v1/presets":{"get":{"summary":"Starting stacks","responses":{"200":{"description":"Presets by key","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"stack":{"type":"object","properties":{"drivers":{"type":"object","properties":{"mau":{"type":"number","minimum":0},"requests_per_user":{"type":"number","minimum":0},"data_per_user_mb":{"type":"number","minimum":0},"files_per_user_mb":{"type":"number","minimum":0},"emails_per_user":{"type":"number","minimum":0},"revenue_per_user":{"type":"number","minimum":0},"jobs_per_user":{"type":"number","minimum":0}},"required":["mau","requests_per_user","data_per_user_mb","files_per_user_mb","emails_per_user","revenue_per_user","jobs_per_user"]},"assumptions":{"type":"object","properties":{"peak_factor":{"type":"number","minimum":0},"rps_per_vcpu":{"type":"number","minimum":0},"ram_per_vcpu_gb":{"type":"number","minimum":0},"db_rps_per_vcpu":{"type":"number","minimum":0},"working_set_ratio":{"type":"number","minimum":0},"response_kb":{"type":"number","minimum":0},"db_kb_per_request":{"type":"number","minimum":0},"cache_kb_per_user":{"type":"number","minimum":0},"cache_ops_per_request":{"type":"number","minimum":0},"cache_value_kb":{"type":"number","minimum":0},"file_reads_per_user":{"type":"number","minimum":0},"file_writes_per_user":{"type":"number","minimum":0},"file_read_kb":{"type":"number","minimum":0},"error_rate":{"type":"number","minimum":0},"log_kb_per_request":{"type":"number","minimum":0},"log_retention_days":{"type":"number","minimum":0},"avg_transaction":{"type":"number","minimum":0},"hours_per_month":{"type":"number","minimum":0}},"default":{}},"region":{"type":"string","enum":["us-east","us-west","eu-west","eu-central","uk","ap-southeast"],"default":"us-east"},"currency":{"type":"string","enum":["USD","EUR","GBP"],"default":"USD"},"interval":{"type":"string","enum":["monthly","annual"],"default":"monthly"},"projects":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"seats":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"workloads":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"requiredFeatures":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"default":[]},"overrides":{"type":"object","additionalProperties":{"type":"number","minimum":0},"default":{}},"pinned":{"type":"string","nullable":true,"default":null}},"required":["kind"]},"minItems":1}},"required":["drivers","workloads"]}},"required":["label","stack"]}}}}}}}},"/v1/describe":{"post":{"summary":"Turn a plain-language description of a product into an editable stack. Never returns prices.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":10,"maxLength":2000}},"required":["text"]}}}},"responses":{"200":{"description":"A stack to edit","content":{"application/json":{"schema":{"type":"object","properties":{"stack":{"type":"object","properties":{"drivers":{"type":"object","properties":{"mau":{"type":"number","minimum":0},"requests_per_user":{"type":"number","minimum":0},"data_per_user_mb":{"type":"number","minimum":0},"files_per_user_mb":{"type":"number","minimum":0},"emails_per_user":{"type":"number","minimum":0},"revenue_per_user":{"type":"number","minimum":0},"jobs_per_user":{"type":"number","minimum":0}},"required":["mau","requests_per_user","data_per_user_mb","files_per_user_mb","emails_per_user","revenue_per_user","jobs_per_user"]},"assumptions":{"type":"object","properties":{"peak_factor":{"type":"number","minimum":0},"rps_per_vcpu":{"type":"number","minimum":0},"ram_per_vcpu_gb":{"type":"number","minimum":0},"db_rps_per_vcpu":{"type":"number","minimum":0},"working_set_ratio":{"type":"number","minimum":0},"response_kb":{"type":"number","minimum":0},"db_kb_per_request":{"type":"number","minimum":0},"cache_kb_per_user":{"type":"number","minimum":0},"cache_ops_per_request":{"type":"number","minimum":0},"cache_value_kb":{"type":"number","minimum":0},"file_reads_per_user":{"type":"number","minimum":0},"file_writes_per_user":{"type":"number","minimum":0},"file_read_kb":{"type":"number","minimum":0},"error_rate":{"type":"number","minimum":0},"log_kb_per_request":{"type":"number","minimum":0},"log_retention_days":{"type":"number","minimum":0},"avg_transaction":{"type":"number","minimum":0},"hours_per_month":{"type":"number","minimum":0}},"default":{}},"region":{"type":"string","enum":["us-east","us-west","eu-west","eu-central","uk","ap-southeast"],"default":"us-east"},"currency":{"type":"string","enum":["USD","EUR","GBP"],"default":"USD"},"interval":{"type":"string","enum":["monthly","annual"],"default":"monthly"},"projects":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"seats":{"type":"integer","minimum":0,"exclusiveMinimum":true,"default":1},"workloads":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"requiredFeatures":{"type":"array","items":{"type":"string","enum":["automatic_backups","point_in_time_recovery","high_availability","read_replicas","connection_pooling","branching","private_networking","persistence","s3_compatible_api","cdn","lifecycle_rules","versioning","autoscaling","scale_to_zero","preview_deployments","zero_downtime_deploys","custom_domains","cron_jobs","dedicated_ip","inbound_email","webhooks","templates","custom_tracking_domain","social_login","passkeys","mfa","organizations","rbac","saml_sso","custom_domain","remove_branding","source_maps","performance_tracing","session_replay","alerts","structured_search","log_archiving","merchant_of_record","subscriptions","invoicing","tax_calculation","scheduling","retries","dead_letter_queue","fifo_ordering","workflows"]},"default":[]},"overrides":{"type":"object","additionalProperties":{"type":"number","minimum":0},"default":{}},"pinned":{"type":"string","nullable":true,"default":null}},"required":["kind"]},"minItems":1}},"required":["drivers","workloads"]}},"required":["stack"]}}}},"422":{"description":"The description could not become a stack","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/admin/api-keys":{"get":{"parameters":[{"schema":{"type":"boolean","nullable":true,"default":false},"required":false,"name":"includeDeleted","in":"query"}],"responses":{"200":{"description":"List of API keys","content":{"application/json":{"schema":{"type":"object","properties":{"apiKeys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"rateLimit":{"type":"integer"},"emailVerified":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","email","rateLimit","emailVerified","createdAt"]}},"total":{"type":"integer","minimum":0}},"required":["apiKeys","total"]}}}}}},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"name":{"type":"string","minLength":1,"maxLength":100},"rateLimit":{"type":"integer","minimum":1,"maximum":10000}},"required":["email","name"]}}}},"responses":{"201":{"description":"API key created (pre-verified)","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"rateLimit":{"type":"integer"},"emailVerified":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"key":{"type":"string"}},"required":["id","name","email","rateLimit","emailVerified","createdAt","key"]}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/admin/api-keys/{id}":{"patch":{"parameters":[{"schema":{"type":"number","nullable":true},"required":false,"name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"rateLimit":{"type":"integer","minimum":1,"maximum":10000}}}}}},"responses":{"200":{"description":"Updated API key","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"rateLimit":{"type":"integer"},"emailVerified":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","email","rateLimit","emailVerified","createdAt"]}}}},"404":{"description":"API key not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}},"delete":{"parameters":[{"schema":{"type":"number","nullable":true},"required":false,"name":"id","in":"path"}],"responses":{"200":{"description":"API key revoked","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"]}}}},"404":{"description":"API key not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}},"/v1/placement":{"get":{"summary":"The sponsored placement shown on the homepage now, or null","description":"At most one placement is active. Rankings, estimates and the catalog never read placements.","responses":{"200":{"description":"The active placement","content":{"application/json":{"schema":{"type":"object","properties":{"placement":{"type":"object","nullable":true,"properties":{"label":{"type":"string"},"url":{"type":"string","format":"uri"},"offering":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}},"required":["slug","name"]}},"required":["label","url","offering"]}},"required":["placement"]}}}}}}},"/v1/requests":{"post":{"summary":"Request a missing offering or service kind","description":"A repeat request for the same name adds a vote. An offering already in the catalog returns its slug. A request never starts extraction; the admin decides. Each IP may submit 5 requests per hour.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"example":"Turso"},"pricingUrl":{"type":"string","maxLength":500,"format":"uri"},"kind":{"type":"string","enum":["postgres","redis","object_storage","app_compute","email","auth","error_tracking","logging","payments","jobs_queues"]},"newKind":{"type":"string","minLength":2,"maxLength":60},"website":{"type":"string","maxLength":500}},"required":["name"]}}}},"responses":{"200":{"description":"What happened to the request","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"outcome":{"type":"string","enum":["created"]},"name":{"type":"string"}},"required":["outcome","name"]},{"type":"object","properties":{"outcome":{"type":"string","enum":["voted"]},"name":{"type":"string"},"votes":{"type":"integer"}},"required":["outcome","name","votes"]},{"type":"object","properties":{"outcome":{"type":"string","enum":["exists"]},"slug":{"type":"string"},"name":{"type":"string"},"published":{"type":"boolean"}},"required":["outcome","slug","name","published"]}]}}}},"429":{"description":"Too many requests from this IP in the last hour","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]}}}}}}}}}