Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.
OpenRouter is the gateway every AI feature in ReachCrew runs through, using your own provider keys. You need it for reply classification and drafts, AI columns and call transcription. Without it those features cannot run.
An account with at least one model provider (OpenAI, Anthropic, Google and so on) and an API key from it. ReachCrew works only in “bring your own key” (BYOK) mode.
Reply classification and drafts in the CRM, using the default model.
AI columns in Tables, each on one of your allowed models. See AI columns.
Call transcription of WhatsApp recordings, using the transcription model.
Other internal tasks, such as the formula generator, which use the default model.
Costs. ReachCrew adds no markup and shows no prices. Model usage on a BYOK key is billed by the model provider to your own account with them. Anything OpenRouter itself charges is billed by OpenRouter: see its FAQ and BYOK guide for current terms.
This page covers the OpenRouter side and the connection. For what each control in the app does, see AI provider.
Sign up at openrouter.ai. OpenRouter’s FAQ says you add credits before you create keys and start using the API: open Settings → Credits and make a deposit. Your model calls run on your own provider keys (next steps), but the credits page is where your OpenRouter balance lives.
2
Add your provider keys to OpenRouter
In OpenRouter’s BYOK settings, add the API key of each provider you want ReachCrew to use (see OpenRouter’s BYOK guide). Keep them in the prioritized section. A key in the fallback section is shown in ReachCrew but cannot be selected.
3
Set shared capacity to never
On each provider’s page in OpenRouter, set the shared capacity option to never use shared capacity. The wording on OpenRouter’s current page offers “Never use shared capacity for models this key applies to” and “Never use shared capacity for any model on this provider”. ReachCrew’s own checkbox quotes the older phrase Never use shared capacity on this provider. Choose the option that stops shared capacity for every model on the provider, so no request ever spends OpenRouter’s capacity or credits on that provider. OpenRouter does not expose this setting through its API, so you confirm it in ReachCrew later.
4
Create an inference key
Open Settings → Keys, create a key, give it a name and, if you like, a credit limit, and copy it. It starts with sk-or-v1-.
5
Create a management key
Open Settings → Management keys, click Create New Key, give it a name and an expiration date, and copy it. It starts with sk-or-mgmt-. A management key cannot run models. ReachCrew uses it only to read which provider keys you added in BYOK, so it can list them.
6
Connect OpenRouter in ReachCrew
Go to Settings → AI provider. In the OpenRouter account section click Connect OpenRouter and fill in:
Account name (optional). Defaults to “OpenRouter account”.
Inference API key.
Management API key.
Click Verify & connect. ReachCrew checks the inference key, reads your BYOK keys with the management key, and requires at least one active prioritized BYOK key. The keys are stored encrypted. The card then reads Verified and ready to use. You can add a second account with Connect another account and pick the active one.
Three fields, then Verify and connect.
7
Choose providers and models
Under Providers and models, click Refresh providers if you added a key a moment ago. Switch on the providers ReachCrew may use, open each list, and tick the models you allow. Only ticked models appear in AI columns.
8
Set the default model
Under Default model, pick a Provider and model. Only ticked text models that support structured output are listed. Every internal AI task uses it, and new compatible AI columns select it automatically.
9
Choose the transcription model (optional)
Under Call transcription model, pick a model that accepts audio input, for example a Gemini model. Leave it on Off and recordings are not transcribed. See Transcription.
10
Confirm shared capacity and save
Tick Never use shared capacity (under Shared capacity) to confirm step 3, then click Save AI settings. Saving needs a connected account, at least one provider and one model, a default model and the confirmation. Until you confirm it, ReachCrew blocks every model call.
Switching to a different OpenRouter account clears your providers, models, default model, transcription model and the shared capacity confirmation. Set them up again.
For every text request ReachCrew sends OpenRouter provider.only and provider.order set to the one provider of the model you chose, allow_fallbacks: false and require_parameters: true. Image requests use the same single-provider pin with fallbacks off, through OpenRouter’s image endpoint (which does not support require_parameters).Why: with fallbacks on, a failed request could silently move to another provider, or to OpenRouter’s shared capacity, spending OpenRouter’s credits and sending your data to a provider you never approved. With fallbacks off, a failure is a failure. It costs you some resilience and keeps your data and spend on the providers and keys you chose. See OpenRouter’s provider routing reference.OPENROUTER_SITE_URL sets the attribution URL sent to OpenRouter.
The transcription model is off by default. While it is off, recordings are not transcribed, and an attempt fails with “Transcription is off: choose a transcription model in Settings → AI provider”. If you later remove the chosen model or provider from the allowed list, it resets to Off. Gemini models merge the audio channels, so who spoke is inferred rather than labelled.
Enter both the inference API key and management API key.
Both fields are required. The management key is a separate key.
Use an OpenRouter inference key here; management keys cannot run models
You pasted a sk-or-mgmt- key into Inference API key. Use a key from Settings → Keys.
No active prioritized BYOK credentials were found in this OpenRouter workspace
You have not added a provider key in OpenRouter BYOK, or it is disabled or in the fallback section. Add one, then connect again.
OpenRouter request failed (401)
OpenRouter rejected the key: it is wrong, deleted, expired or past its credit limit. Create a new one. Management keys can expire, so set the expiry you want.
Connect OpenRouter in AI Settings
No account is connected. Do step 6.
Choose a default OpenRouter model in AI Settings
No default model is saved. Do steps 7 and 8, then Save AI settings.
OpenRouter BYOK-only routing is not confirmed in AI Settings
Tick Never use shared capacity and save.
Model ... is not enabled for ... in AI Settings
The model or its provider is not ticked. Tick it under Providers and models.
Reconnect OpenRouter in AI Settings
The saved connection is unavailable or no longer verified. Connect again.
Transcription is off: choose a transcription model in Settings → AI provider
Pick a transcription model and save.
No BYOK providers found
Add a key in OpenRouter’s BYOK settings, then click Refresh providers. A provider is greyed out when it has no prioritized key or OpenRouter returned no models for it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ReachCrew","description":"The open-source AI SDR: find leads, reach them on email, LinkedIn and WhatsApp, and let AI work every reply, from one workspace you run yourself.","colors":{"primary":"#335cff","light":"#5b7bff","dark":"#1f3bad"},"logo":{"light":"https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/logo-light.svg?fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=5f8cfd64a1c15e42c96a309144aac39a","dark":"https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/logo-dark.svg?fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=c8de838080aa865de4a2aecef52e8077","href":"https://reachcrew.ai"},"favicon":"https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/logo.svg?fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=850db680a389217504579943797affd4","navbar":{"links":[{"href":"/help","label":"Get help"},{"href":"https://reachcrew.ai","label":"Website"}],"primary":{"type":"github","href":"https://github.com/rishav887/reachcrew"}},"footer":{"socials":{"github":"https://github.com/rishav887/reachcrew","website":"https://reachcrew.ai"},"links":[{"header":"Community","items":[{"label":"Ask a question","href":"https://github.com/rishav887/reachcrew/discussions"},{"label":"Report a bug","href":"https://github.com/rishav887/reachcrew/issues/new?template=bug_report.yml"},{"label":"Request a feature","href":"https://github.com/rishav887/reachcrew/issues/new?template=feature_request.yml"},{"label":"Report a security issue","href":"https://github.com/rishav887/reachcrew/security/advisories/new"}]},{"header":"Project","items":[{"label":"GitHub","href":"https://github.com/rishav887/reachcrew"},{"label":"Changelog","href":"https://github.com/rishav887/reachcrew/blob/main/CHANGELOG.md"},{"label":"Contributing","href":"https://github.com/rishav887/reachcrew/blob/main/CONTRIBUTING.md"},{"label":"License (MIT)","href":"https://github.com/rishav887/reachcrew/blob/main/LICENSE"}]}]},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"recahcrew","hasAudioNarration":false,"actualSubdomain":"recahcrew","customDomains":[],"gitSource":{"type":"github","owner":"rishav887","repo":"linkedin-outreach-platform","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":"","_id":"6af6f68f902237199e0ed1f3"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af6f6ac902237199e0ed38d","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"Guides","count":29},{"language":"default","tag":"Self-hosting","count":29},{"language":"default","tag":"Integrations","count":9},{"language":"default","tag":"AI CRM","count":5},{"language":"default","tag":"Developers","count":4},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Email","count":3},{"language":"default","tag":"Leads","count":3},{"language":"default","tag":"LinkedIn","count":3},{"language":"default","tag":"Tables","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"integrations/openrouter","slug":"/integrations/openrouter","pageMetadata":{"title":"OpenRouter","description":"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.","icon":"sparkles","href":"/integrations/openrouter"},"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: \"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.\"\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`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Check,Frame,Heading,Info,Note,OptimizedImage,Step,Steps,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Check)_missingMdxReference(`Check`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`OpenRouter is the gateway every AI feature in ReachCrew runs through, using your own provider keys. You need it for reply classification and drafts, AI columns and call transcription. Without it those features cannot run.`}),`\n`,_jsxs(Info,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`What you need`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`An `,_jsx(_components.a,{href:`https://openrouter.ai`,children:`OpenRouter`}),` account.`]}),`\n`,_jsx(_components.li,{children:`An account with at least one model provider (OpenAI, Anthropic, Google and so on) and an API key from it. ReachCrew works only in “bring your own key” (BYOK) mode.`}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`owner`}),` or `,_jsx(_components.strong,{children:`admin`}),` role in ReachCrew.`]}),`\n`,_jsx(_components.li,{children:`About 15 minutes.`}),`\n`]})]}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`What uses AI:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reply classification and drafts`}),` in the CRM, using the default model.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`AI columns`}),` in Tables, each on one of your allowed models. See `,_jsx(_components.a,{href:`/tables/ai-columns`,children:`AI columns`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Call transcription`}),` of WhatsApp recordings, using the transcription model.`]}),`\n`,_jsx(_components.li,{children:`Other internal tasks, such as the formula generator, which use the default model.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Costs.`}),` ReachCrew adds no markup and shows no prices. Model usage on a BYOK key is billed by the model provider to your own account with them. Anything OpenRouter itself charges is billed by OpenRouter: see its `,_jsx(_components.a,{href:`https://openrouter.ai/docs/faq`,children:`FAQ`}),` and `,_jsx(_components.a,{href:`https://openrouter.ai/docs/guides/overview/auth/byok`,children:`BYOK guide`}),` for current terms.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This page covers the OpenRouter side and the connection. For what each control in the app does, see `,_jsx(_components.a,{href:`/workspace/ai-provider`,children:`AI provider`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`set-it-up`,children:`Set it up`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Create an OpenRouter account and add credits`,children:_jsxs(_components.p,{children:[`Sign up at `,_jsx(_components.a,{href:`https://openrouter.ai`,children:`openrouter.ai`}),`. OpenRouter’s FAQ says you add credits before you create keys and start using the API: open `,_jsx(_components.a,{href:`https://openrouter.ai/settings/credits`,children:`Settings → Credits`}),` and make a deposit. Your model calls run on your own provider keys (next steps), but the credits page is where your OpenRouter balance lives.`]})}),_jsx(Step,{title:`Add your provider keys to OpenRouter`,children:_jsxs(_components.p,{children:[`In OpenRouter’s `,_jsx(_components.a,{href:`https://openrouter.ai/integrations`,children:`BYOK settings`}),`, add the API key of each provider you want ReachCrew to use (see `,_jsx(_components.a,{href:`https://openrouter.ai/docs/guides/overview/auth/byok`,children:`OpenRouter’s BYOK guide`}),`). Keep them in the prioritized section. A key in the fallback section is shown in ReachCrew but cannot be selected.`]})}),_jsx(Step,{title:`Set shared capacity to never`,children:_jsxs(_components.p,{children:[`On each provider’s page in OpenRouter, set the shared capacity option to never use shared capacity. The wording on OpenRouter’s current page offers “Never use shared capacity for models this key applies to” and “Never use shared capacity for any model on this provider”. ReachCrew’s own checkbox quotes the older phrase `,_jsx(_components.strong,{children:`Never use shared capacity on this provider`}),`. Choose the option that stops shared capacity for every model on the provider, so no request ever spends OpenRouter’s capacity or credits on that provider. OpenRouter does not expose this setting through its API, so you confirm it in ReachCrew later.`]})}),_jsx(Step,{title:`Create an inference key`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.a,{href:`https://openrouter.ai/settings/keys`,children:`Settings → Keys`}),`, create a key, give it a name and, if you like, a credit limit, and copy it. It starts with `,_jsx(_components.code,{children:`sk-or-v1-`}),`.`]})}),_jsx(Step,{title:`Create a management key`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.a,{href:`https://openrouter.ai/settings/management-keys`,children:`Settings → Management keys`}),`, click `,_jsx(_components.strong,{children:`Create New Key`}),`, give it a name and an expiration date, and copy it. It starts with `,_jsx(_components.code,{children:`sk-or-mgmt-`}),`. A management key cannot run models. ReachCrew uses it only to read which provider keys you added in BYOK, so it can list them.`]})}),_jsxs(Step,{title:`Connect OpenRouter in ReachCrew`,children:[_jsxs(_components.p,{children:[`Go to `,_jsx(_components.strong,{children:`Settings → AI provider`}),`. In the `,_jsx(_components.strong,{children:`OpenRouter account`}),` section click `,_jsx(_components.strong,{children:`Connect OpenRouter`}),` and fill in:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Account name`}),` (optional). Defaults to “OpenRouter account”.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Inference API key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Management API key`}),`.`]}),`\n`]}),_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Verify \u0026 connect`}),`. ReachCrew checks the inference key, reads your BYOK keys with the management key, and requires at least one active prioritized BYOK key. The keys are stored encrypted. The card then reads `,_jsx(_components.strong,{children:`Verified and ready to use`}),`. You can add a second account with `,_jsx(_components.strong,{children:`Connect another account`}),` and pick the active one.`]}),_jsx(Frame,{caption:`Three fields, then Verify and connect.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/screenshots/app/openrouter-connect.png?fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=4731e06c0b91279a12b49c2169adcead`,alt:`The Connect OpenRouter form on the AI provider page with account name, inference API key and management API key fields and a Verify and connect button`,\"data-og-width\":`2880`,width:`2880`,\"data-og-height\":`1800`,height:`1800`,\"data-path\":`assets/screenshots/app/openrouter-connect.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/screenshots/app/openrouter-connect.png?w=280\u0026fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=2887127146a7b6ebd9680c46f8da30df 280w, https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/screenshots/app/openrouter-connect.png?w=560\u0026fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=69a2db3969e1ff60367f60242aa6d43a 560w, https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/screenshots/app/openrouter-connect.png?w=840\u0026fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=b728335b639664fa1d8d40db4b1b071d 840w, https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/screenshots/app/openrouter-connect.png?w=1100\u0026fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=fcaa8e9d91ec158185715d716483d0c3 1100w, https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/screenshots/app/openrouter-connect.png?w=1650\u0026fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=e648e5bfbb82d17b0e6b312877df08ff 1650w, https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/screenshots/app/openrouter-connect.png?w=2500\u0026fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=f43178082307499f76209d40c37b524a 2500w`})})]}),_jsx(Step,{title:`Choose providers and models`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Providers and models`}),`, click `,_jsx(_components.strong,{children:`Refresh providers`}),` if you added a key a moment ago. Switch on the providers ReachCrew may use, open each list, and tick the models you allow. Only ticked models appear in AI columns.`]})}),_jsx(Step,{title:`Set the default model`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Default model`}),`, pick a `,_jsx(_components.strong,{children:`Provider and model`}),`. Only ticked text models that support structured output are listed. Every internal AI task uses it, and new compatible AI columns select it automatically.`]})}),_jsx(Step,{title:`Choose the transcription model (optional)`,children:_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Call transcription model`}),`, pick a model that accepts audio input, for example a Gemini model. Leave it on `,_jsx(_components.strong,{children:`Off`}),` and recordings are not transcribed. See `,_jsx(_components.a,{href:`#transcription-model`,children:`Transcription`}),`.`]})}),_jsx(Step,{title:`Confirm shared capacity and save`,children:_jsxs(_components.p,{children:[`Tick `,_jsx(_components.strong,{children:`Never use shared capacity`}),` (under `,_jsx(_components.strong,{children:`Shared capacity`}),`) to confirm step 3, then click `,_jsx(_components.strong,{children:`Save AI settings`}),`. Saving needs a connected account, at least one provider and one model, a default model and the confirmation. Until you confirm it, ReachCrew blocks every model call.`]})})]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Switching to a different OpenRouter account clears your providers, models, default model, transcription model and the shared capacity confirmation. Set them up again.`})}),`\n`,_jsx(Heading,{level:`2`,id:`provider-pinning`,children:`Provider pinning`}),`\n`,_jsxs(_components.p,{children:[`For every text request ReachCrew sends OpenRouter `,_jsx(_components.code,{children:`provider.only`}),` and `,_jsx(_components.code,{children:`provider.order`}),` set to the one provider of the model you chose, `,_jsx(_components.code,{children:`allow_fallbacks: false`}),` and `,_jsx(_components.code,{children:`require_parameters: true`}),`. Image requests use the same single-provider pin with fallbacks off, through OpenRouter’s image endpoint (which does not support `,_jsx(_components.code,{children:`require_parameters`}),`).`]}),`\n`,_jsxs(_components.p,{children:[`Why: with fallbacks on, a failed request could silently move to another provider, or to OpenRouter’s shared capacity, spending OpenRouter’s credits and sending your data to a provider you never approved. With fallbacks off, a failure is a failure. It costs you some resilience and keeps your data and spend on the providers and keys you chose. See OpenRouter’s `,_jsx(_components.a,{href:`https://openrouter.ai/docs/guides/routing/provider-selection`,children:`provider routing`}),` reference.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`OPENROUTER_SITE_URL`}),` sets the attribution URL sent to OpenRouter.`]}),`\n`,_jsx(Heading,{level:`2`,id:`transcription-model`,children:`Transcription model`}),`\n`,_jsxs(_components.p,{children:[`The transcription model is `,_jsx(_components.strong,{children:`off by default`}),`. While it is off, recordings are not transcribed, and an attempt fails with “Transcription is off: choose a transcription model in Settings → AI provider”. If you later remove the chosen model or provider from the allowed list, it resets to `,_jsx(_components.strong,{children:`Off`}),`. Gemini models merge the audio channels, so who spoke is inferred rather than labelled.`]}),`\n`,_jsx(Heading,{level:`2`,id:`check-that-it-works`,children:`Check that it works`}),`\n`,_jsx(Check,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Settings → AI provider`}),` shows the account as `,_jsx(_components.strong,{children:`Verified and ready to use`}),`, and the footer shows all four steps complete.`]})}),`\n`,_jsxs(_components.p,{children:[`Add an AI column to a table and run it on one row (`,_jsx(_components.a,{href:`/tables/ai-columns`,children:`AI columns`}),`). In OpenRouter’s `,_jsx(_components.a,{href:`https://openrouter.ai/activity`,children:`Activity`}),` page you should see the request on the provider you chose.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Enter both the inference API key and management API key.`,id:`enter-both-the-inference-api-key-and-management-api-key`,children:_jsx(_components.p,{children:`Both fields are required. The management key is a separate key.`})}),_jsx(Accordion,{title:`Use an OpenRouter inference key here; management keys cannot run models`,id:`use-an-openrouter-inference-key-here-management-keys-cannot-run-models`,children:_jsxs(_components.p,{children:[`You pasted a `,_jsx(_components.code,{children:`sk-or-mgmt-`}),` key into `,_jsx(_components.strong,{children:`Inference API key`}),`. Use a key from Settings → Keys.`]})}),_jsx(Accordion,{title:`No active prioritized BYOK credentials were found in this OpenRouter workspace`,id:`no-active-prioritized-byok-credentials-were-found-in-this-openrouter-workspace`,children:_jsx(_components.p,{children:`You have not added a provider key in OpenRouter BYOK, or it is disabled or in the fallback section. Add one, then connect again.`})}),_jsx(Accordion,{title:`OpenRouter request failed (401)`,id:`openrouter-request-failed-401`,children:_jsx(_components.p,{children:`OpenRouter rejected the key: it is wrong, deleted, expired or past its credit limit. Create a new one. Management keys can expire, so set the expiry you want.`})}),_jsx(Accordion,{title:`Connect OpenRouter in AI Settings`,id:`connect-openrouter-in-ai-settings`,children:_jsx(_components.p,{children:`No account is connected. Do step 6.`})}),_jsx(Accordion,{title:`Choose a default OpenRouter model in AI Settings`,id:`choose-a-default-openrouter-model-in-ai-settings`,children:_jsxs(_components.p,{children:[`No default model is saved. Do steps 7 and 8, then `,_jsx(_components.strong,{children:`Save AI settings`}),`.`]})}),_jsx(Accordion,{title:`OpenRouter BYOK-only routing is not confirmed in AI Settings`,id:`openrouter-byok-only-routing-is-not-confirmed-in-ai-settings`,children:_jsxs(_components.p,{children:[`Tick `,_jsx(_components.strong,{children:`Never use shared capacity`}),` and save.`]})}),_jsx(Accordion,{title:`Model ... is not enabled for ... in AI Settings`,id:`model-is-not-enabled-for-in-ai-settings`,children:_jsxs(_components.p,{children:[`The model or its provider is not ticked. Tick it under `,_jsx(_components.strong,{children:`Providers and models`}),`.`]})}),_jsx(Accordion,{title:`Reconnect OpenRouter in AI Settings`,id:`reconnect-openrouter-in-ai-settings`,children:_jsx(_components.p,{children:`The saved connection is unavailable or no longer verified. Connect again.`})}),_jsx(Accordion,{title:`Transcription is off: choose a transcription model in Settings → AI provider`,id:`transcription-is-off-choose-a-transcription-model-in-settings-ai-provider`,children:_jsx(_components.p,{children:`Pick a transcription model and save.`})}),_jsx(Accordion,{title:`No BYOK providers found`,id:`no-byok-providers-found`,children:_jsxs(_components.p,{children:[`Add a key in OpenRouter’s BYOK settings, then click `,_jsx(_components.strong,{children:`Refresh providers`}),`. A provider is greyed out when it has no prioritized key or OpenRouter returned no models for it.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`next`,children:`Next`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`AI provider`,icon:`sparkles`,href:`/workspace/ai-provider`,children:_jsx(_components.p,{children:`Every control on the AI provider page.`})}),_jsx(Card,{title:`AI columns`,icon:`table`,href:`/tables/ai-columns`,children:_jsx(_components.p,{children:`Use your models per row.`})}),_jsx(Card,{title:`Cloudflare R2`,icon:`cloud`,href:`/integrations/cloudflare-r2`,children:_jsx(_components.p,{children:`Where call recordings live before transcription.`})}),_jsx(Card,{title:`Integrations overview`,icon:`plug`,href:`/integrations`,children:_jsx(_components.p,{children:`All integrations and who can connect them.`})})]})]})}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":"OpenRouter","description":"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.","icon":"sparkles","href":"/integrations/openrouter"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Set it up","slug":"set-it-up","depth":2,"children":[]},{"title":"Provider pinning","slug":"provider-pinning","depth":2,"children":[]},{"title":"Transcription model","slug":"transcription-model","depth":2,"children":[]},{"title":"Check that it works","slug":"check-that-it-works","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Next","slug":"next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"recahcrew","siteName":"ReachCrew","title":"OpenRouter - ReachCrew","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-13T11:38:39.015Z","originalFileLocation":"integrations/openrouter.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;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=\"system\"}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=\"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ReachCrew\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/recahcrew/PDKJgs23Hy0bUg-G/_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/recahcrew/PDKJgs23Hy0bUg-G/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/recahcrew/PDKJgs23Hy0bUg-G/_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/recahcrew/PDKJgs23Hy0bUg-G/_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/recahcrew/PDKJgs23Hy0bUg-G/_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/recahcrew/PDKJgs23Hy0bUg-G/_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/recahcrew/PDKJgs23Hy0bUg-G/_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/recahcrew/PDKJgs23Hy0bUg-G/_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/recahcrew/PDKJgs23Hy0bUg-G/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"OpenRouter - ReachCrew\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ReachCrew\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://recahcrew.mintlify.app/integrations/openrouter\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://recahcrew.mintlify.site/_mintlify/api/og/v2?division=Integrations\u0026amp;title=OpenRouter\u0026amp;description=Create+OpenRouter+keys%2C+add+credits+and+provider+keys%2C+connect+them+in+ReachCrew+and+choose+the+models%2C+with+provider+pinning+and+transcription.\u0026amp;theme=2714b6d21ebe045728904557\u0026amp;signature=57ba634de5e992a1edebf8870264dd6f646d0ec3e301060ee6b9425254d5b133\">\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=\"OpenRouter - ReachCrew\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://recahcrew.mintlify.site/_mintlify/api/og/v2?division=Integrations\u0026amp;title=OpenRouter\u0026amp;description=Create+OpenRouter+keys%2C+add+credits+and+provider+keys%2C+connect+them+in+ReachCrew+and+choose+the+models%2C+with+provider+pinning+and+transcription.\u0026amp;theme=2714b6d21ebe045728904557\u0026amp;signature=57ba634de5e992a1edebf8870264dd6f646d0ec3e301060ee6b9425254d5b133\">\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/recahcrew/PDKJgs23Hy0bUg-G/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ReachCrew\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#335cff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://recahcrew.mintlify.app/integrations/openrouter\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/openrouter.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://recahcrew.mintlify.app/#organization\",\"name\":\"ReachCrew\",\"url\":\"https://recahcrew.mintlify.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/recahcrew/b3LOEBKCy3btecGb/assets/logo-light.svg?fit=max\u0026auto=format\u0026n=b3LOEBKCy3btecGb\u0026q=85\u0026s=5f8cfd64a1c15e42c96a309144aac39a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://recahcrew.mintlify.app#website\",\"name\":\"ReachCrew\",\"url\":\"https://recahcrew.mintlify.app\",\"publisher\":{\"@id\":\"https://recahcrew.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://recahcrew.mintlify.app/integrations/openrouter#webpage\",\"url\":\"https://recahcrew.mintlify.app/integrations/openrouter\",\"name\":\"OpenRouter\",\"description\":\"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.\",\"dateModified\":\"2026-11-13T11:38:39.015Z\",\"isPartOf\":{\"@id\":\"https://recahcrew.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://recahcrew.mintlify.app/integrations/openrouter#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://recahcrew.mintlify.app/integrations/openrouter#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://recahcrew.mintlify.app/integrations\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OpenRouter\",\"item\":\"https://recahcrew.mintlify.app/integrations/openrouter\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://recahcrew.mintlify.app/integrations/openrouter#article\",\"headline\":\"OpenRouter\",\"name\":\"OpenRouter\",\"description\":\"Create OpenRouter keys, add credits and provider keys, connect them in ReachCrew and choose the models, with provider pinning and transcription.\",\"url\":\"https://recahcrew.mintlify.app/integrations/openrouter\",\"mainEntityOfPage\":{\"@id\":\"https://recahcrew.mintlify.app/integrations/openrouter#webpage\"},\"dateModified\":\"2026-11-13T11:38:39.015Z\",\"publisher\":{\"@id\":\"https://recahcrew.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://recahcrew.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ReachCrew\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"ReachCrew\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/integrations/openrouter.md","siteName":"ReachCrew","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"Self-hosting","groups":[{"group":"Self-hosting","pages":[{"title":"Self-hosting","icon":"server","href":"/self-hosting"},{"title":"Docker Compose","icon":"container","href":"/self-hosting/docker-compose"},{"title":"From source","icon":"terminal","href":"/self-hosting/from-source"},{"title":"Dokploy on a VPS","icon":"server-cog","href":"/self-hosting/dokploy"},{"title":"Your own domain","icon":"globe","href":"/self-hosting/custom-domain"},{"title":"Logs and dashboards (Grafana)","icon":"chart-line","href":"/self-hosting/observability"},{"title":"Going to production","icon":"rocket","href":"/self-hosting/production"},{"title":"Public demo","icon":"presentation","href":"/self-hosting/demo"},{"title":"Troubleshooting","icon":"life-buoy","href":"/self-hosting/troubleshooting"}]},{"group":"Configuration","pages":[{"title":"Configuration reference","icon":"sliders-horizontal","href":"/configuration"}]},{"group":"Integrations","pages":[{"title":"Integrations","icon":"plug","href":"/integrations"},{"title":"Google Workspace","icon":"mail","href":"/integrations/google-workspace"},{"title":"Gmail reply sync","icon":"inbox","href":"/integrations/gmail-reply-sync"},{"title":"Unipile","icon":"link","href":"/integrations/unipile"},{"title":"Cloudflare R2","description":"Create a Cloudflare R2 bucket and API token, connect it to ReachCrew, and store WhatsApp call recordings and contact photos privately.","icon":"cloud","href":"/integrations/cloudflare-r2"},{"title":"OpenRouter","icon":"sparkles","href":"/integrations/openrouter"},{"title":"Enrichment providers","description":"The 15 enrichment providers you can connect from Tables, what each returns, and where to find each provider's API key.","icon":"zap","href":"/integrations/enrichment-providers"},{"title":"Resend","icon":"send","href":"/integrations/resend"},{"title":"Google sign-in","icon":"log-in","href":"/integrations/google-sign-in"}]},{"group":"Policies","pages":[{"title":"Responsible use","icon":"scale","href":"/responsible-use"}]}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/development"}]}]},"basePath":"","title":"OpenRouter - ReachCrew","buildId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","deploymentId":"dpl_8hoxaqFTU7hTr6A2fUraxAyjuiZo","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-Dmj010Ph.js","DynamicMarkdown-GHvayGOn.js","zoom-image-lightbox-8gCTkA22.js","lightbox-handle-r17bVUz3.js"]}