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?#

  1. Sign in to the console
  2. Go to SettingsAPI Keys
  3. Click Create API Key
  4. Copy and securely store the key

How do I rotate API keys?#

  1. Create a new API key
  2. Update your application to use the new key
  3. Verify it works
  4. Delete the old key

Platform Connections#

How do I connect WhatsApp?#

  1. Create a WhatsApp Business Account in Meta Business Manager
  2. In Outeract, click Add ConnectionWhatsApp Business
  3. Click Connect with Meta and complete OAuth
  4. 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).

Use link codes:

  1. User requests code on Platform A
  2. User enters code on Platform B
  3. 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?#

  1. 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 type message.inbound
  2. Handle webhooks at your endpoint
  3. 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 endpoint

Data & 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... seconds

Are 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?#

Where can I report bugs?#

GitHub Issues: github.com/parob/outeract

Is there a community?#