Your experience.
Their Robono conversations.

Let your users connect their own Robono accounts and send and receive messages through your app. Integrate directly with the SDK; each user chooses whether to give it access.

Developer preview. The SDK is published on npm as @robono/linked-apps@0.1.0-preview.4. No SDK archive is offered on this website. No developer signup, app registration, API key or manual activation is required. Each user enters a code and approves inside Robono; no separate user registration or extra SMS check is needed.

One integration. Individual account connections.

Your app provides the experience. Each person approves access to their own Robono account. You do not need to operate a messaging network or connect through Robono Bridge.

Messaging and media

Read and send supported text, voice, and files. Respect the capabilities and permissions of each conversation.

Permission comes first

The user reviews your app and requested access inside Robono. They can revoke access from Linked apps.

Built for independent apps

Use the TypeScript SDK or the HTTP API. Supply your app details in code. Access is limited to each account’s approved permissions.

Connecting an entire messaging network? Explore Robono Bridge. Linked Apps is for acting on behalf of an existing Robono account.

Developer setup

  1. Install the SDK through npm

    Install the supported TypeScript SDK preview and pin its exact version:

    npm install --save-exact @robono/linked-apps@0.1.0-preview.4

    View the package on npm · Read the SDK license

    Commit your lockfile and review release notes before updating. Apps that do not use TypeScript can implement the HTTP API directly using the app details described in the integration guide.

  2. Configure your app details

    Set your app name, developer name, public website and privacy-policy URL in the SDK configuration. Robono identifies the integration automatically. There is no website form to complete, developer account to create, or client ID to request.

    Keep these details stable. App identity is supplied by your app, not verified or endorsed by Robono. Use a different app name and separate secure storage for development tests.

  3. Add “Connect Robono” to your app

    Start pairing with the SDK and show the returned code. The user enters it in Robono → Linked apps → Connect an app, then reviews the app, account, and permissions. The SDK completes the connection after approval. Handle denial and expired codes too.

    Use the user linking guide for your help link. Once connected, show the linked account and a Disconnect option in your app. Never ask users to share a Robono SMS verification code with your app.

  4. Test the complete user experience

    Follow the implementation and test checklist below, including text and voice, offline recovery, user revocation and account switching. Test every platform you support before offering the feature to users. SDK installation alone does not authorize any user account.

Ask only for the access your app needs

Available permissions in the preview API
PermissionAllows your app to
account:readIdentify the account that approved your app.
messages:readRead available conversations and messages, download media, and synchronize changes.
messages:sendSend messages and upload media to permitted conversations.
receipts:writeMark messages delivered, read, or heard when those actions actually happen.

Permission does not override a contact's block, a disconnected relationship, a network's communication rules, or required approvals. This API does not create new contact connections or change those rules.

Build with the SDK or API

The preview SDK, @robono/linked-apps, handles linking, credential refresh, messaging and synchronization. Install the pinned npm version shown above. Use the HTTP API reference if your platform does not use TypeScript.

1. Link a Robono account

This example shows the flow. Supply your platform's secure storage, cryptography, app-opening and lifecycle handlers. The integration guide includes React Native adapter examples for iOS and Android.

import { RobonoLinkedApps } from '@robono/linked-apps';

const robono = new RobonoLinkedApps({
  app: {
    name: 'Your App',
    developerName: 'Your Company',
    websiteUrl: 'https://example.com',
    privacyUrl: 'https://example.com/privacy',
  },
  tokenStore, // Keychain / Keystore adapter
  crypto,    // Secure platform crypto adapter
});

// Requires @robono/linked-apps 0.1.0-preview.4 or newer.
const pairing = await robono.beginPairing(
  ['account:read', 'messages:read', 'messages:send']
);
// Display pairing.userCode. Keep pairing.pending in secure storage.
// User: Robono → Linked apps → Connect an app → enter code → approve.
const controller = new AbortController();
// Cancel on leaving the screen/backgrounding; resume on return if unexpired.
await robono.waitForPairing(pairing.pending, controller.signal);
// Connected: credentials have been saved through tokenStore.

Keep tokens and the pending verifier in Keychain or Keystore. Codes expire after five minutes. No callback URL or extra SMS verification is needed for code pairing. Use one SDK instance per connected account and coordinate refreshes across processes.

2. Read and send messages
const conversations = await robono.conversations();
const history = await robono.messages(conversationId, { limit: 50 });

// Generate and persist a UUID once; reuse it on retries.
await robono.send({
  conversationId,
  clientMessageId: savedOutgoingId,
  messageKind: 'text',
  textBody: 'Hello from our app',
});

Use conversation capabilities to decide which tools to display. A successful send response acknowledges acceptance; it does not prove that the recipient has received or heard a message.

For voice or files, call createUpload, upload the bytes with uploadBytes, then call send with the returned media ID. Preserve a recording's measured duration. The API reference lists media fields and supported message kinds.

Use download for an expiring playback or download URL. Keep URLs private. Mark a voice message heard only after actual listening.

3. Receive live changes

Use watch to open an authenticated persistent connection. The SDK reconnects and recovers missed changes from a saved cursor. No delivery endpoint needs registration. Save the cursor after processing succeeds, deduplicate message IDs, and reconcile deleted or unavailable content. Events are retained for seven days; an expired cursor requires a fresh synchronization.

For background notifications, your backend can maintain the same SDK connection and route updates to your users. No webhook is offered. Protect linked credentials and coordinate token refreshes through one owner per grant.

Your backend sends a content-free sync hint using your own app's APNs, FCM, or Expo credentials. Fetch current messages when the app wakes or resumes. Background execution is controlled by the operating system and is not guaranteed. Keep companion hints silent by default to avoid duplicating Robono alerts.

4. Handle limits, retries, and disconnection

Current preview limits per grant, per minute: 60 send operations, 120 media operations, 120 event polls, and 300 other operations. Authorization starts are limited to 60 per app per minute. Limits may change before production.

Respect HTTP 429 responses and back off. Retry a message with its original saved UUID to avoid duplicates. Do not blindly retry token exchanges: refresh tokens rotate, and reusing a spent refresh token revokes access.

Access tokens last 10 minutes, refresh tokens up to 30 days, and grants up to 90 days. Ask the user to reconnect when needed. Never log credentials, callback codes, or message contents.

Call disconnect() to revoke your connection, then stop watchers and clear cached account data. Also handle revocation from Robono, account deletion, and account switching. Previously received data must be handled according to your disclosed retention and deletion policy.

5. Validate before production
  • Approval and denial; wrong or expired pairing code; account switching.
  • Text, voice and supported files; retries without duplicate messages; accurate receipts.
  • Blocked contacts, disconnected relationships, history deletion, and network restrictions.
  • Offline recovery, interrupted connections, expired cursors, and token expiration.
  • Notifications on and off; locked screen, background and relaunch on physical iOS and Android devices when supported.
  • User revocation and account deletion stop access and clear local account data.

Keep your test results. Publish your data-use, retention and deletion practices, protect credentials, and provide support and security contacts. Do not sell message content or use access beyond the user's consent.

Developer resources

API documentation, setup instructions and integration examples. Install the SDK and configure your app details to begin. Account access requires each user’s approval.

The example is a host-independent starting point. Your app supplies its own interface, secure adapters and notification delivery. The SDK is distributed through npm under the published SDK license.

Review Robono's privacy notice, terms, and acceptable use policy.

Ready to build?

Start with the SDK example above. Every developer can integrate directly without contacting Robono.

Start integrating