TryPost’s AI features are built on Laravel AI (GitHub), the official first-party AI SDK for Laravel. Every provider and model on this page is whatever that package supports — TryPost doesn’t add its own provider integrations on top.TryPost uses the SDK for text only:
the writing assistant in the composer (generate, rephrase, shorten, expand, more casual, more formal)
generating ideas under Create > Ideas
image alt text
adapting captions in Repurpose
AI runs in the web app only — the REST API and the MCP server have no AI endpoints or tools. There are no credits or per-call limits; your provider bills you directly. New text is written in the language of the user who asks for it, and a rewrite (shorten, rephrase, change the tone) keeps the language of the text it rewrites.
Each provider reads its own env: OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, AZURE_OPENAI_API_KEY, XAI_API_KEY, DEEPSEEK_API_KEY, GROQ_API_KEY, MISTRAL_API_KEY, OPENROUTER_API_KEY, OPENAI_COMPATIBLE_API_KEY. Ollama reads OLLAMA_URL (defaults to http://localhost:11434) and OLLAMA_API_KEY. Bedrock reads AWS_BEDROCK_REGION and either AWS_BEARER_TOKEN_BEDROCK or AWS credentials (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY). openai-compatible needs OPENAI_COMPATIBLE_URL plus a pinned model (see below).
Azure OpenAI
Azure reads AZURE_OPENAI_API_KEY and AZURE_OPENAI_URL (your resource endpoint, e.g. https://<resource>.openai.azure.com; there is no default). AZURE_OPENAI_API_VERSION defaults to 2025-04-01-preview, and AZURE_OPENAI_DEPLOYMENT defaults to gpt-4o, so set it unless your deployment has that name.
Base URL overrides
OPENAI_URL, ANTHROPIC_URL and GEMINI_URL point those providers at a proxy or gateway. Leave them unset to use the provider’s own API.
The AI buttons turn on only when the selected provider’s key variable is set. TryPost checks the provider’s key, not whether the provider could answer without one. For Ollama, set OLLAMA_API_KEY to any value; for Bedrock, use AWS_BEARER_TOKEN_BEDROCK; for openai-compatible, set OPENAI_COMPATIBLE_API_KEY (any value if your endpoint does not check it).
Each provider ships with a sensible default text model, so setting AI_TEXT_PROVIDER and its key is enough to get started. To pin a specific model, set the matching variable:
All of these are optional — leave them unset to use the provider’s built-in default. azure is the exception to the naming pattern: it resolves models via the deployment name you create in the Azure portal (AZURE_OPENAI_DEPLOYMENT), not a raw model identifier. openai-compatible is the other exception: OPENAI_COMPATIBLE_TEXT_MODEL is required, since an arbitrary endpoint has no sensible default to fall back to.
OpenRouter credit pre-checks: OpenRouter validates your balance against a request’s maximum possible token usage before generating anything, not the tokens actually used. A low-balance key can fail with 402 insufficient credits even on a cheap model and a short prompt. Funding the account with a few dollars usually clears this — see OpenRouter’s limits documentation.For anything else OpenRouter-specific (available models, pricing, routing behavior), check OpenRouter’s documentation directly — TryPost just passes your prompt through.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"TryPost Docs","colors":{"primary":"#7c3aed","light":"#a78bfa","dark":"#7c3aed"},"logo":{"light":"https://mintcdn.com/trypostit/wOGHkV49KgmeL3Pv/logo/light.png?fit=max\u0026auto=format\u0026n=wOGHkV49KgmeL3Pv\u0026q=85\u0026s=3bfecc29aaa0b706b6fcbb1e4da1ff23","dark":"https://mintcdn.com/trypostit/W1TMxiUczHWA_qlv/logo/dark.png?fit=max\u0026auto=format\u0026n=W1TMxiUczHWA_qlv\u0026q=85\u0026s=1c20b862375f2893debd4931ce03bf70"},"favicon":"https://mintcdn.com/trypostit/W1TMxiUczHWA_qlv/favicon.png?fit=max\u0026auto=format\u0026n=W1TMxiUczHWA_qlv\u0026q=85\u0026s=06995a6b1a9c570f58c2807820a23731","appearance":{"default":"light","strict":true},"background":{"color":{"light":"#faf8f5","dark":"#0a0a0a"}},"navbar":{"links":[{"href":"https://github.com/trypostit/trypost","label":"GitHub"}],"primary":{"type":"button","label":"Sign up on Cloud","href":"https://trypost.it"}},"footer":{"socials":{"x":"https://x.com/trypostit","github":"https://github.com/trypostit","youtube":"https://www.youtube.com/@trypostit","instagram":"https://www.instagram.com/trypost.it","discord":"https://trypost.it/discord"}},"integrations":{"posthog":{"apiKey":"phc_qZKcjfjndNDmU4k5KSfhsiSCjS9yGuVuFLYfqri0YG1","apiHost":"https://dt.trypost.it"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/trypostit/trypost"},{"anchor":"Discord","icon":"discord","href":"https://trypost.it/discord"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@trypostit"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"trypostit","hasAudioNarration":false,"actualSubdomain":"trypostit","customDomains":["docs.trypost.it"],"gitSource":{"type":"github","owner":"trypostit","repo":"trypost-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6aeb76f304782525e3ff448b","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"API Reference","count":88},{"language":"default","tag":"Knowledge Base","count":28},{"language":"default","tag":"Build with AI","count":20},{"language":"default","tag":"Setup Guides","count":18},{"language":"default","tag":"Documentation","count":18},{"language":"default","tag":"Platforms","count":13},{"language":"default","tag":"Settings","count":12},{"language":"default","tag":"Repurposes","count":11},{"language":"default","tag":"Channels","count":10},{"language":"default","tag":"Webhooks","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"self-hosting/ai","slug":"/self-hosting/ai","pageMetadata":{"title":"AI Providers","description":"Configure the AI text provider for self-hosted TryPost","icon":"microchip-ai","href":"/self-hosting/ai"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Configure the AI text provider for self-hosted TryPost\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`ai-providers`,children:`AI Providers`}),`\n`,_jsxs(_components.p,{children:[`TryPost’s AI features are built on `,_jsx(_components.a,{href:`https://laravel.com/docs/13.x/ai-sdk`,children:`Laravel AI`}),` (`,_jsx(_components.a,{href:`https://github.com/laravel/ai`,children:`GitHub`}),`), the official first-party AI SDK for Laravel. Every provider and model on this page is whatever that package supports — TryPost doesn’t add its own provider integrations on top.`]}),`\n`,_jsxs(_components.p,{children:[`TryPost uses the SDK for `,_jsx(_components.strong,{children:`text only`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`the writing assistant in the composer (generate, rephrase, shorten, expand, more casual, more formal)`}),`\n`,_jsxs(_components.li,{children:[`generating ideas under `,_jsx(_components.strong,{children:`Create`}),` > `,_jsx(_components.strong,{children:`Ideas`})]}),`\n`,_jsx(_components.li,{children:`image alt text`}),`\n`,_jsx(_components.li,{children:`adapting captions in Repurpose`}),`\n`]}),`\n`,_jsx(_components.p,{children:`AI runs in the web app only — the REST API and the MCP server have no AI endpoints or tools. There are no credits or per-call limits; your provider bills you directly. New text is written in the language of the user who asks for it, and a rewrite (shorten, rephrase, change the tone) keeps the language of the text it rewrites.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`AI_TEXT_PROVIDER=openai`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`OPENAI_API_KEY=sk-...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`AI_TEXT_PROVIDER`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`openai`}),` (default), `,_jsx(_components.code,{children:`anthropic`}),`, `,_jsx(_components.code,{children:`gemini`}),`, `,_jsx(_components.code,{children:`azure`}),`, `,_jsx(_components.code,{children:`bedrock`}),`, `,_jsx(_components.code,{children:`groq`}),`, `,_jsx(_components.code,{children:`xai`}),`, `,_jsx(_components.code,{children:`deepseek`}),`, `,_jsx(_components.code,{children:`mistral`}),`, `,_jsx(_components.code,{children:`ollama`}),`, `,_jsx(_components.code,{children:`openrouter`}),`, or `,_jsx(_components.code,{children:`openai-compatible`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Provider API keys`}),_jsxs(_components.td,{children:[`Each provider reads its own env: `,_jsx(_components.code,{children:`OPENAI_API_KEY`}),`, `,_jsx(_components.code,{children:`ANTHROPIC_API_KEY`}),`, `,_jsx(_components.code,{children:`GEMINI_API_KEY`}),`, `,_jsx(_components.code,{children:`AZURE_OPENAI_API_KEY`}),`, `,_jsx(_components.code,{children:`XAI_API_KEY`}),`, `,_jsx(_components.code,{children:`DEEPSEEK_API_KEY`}),`, `,_jsx(_components.code,{children:`GROQ_API_KEY`}),`, `,_jsx(_components.code,{children:`MISTRAL_API_KEY`}),`, `,_jsx(_components.code,{children:`OPENROUTER_API_KEY`}),`, `,_jsx(_components.code,{children:`OPENAI_COMPATIBLE_API_KEY`}),`. Ollama reads `,_jsx(_components.code,{children:`OLLAMA_URL`}),` (defaults to `,_jsx(_components.code,{children:`http://localhost:11434`}),`) and `,_jsx(_components.code,{children:`OLLAMA_API_KEY`}),`. Bedrock reads `,_jsx(_components.code,{children:`AWS_BEDROCK_REGION`}),` and either `,_jsx(_components.code,{children:`AWS_BEARER_TOKEN_BEDROCK`}),` or AWS credentials (`,_jsx(_components.code,{children:`AWS_ACCESS_KEY_ID`}),`, `,_jsx(_components.code,{children:`AWS_SECRET_ACCESS_KEY`}),`). `,_jsx(_components.code,{children:`openai-compatible`}),` needs `,_jsx(_components.code,{children:`OPENAI_COMPATIBLE_URL`}),` plus a pinned model (see below).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Azure OpenAI`}),_jsxs(_components.td,{children:[`Azure reads `,_jsx(_components.code,{children:`AZURE_OPENAI_API_KEY`}),` and `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`AZURE_OPENAI_URL`})}),` (your resource endpoint, e.g. `,_jsx(_components.code,{children:`https://\u003cresource>.openai.azure.com`}),`; there is no default). `,_jsx(_components.code,{children:`AZURE_OPENAI_API_VERSION`}),` defaults to `,_jsx(_components.code,{children:`2025-04-01-preview`}),`, and `,_jsx(_components.code,{children:`AZURE_OPENAI_DEPLOYMENT`}),` defaults to `,_jsx(_components.code,{children:`gpt-4o`}),`, so set it unless your deployment has that name.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Base URL overrides`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`OPENAI_URL`}),`, `,_jsx(_components.code,{children:`ANTHROPIC_URL`}),` and `,_jsx(_components.code,{children:`GEMINI_URL`}),` point those providers at a proxy or gateway. Leave them unset to use the provider’s own API.`]})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The AI buttons turn on only when the selected provider’s key variable is set.`}),` TryPost checks the provider’s key, not whether the provider could answer without one. For Ollama, set `,_jsx(_components.code,{children:`OLLAMA_API_KEY`}),` to any value; for Bedrock, use `,_jsx(_components.code,{children:`AWS_BEARER_TOKEN_BEDROCK`}),`; for `,_jsx(_components.code,{children:`openai-compatible`}),`, set `,_jsx(_components.code,{children:`OPENAI_COMPATIBLE_API_KEY`}),` (any value if your endpoint does not check it).`]})}),`\n`,_jsx(Heading,{level:`2`,id:`pinning-a-specific-model`,children:`Pinning a specific model`}),`\n`,_jsxs(_components.p,{children:[`Each provider ships with a sensible default text model, so setting `,_jsx(_components.code,{children:`AI_TEXT_PROVIDER`}),` and its key is enough to get started. To pin a specific model, set the matching variable:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Provider`}),_jsx(_components.th,{children:`Model variable`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`openai`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`OPENAI_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`anthropic`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`ANTHROPIC_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`gemini`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GEMINI_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`azure`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`AZURE_OPENAI_DEPLOYMENT`}),` (default `,_jsx(_components.code,{children:`gpt-4o`}),`)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bedrock`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`AWS_BEDROCK_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`groq`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`GROQ_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`xai`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`XAI_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`deepseek`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`DEEPSEEK_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`mistral`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`MISTRAL_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ollama`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`OLLAMA_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`openrouter`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`OPENROUTER_TEXT_MODEL`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`openai-compatible`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`OPENAI_COMPATIBLE_TEXT_MODEL`}),` `,_jsx(_components.strong,{children:`(required)`})]})]})]})]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`OPENAI_TEXT_MODEL=gpt-5.4`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`OPENROUTER_TEXT_MODEL=anthropic/claude-haiku-4.5`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ANTHROPIC_TEXT_MODEL=claude-sonnet-5`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`GEMINI_TEXT_MODEL=gemini-3.6-flash`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`All of these are optional — leave them unset to use the provider’s built-in default. `,_jsx(_components.code,{children:`azure`}),` is the exception to the naming pattern: it resolves models via the `,_jsx(_components.strong,{children:`deployment name`}),` you create in the Azure portal (`,_jsx(_components.code,{children:`AZURE_OPENAI_DEPLOYMENT`}),`), not a raw model identifier. `,_jsx(_components.code,{children:`openai-compatible`}),` is the other exception: `,_jsx(_components.code,{children:`OPENAI_COMPATIBLE_TEXT_MODEL`}),` is `,_jsx(_components.strong,{children:`required`}),`, since an arbitrary endpoint has no sensible default to fall back to.`]}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`OpenRouter credit pre-checks:`}),` OpenRouter validates your balance against a request’s `,_jsx(_components.em,{children:`maximum possible`}),` token usage before generating anything, not the tokens actually used. A low-balance key can fail with `,_jsx(_components.code,{children:`402 insufficient credits`}),` even on a cheap model and a short prompt. Funding the account with a few dollars usually clears this — see `,_jsx(_components.a,{href:`https://openrouter.ai/docs/api-reference/limits`,children:`OpenRouter’s limits documentation`}),`.`]}),_jsxs(_components.p,{children:[`For anything else OpenRouter-specific (available models, pricing, routing behavior), check `,_jsx(_components.a,{href:`https://openrouter.ai/docs`,children:`OpenRouter’s documentation`}),` directly — TryPost just passes your prompt through.`]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"AI Providers","description":"Configure the AI text provider for self-hosted TryPost","icon":"microchip-ai","href":"/self-hosting/ai"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"AI Providers","slug":"ai-providers","depth":1,"children":[]},{"title":"Pinning a specific model","slug":"pinning-a-specific-model","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"trypostit","siteName":"TryPost Docs","title":"AI Providers - TryPost Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-08T14:44:49.034Z","originalFileLocation":"self-hosting/ai.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Configure the AI text provider for self-hosted TryPost\">\u003cmeta data-mint-head name=\"application-name\" content=\"TryPost Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"AI Providers - TryPost Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Configure the AI text provider for self-hosted TryPost\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TryPost Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trypost.it/self-hosting/ai\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://trypostit.mintlify.site/_mintlify/api/og/v2?division=Configuration\u0026amp;title=AI+Providers\u0026amp;description=Configure+the+AI+text+provider+for+self-hosted+TryPost\u0026amp;theme=0bfb78a8df9822533e327c6d\u0026amp;signature=6ac269c5219ca237cd0444f89f47d2ccf92445ef32790db8134cb3a907ce3c6b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"AI Providers - TryPost Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Configure the AI text provider for self-hosted TryPost\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://trypostit.mintlify.site/_mintlify/api/og/v2?division=Configuration\u0026amp;title=AI+Providers\u0026amp;description=Configure+the+AI+text+provider+for+self-hosted+TryPost\u0026amp;theme=0bfb78a8df9822533e327c6d\u0026amp;signature=6ac269c5219ca237cd0444f89f47d2ccf92445ef32790db8134cb3a907ce3c6b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/trypostit/myPBspfpFdEcFxqM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TryPost Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7c3aed\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trypost.it/self-hosting/ai\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/self-hosting/ai.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trypost.it/#organization\",\"name\":\"TryPost Docs\",\"url\":\"https://docs.trypost.it\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/trypostit/wOGHkV49KgmeL3Pv/logo/light.png?fit=max\u0026auto=format\u0026n=wOGHkV49KgmeL3Pv\u0026q=85\u0026s=3bfecc29aaa0b706b6fcbb1e4da1ff23\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trypost.it#website\",\"name\":\"TryPost Docs\",\"url\":\"https://docs.trypost.it\",\"publisher\":{\"@id\":\"https://docs.trypost.it/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trypost.it/self-hosting/ai#webpage\",\"url\":\"https://docs.trypost.it/self-hosting/ai\",\"name\":\"AI Providers\",\"description\":\"Configure the AI text provider for self-hosted TryPost\",\"dateModified\":\"2026-10-08T14:44:49.034Z\",\"isPartOf\":{\"@id\":\"https://docs.trypost.it#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trypost.it/self-hosting/ai#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trypost.it/self-hosting/ai#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Configuration\",\"item\":\"https://docs.trypost.it/self-hosting/configuration\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI Providers\",\"item\":\"https://docs.trypost.it/self-hosting/ai\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.trypost.it/self-hosting/ai#article\",\"headline\":\"AI Providers\",\"name\":\"AI Providers\",\"description\":\"Configure the AI text provider for self-hosted TryPost\",\"url\":\"https://docs.trypost.it/self-hosting/ai\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trypost.it/self-hosting/ai#webpage\"},\"dateModified\":\"2026-10-08T14:44:49.034Z\",\"publisher\":{\"@id\":\"https://docs.trypost.it/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trypost.it#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TryPost Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"TryPost Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/self-hosting/ai.md","siteName":"TryPost Docs","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/trypostit/trypost"},{"anchor":"Discord","icon":"discord","href":"https://trypost.it/discord"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@trypostit"}]},"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Build with AI","icon":"microchip-ai","pages":[{"title":"Build with AI","href":"/ai/introduction"}]},{"tab":"Knowledge Base","icon":"book","pages":[{"title":"Knowledge Base","href":"/knowledge-base/introduction"}]},{"tab":"Self-Hosting","icon":"server","groups":[{"group":"Getting Started","pages":[{"title":"Self-Hosting","icon":"server","href":"/self-hosting/overview"},{"title":"Requirements","icon":"list-check","href":"/self-hosting/requirements"}]},{"group":"Installation","pages":[{"title":"Installation","icon":"download","href":"/self-hosting/installation"},{"title":"Docker","icon":"docker","href":"/self-hosting/docker"}]},{"group":"Configuration","pages":[{"title":"Configuration","description":"Configure TryPost environment variables","icon":"gear","href":"/self-hosting/configuration"},{"title":"AI Providers","icon":"microchip-ai","href":"/self-hosting/ai"},{"title":"Production Setup","description":"Deploy TryPost to a production environment","icon":"rocket","href":"/self-hosting/production"},{"title":"Upgrading","href":"/self-hosting/upgrading"}]}]}]},"basePath":"","title":"AI Providers - TryPost Docs","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":[],"chunks":[]}