{"openapi":"3.1.0","info":{"title":"Soldum public API","version":"1.0.0","summary":"Read-only public data about Soldum, AI pre-production software for film and advertising.","description":"Soldum is French AI pre-production software for film and advertising: screenplay breakdown, shooting schedule, budget (including the CNC format), casting and call sheets.\n\nThis API is read-only and needs no authentication. It returns Soldum's pricing as JSON, its llms.txt overview, its main pages in Markdown, and the backend health status.\n\nUse it to answer questions about what Soldum does, what it costs and how to contact the company. The software itself (projects, breakdowns, budgets) has no public API: to act on a user's behalf, send them to the sign-up page or to the contact page.","termsOfService":"https://soldum.fr/en/terms","contact":{"name":"Soldum","email":"contact@soldum.fr","url":"https://soldum.fr/en/contact"}},"externalDocs":{"description":"Soldum user documentation","url":"https://docs.soldum.fr/en/docs"},"servers":[{"url":"https://soldum.fr","description":"Production"}],"security":[],"tags":[{"name":"pricing","description":"Plans, prices and free trial."},{"name":"llms-txt","description":"Plain-text overviews for language models (llmstxt.org)."},{"name":"pages","description":"Public pages, available as Markdown or HTML."},{"name":"blog","description":"Blog articles on film pre-production."},{"name":"status","description":"Service health."}],"paths":{"/pricing.json":{"get":{"operationId":"getPricing","summary":"Get Soldum's plans and prices","description":"Returns the Solo and Studio plans with their monthly and annual prices (EUR, excluding VAT), the free trial, the student pricing and the custom plan. Read from the same source as the pricing page.","tags":["pricing"],"responses":{"200":{"description":"The current price list.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pricing"}}}}}}},"/api/health":{"get":{"operationId":"getApiHealth","summary":"Check that the Soldum backend is up","description":"Liveness of the Soldum backend. Constant while the service runs; does not check the database.","tags":["status"],"responses":{"200":{"description":"The backend is running.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","summary":"Get the llms.txt overview (French)","description":"What Soldum does, when to use it, pricing, FAQ and key pages, in French (llmstxt.org format).","tags":["llms-txt"],"responses":{"200":{"description":"Get the llms.txt overview (French)","content":{"text/plain":{"schema":{"type":"string","contentMediaType":"text/plain"}}}}}}},"/llms-full.txt":{"get":{"operationId":"getLlmsFullTxt","summary":"Get the full llms.txt (French)","description":"The llms.txt overview followed by every French blog article in full.","tags":["llms-txt"],"responses":{"200":{"description":"Get the full llms.txt (French)","content":{"text/plain":{"schema":{"type":"string","contentMediaType":"text/plain"}}}}}}},"/en/llms.txt":{"get":{"operationId":"getLlmsTxtEnglish","summary":"Get the llms.txt overview (English)","description":"What Soldum does, when to use it, pricing, FAQ and key pages, in English (llmstxt.org format).","tags":["llms-txt"],"responses":{"200":{"description":"Get the llms.txt overview (English)","content":{"text/plain":{"schema":{"type":"string","contentMediaType":"text/plain"}}}}}}},"/en/llms-full.txt":{"get":{"operationId":"getLlmsFullTxtEnglish","summary":"Get the full llms.txt (English)","description":"The llms.txt overview followed by every English blog article in full.","tags":["llms-txt"],"responses":{"200":{"description":"Get the full llms.txt (English)","content":{"text/plain":{"schema":{"type":"string","contentMediaType":"text/plain"}}}}}}},"/":{"get":{"operationId":"getHomePage","summary":"Read the home page (French)","description":"Soldum's French home page: features, when to use it, pricing and FAQ. Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["pages"],"responses":{"200":{"description":"Read the home page (French)","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}}}}},"/en":{"get":{"operationId":"getHomePageEnglish","summary":"Read the home page (English)","description":"Soldum's English home page: features, when to use it, pricing and FAQ. Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["pages"],"responses":{"200":{"description":"Read the home page (English)","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}}}}},"/contact":{"get":{"operationId":"getContactPage","summary":"Read the contact page (French)","description":"How to reach Soldum: email, demo, custom plans, press and personal data requests. Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["pages"],"responses":{"200":{"description":"Read the contact page (French)","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}}}}},"/en/contact":{"get":{"operationId":"getContactPageEnglish","summary":"Read the contact page (English)","description":"How to reach Soldum: email, demo, custom plans, press and personal data requests. Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["pages"],"responses":{"200":{"description":"Read the contact page (English)","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}}}}},"/blog":{"get":{"operationId":"getBlogIndex","summary":"List blog articles (French)","description":"Every French blog article and comparison guide, with its URL and summary. Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["blog"],"responses":{"200":{"description":"List blog articles (French)","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}}}}},"/en/blog":{"get":{"operationId":"getBlogIndexEnglish","summary":"List blog articles (English)","description":"Every English blog article and comparison guide, with its URL and summary. Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["blog"],"responses":{"200":{"description":"List blog articles (English)","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}}}}},"/blog/{slug}":{"get":{"operationId":"getBlogArticle","summary":"Read a blog article (French)","description":"One article of the French blog on film pre-production (script breakdown, shooting schedule, budgeting). Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["blog"],"parameters":[{"name":"slug","in":"path","required":true,"description":"The article slug, as listed by the blog index.","schema":{"type":"string","enum":["comment-faire-depouillement-scenario","comment-faire-plan-de-travail-tournage","comment-etablir-devis-film","logiciel-ecriture-scenario","comment-preparer-tournage-publicite","ppm-tournage-publicitaire"]}}],"responses":{"200":{"description":"The article.","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/en/blog/{slug}":{"get":{"operationId":"getBlogArticleEnglish","summary":"Read a blog article (English)","description":"One article of the English blog on film pre-production (script breakdown, shooting schedule, budgeting). Send `Accept: text/markdown` to receive Markdown (`Content-Type: text/markdown; charset=utf-8`); browsers keep receiving HTML. Both responses carry `Vary: Accept`.","tags":["blog"],"parameters":[{"name":"slug","in":"path","required":true,"description":"The article slug, as listed by the blog index.","schema":{"type":"string","enum":["how-to-break-down-a-screenplay","how-to-make-a-shooting-schedule","how-to-budget-a-film","screenwriting-software","how-to-prepare-a-commercial-shoot","pre-production-meeting-commercial"]}}],"responses":{"200":{"description":"The article.","headers":{"Vary":{"description":"Lists `Accept`: the representation depends on the Accept header.","schema":{"type":"string"}}},"content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}},"404":{"$ref":"#/components/responses/NotFound"}}}}},"components":{"schemas":{"MarkdownDocument":{"type":"string","contentMediaType":"text/markdown","description":"A Markdown document (RFC 7763)."},"Health":{"type":"object","required":["status","service"],"properties":{"status":{"type":"string","enum":["ok"],"description":"Always `ok` when the backend answers."},"service":{"type":"string","description":"Service name.","examples":["Soldum API"]}}},"Plan":{"type":"object","required":["id","name","description","monthlyPrice","annualPrice","annualMonthlyEquivalent","maxActiveProjects","teamInvitations"],"properties":{"id":{"type":"string","enum":["solo","studio"]},"name":{"type":"string"},"description":{"type":"string"},"monthlyPrice":{"type":"number","description":"Monthly price, EUR excluding VAT."},"annualPrice":{"type":"number","description":"Price for a one-year commitment, EUR excluding VAT."},"annualMonthlyEquivalent":{"type":"number","description":"Annual price divided by twelve, rounded to the euro."},"maxActiveProjects":{"type":["integer","null"],"description":"Projects active at the same time; null means unlimited."},"teamInvitations":{"type":"boolean","description":"Whether team members can be invited to the account."}}},"Pricing":{"type":"object","required":["currency","pricesIncludeVat","billedPer","freeTrial","plans","annualDiscount","studentPricing","customPlan","signupUrl","documentationUrl"],"properties":{"currency":{"type":"string","enum":["EUR"]},"pricesIncludeVat":{"type":"boolean","description":"Always false: prices exclude VAT."},"billedPer":{"type":"string","enum":["account"],"description":"Billing is per account, not per user."},"freeTrial":{"type":"object","required":["days","plans","cardRequired","chargedIfCancelledBeforeEnd"],"properties":{"days":{"type":"integer","minimum":1},"plans":{"type":"array","items":{"type":"string","enum":["solo","studio"]}},"cardRequired":{"type":"boolean"},"chargedIfCancelledBeforeEnd":{"type":"boolean"}}},"plans":{"type":"array","items":{"$ref":"#/components/schemas/Plan"}},"annualDiscount":{"type":"number","minimum":0,"maximum":1,"description":"Discount for a one-year commitment, as a fraction."},"studentPricing":{"type":"object","required":["plan","discount","monthlyPrice","annualPrice"],"properties":{"plan":{"type":"string","enum":["solo"]},"discount":{"type":"number","minimum":0,"maximum":1},"monthlyPrice":{"type":"number"},"annualPrice":{"type":"number"}}},"customPlan":{"type":"object","required":["audience","contactEmail","contactUrl"],"properties":{"audience":{"type":"array","items":{"type":"string"}},"contactEmail":{"type":"string","format":"email"},"contactUrl":{"type":"string","format":"uri"}}},"signupUrl":{"type":"string","format":"uri"},"documentationUrl":{"type":"string","format":"uri"}}}},"responses":{"NotFound":{"description":"No such page. The body explains the error and lists the site's entry points.","content":{"text/markdown":{"schema":{"$ref":"#/components/schemas/MarkdownDocument"}},"text/html":{"schema":{"type":"string","contentMediaType":"text/html"}}}}}}}