Frequently Asked Questions#
General#
What is Outeract?#
Outeract is a unified messaging infrastructure that lets you send and receive messages across multiple platforms (WhatsApp, Instagram, Telegram, Slack, etc.) through a single API.
Which platforms are supported?#
- WhatsApp Business
- Instagram Business
- Facebook Messenger
- Telegram
- Slack
- Discord
- SMS (Twilio)
- Email (Maileroo)
- iMessage (LoopMessage)
Is there a free tier?#
Yes. Every account gets a $10 free usage credit each month, which covers roughly 1,000 API calls. That’s effectively a free tier for development and small projects.
How does pricing work?#
Pricing is usage-based: $0.01 per API call and $1.00 per GB/month of storage, with the $10 monthly credit applied first. There are no plans or tiers. For volume pricing, contact us.
Authentication#
How do I get an API key?#
- Sign in to the console
- Go to Settings → API Keys
- Click Create API Key
- Copy and securely store the key
How do I rotate API keys?#
- Create a new API key
- Update your application to use the new key
- Verify it works
- Delete the old key
Platform Connections#
How do I connect WhatsApp?#
- Create a WhatsApp Business Account in Meta Business Manager
- In Outeract, click Add Connection → WhatsApp Business
- Click Connect with Meta and complete OAuth
- Done! Your connection is ready.
Can I connect multiple accounts of the same platform?#
Yes! You can have multiple WhatsApp numbers, multiple Telegram bots, etc. Each is a separate platform connection.
What happens if my OAuth token expires?#
For OAuth platforms (WhatsApp, Instagram, Facebook), tokens are automatically refreshed. If issues occur, reconnect via OAuth.
How do I test without affecting production?#
Create a separate application for development. Applications fully isolate users, events, and platform connections. Connect a test bot or number (e.g., your own Telegram bot) and message it yourself. The $10 monthly usage credit comfortably covers development traffic.
Messaging#
What’s the maximum message length?#
Varies by platform:
- WhatsApp: 4,096 characters
- Telegram: 4,096 characters
- Instagram: 1,000 characters
- Facebook: 2,000 characters
- SMS: 1,600 characters (concatenated)
- Discord: 2,000 characters
Can I send files/attachments?#
Yes! Upload files first, then attach to messages:
mutation {
sendMessage(
recipientUserId: "123e4567-e89b-12d3-a456-426614174000"
message: "Here's the file"
fileIds: ["file-uuid"]
) {
id
}
}What’s the 24-hour messaging window?#
WhatsApp, Instagram, and Facebook require users to message you first. After their last message, you have 24 hours to respond freely. Outside this window, you must use pre-approved templates.
Outeract detects messaging window errors from each platform and returns a specific OUTSIDE_MESSAGING_WINDOW error (rather than a generic failure). The failed message event is still recorded with delivery_status.failed_at and delivery_status.error_type set to messaging_window_closed, so you can query for failed attempts.
When platforms send asynchronous failure notifications (e.g., WhatsApp’s "failed" status webhooks), Outeract creates a system.message_delivery_failed event and delivers it to your webhook subscriptions. Subscribe to system.message_delivery_failed or system.* to receive these notifications.
How do I send messages outside the 24-hour window?#
Use pre-approved message templates via the template parameter on sendMessage. For WhatsApp, templates must be created and approved in Meta Business Manager before use.
mutation {
sendMessage(
recipientUserId: "123e4567-e89b-12d3-a456-426614174000"
platformConnectionId: "whatsapp-connection-uuid"
template: {
name: "order_update"
language: "en_US"
components: [
{
type: "body"
parameters: [
{ type: "text", text: "John" }
{ type: "text", text: "Your order has shipped!" }
]
}
]
}
) {
id
eventTypeName
}
}The template model is platform-agnostic, and each platform integration translates it into the appropriate wire format. See the platform-specific docs for details on supported component types.
Users & Identity#
What’s the difference between User and Platform User?#
- User: Abstract identity (a person)
- Platform User: Concrete identity on a specific platform (phone number, username)
One User can have multiple Platform Users (same person on WhatsApp and Slack).
How do I link users across platforms?#
Use link codes:
- User requests code on Platform A
- User enters code on Platform B
- Both platform users are linked to the same user
Can I merge duplicate users?#
Yes. Transfer all identities from the duplicate to the user you want to keep:
mutation {
transferIdentities(
sourceUserId: "duplicate-user-uuid"
targetUserId: "user-to-keep-uuid"
) {
id
identities { id }
}
}For user-initiated linking across platforms, use link codes instead.
Webhooks#
How do I receive incoming messages?#
- Create a webhook subscription in the console under Settings → Webhooks, pointing it at your endpoint (e.g.
https://myapp.com/webhooks) and match the event typemessage.inbound - Handle webhooks at your endpoint
- Verify signatures for security
Why aren’t my webhooks being delivered?#
Common issues:
- Endpoint not returning 200 within 30 seconds
- SSL certificate issues
- Firewall blocking requests
- Signature verification failing
Check the delivery log on the subscription’s detail page in the console. It records the status, HTTP status and error message for every attempt.
How do I test webhooks locally?#
Use ngrok:
ngrok http 3000
# Use the HTTPS URL as your webhook endpointData & Privacy#
Where is data stored?#
Data is stored in secure cloud infrastructure with encryption at rest.
How long is data retained?#
- Messages: 90 days by default (configurable)
- Events: 90 days
- Files: 30 days after last access
Is data encrypted?#
Yes:
- TLS 1.3 for all connections
- Encryption at rest for stored data
- Secrets stored encrypted
Can I export my data?#
Yes, contact support for data export requests.
Rate Limits#
What are the API rate limits?#
Rate limits are per API key: 100 requests/minute by default, configurable per key via rateLimitPerMinute (up to 1,000). See Rate Limits.
What if I hit rate limits?#
Implement exponential backoff:
time.sleep(2 ** attempt) # 2, 4, 8, 16... secondsAre platform rate limits separate?#
Yes, each platform has its own limits in addition to API limits.
Billing#
How is usage billed?#
Billing is usage-based: $0.01 per API call and $1.00 per GB/month of storage. Every account gets a $10 free usage credit each month, applied before any charges.
What happens when my monthly credit runs out?#
You’re billed for usage beyond the credit. Nothing is cut off and there’s no plan to upgrade.
Do I need to pick a plan?#
No. There are no plans or tiers. For volume pricing, contact us.
Technical#
Is there a GraphQL playground?#
Yes: api.outeract.com
Are there SDKs?#
Official SDKs coming soon:
- Python
- Node.js
- Go
Can I self-host Outeract?#
No. Outeract is a fully hosted service at api.outeract.com. For volume pricing or SLA requirements, contact us.
Getting Help#
How do I contact support?#
- Email: support@outeract.com
- Console: Help → Contact Support
Where can I report bugs?#
GitHub Issues: github.com/parob/outeract
Is there a community?#
- Discord: discord.gg/outeract
- GitHub Discussions