Setting Up Real Credentials
This guide walks through connecting each supported integration to Made Open using real credentials.
Prerequisites
- Made Open hub running locally (
pnpm hub) or deployed - Supabase running locally (
supabase start) or a hosted Supabase project - Web app running (
pnpm web) — Settings page athttp://localhost:3000/settings
Twilio (Voice + SMS)
Twilio uses manual credential entry (Account SID + Auth Token). Twilio is currently the only integration whose domains are wired into the hub's capability manifest (TWILIO_MANIFEST in @made-open/shared), so connecting Twilio is what drives GET /api/capabilities to return active voice/SMS/video domains.
- Create a Twilio account at twilio.com
- From the Twilio Console, copy your Account SID and Auth Token
- Buy a phone number ($1/month) — ensure it's SMS and voice-capable
- In Made Open: open Settings, find the Twilio credential card, click Connect
- Enter Account SID, Auth Token, and Phone Number — these map to the credential fields
accountSid,authToken,phoneNumberrequired by the manifest - Verify: the Twilio card shows "Connected" and capabilities like "Voice Calls" and "SMS Messaging" appear active on the Dashboard
- Test: Make a call or send SMS from the Calls or Conversations page
Microsoft 365 (Contacts + Calendar + Email + OneDrive + Tasks)
Microsoft 365 uses OAuth — click "Connect" and sign in with your Microsoft account.
Azure AD App Registration (one-time setup)
- Go to portal.azure.com → Azure Active Directory → App registrations → New registration
- Name:
Made Open(or any name) - Supported account types: Single tenant (or multi-tenant if needed)
- Redirect URI:
http://localhost:4101/api/oauth/microsoft/callback(Web platform) - Click Register
Configure API Permissions
- In your app registration → API permissions → Add a permission → Microsoft Graph → Delegated permissions
- Add these delegated permissions (matches the scopes requested by
apps/hub/src/api/routes/microsoftOAuth.ts):User.ReadContacts.ReadCalendars.ReadMail.ReadMail.ReadWriteMail.SendMailboxSettings.ReadWriteFiles.ReadTasks.Readoffline_access
- Click Grant admin consent (requires admin role)
Create Client Secret
- Go to Certificates & secrets → New client secret
- Set a description and expiry (e.g., 24 months)
- Copy the Value immediately — it's only shown once
Configure Hub Environment
Add to your .env file (or set environment variables):
MICROSOFT_CLIENT_ID=<your-app-client-id>
MICROSOFT_CLIENT_SECRET=<your-client-secret-value>
MICROSOFT_REDIRECT_URI=http://localhost:4101/api/oauth/microsoft/callback
MICROSOFT_TENANT_ID=<your-tenant-id> # or 'common' for multi-tenant
Connect in Made Open
- Start the hub:
pnpm hub - Open Settings at
http://localhost:3000/settings - Click Connect on the Microsoft 365 card — this hits
/api/oauth/microsoft/authorize - Sign in with your Microsoft account and approve permissions
- You'll be redirected back to Settings with
?connected=microsoft365and a success message
Note: at HEAD, Microsoft 365 is stored in the credential wallet and exposed via the settings UI's
CAPABILITY_REGISTRY, but the hub's manifest-based capability filter (/api/capabilities) currently only activates Twilio domains. Contact sync and other Microsoft 365 features still run via the ms-graph connector plugin.
Verify
- Contacts appear on the Contacts page within 15 minutes (connector syncs every 15min)
- Calendar events appear on the Calendar page
- Emails appear in Conversations
- OneDrive files sync to Documents
- To Do tasks sync to your task list
OpenRouter (AI Chat)
OpenRouter uses manual API key entry. Field key: apiKey.
- Create an account at openrouter.ai
- Go to Keys → Create Key
- Copy the API key (starts with
sk-or-v1-) - In Made Open: open Settings, click Connect on the OpenRouter card
- Paste the API key into the API Key field
- Verify: AI Assistant page shows model responses
Ollama (Local AI)
Ollama provides local AI inference — no API key needed, just a URL.
- Install Ollama from ollama.com/download
- Pull a model:
ollama pull llama3.2 - Ollama runs on
http://localhost:11434by default - In Made Open: open Settings, click Connect on the Ollama card
- Enter the Base URL (field key
baseUrl) — default ishttp://localhost:11434 - Verify: AI queries route to your local model when OpenRouter is not configured
Troubleshooting
| Problem | Solution |
|---|---|
| "Token expired" error | Re-authorize Microsoft 365 in Settings — tokens refresh automatically, but the refresh token itself can expire after 90 days of inactivity |
| Contacts not syncing | Check hub logs for connector errors. Verify Contacts.Read permission was granted and admin consent was given |
| Calendar events missing | Ensure Calendars.Read permission is granted. The connector syncs events within a 90-day window |
| SMS not sending | Verify your Twilio phone number is SMS-capable (check in Twilio Console) |
| OAuth redirect fails | Ensure MICROSOFT_REDIRECT_URI matches exactly what's configured in Azure AD (including port) |
| "Invalid client" error | Double-check MICROSOFT_CLIENT_ID and MICROSOFT_CLIENT_SECRET in your .env file |
| OneDrive files not appearing | Ensure Files.Read permission is granted. Only recently modified files are synced |
| AI not responding | Check that your OpenRouter API key is valid and has credits, or that Ollama is running locally |