Skip to main content
RD Station Conversas is RD Station’s conversation and messaging platform for managing customer interactions across channels (WhatsApp, Instagram, email, and others). The connector extracts contacts, message history, flows, templates, and related data from the Conversas API so you can centralize conversation data in your Lakehouse.

Configuring RD Station Conversas as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the RD Station Conversas option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

You’ll need to provide authentication so Nekt can access your RD Station Conversas data. The API uses a JWT sent in the Authorization: Bearer header. The following configurations are available:
  • Access token: Token used for authentication. Required. You can get it at Apps & Integrations > API > RD Station Conversas (developers.rdstation.com).
  • Private key (JWK) for decryption: JWK (JSON Web Key) of the private key as a JSON string, used to decrypt conversation history. Optional. Generate it at Apps & Integrations > API > Generate Key (both the encryption feature and the history endpoint require the Advanced plan). See Conversas v2 encryption. Without it, the messages_history stream is skipped and its table is not updated; every other stream syncs normally.
  • Initial sync date: Start of the period fetched. It affects the reports stream and messages_history, which is read from attendances — every other stream is always synced in full, because the API offers no date filter for them. When left empty, both streams fall back to the last 30 days. Choose an old date with care: conversation history is fetched one request per contact against a strict API rate limit, so the further back this goes, the longer the sync takes. Use YYYY-MM-DD. On an existing source, moving this date back to fetch older data only takes effect after a Full Sync, because regular runs resume from the last saved bookmark — see Backfilling and Initial sync date.
  • Requests per minute: Maximum requests per minute sent to RD Station Conversas. Optional, defaults to 45. The API allows 100 requests per 120 seconds (50 a minute sustained) and reports the remaining budget on every response — the connector reads that budget and slows itself down on its own when it runs thin. Lower this if the account is shared with another integration.
Once you’re done, click Next.
Some streams depend on the RD Station Conversas plan contracted by the account. When a resource is not enabled, that stream is skipped with a message in the run log and its table is left untouched — the rest of the extraction completes normally. See Availability per plan below.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.
Tip: The stream can be found more easily by typing its name.
The messages_history stream is a child of reports (attendances): it fetches conversation history for each contact that had an attendance in the synced period, rather than for every contact in the account. Ensure Initial sync date is set if you use this stream. This stream is available only on the Advanced plan — see planos RD Station Conversas.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
  • Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
    • Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched. (Supported by the reports and messages_history streams)
    • Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog. (Used by all other streams in this connector)
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:
  • Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
  • Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Availability per plan

RD Station Conversas gates some resources by contracted plan, and the API also disables individual resources per account. When a stream is not available, it is skipped with an explanation in the run log and its table is left untouched — the rest of the extraction completes normally, so a partial plan never costs you the streams you do have access to. Reading data through the API is not metered or charged: RD Station bills WhatsApp messages exchanged, and this connector only reads.

Streams and Fields

Available streams

The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description. Streams marked optional are only discovered when the corresponding setting is enabled.

Fields by stream

Below you’ll find all available data streams from RD Station Conversas and their corresponding fields. API reference: developers.rdstation.com.
List contacts (GET /v2/customers). The customer_id of messages_history and the customer.id of reports refer to this stream’s _id.Address (object):Job (object):
List custom fields (GET /v2/custom-fields). Variables that can be used in message templates.
List employees (GET /v2/employees).
List flows (GET /v2/flows).
List message history per contact (GET /v2/messages/history). Child stream of Reports — one partition per distinct contact found in the attendances of the synced period, so the number of requests grows with the number of contacts who actually had an interaction in the window, not with the size of the contact base. Set Initial sync date in the source configuration to bound the period. This stream supports incremental sync based on the message creation time (created_at).
This stream needs the Advanced plan from your RD Station Conversas account, which is required for both the conversation history API and to generate the encryption key. See planos e preços.The responses are encrypted (JWE, RSA-OAEP-256), so the Private key (JWK) must be configured. Without it — or with a key that cannot decrypt the payload — the stream is skipped, its table is left untouched, and a message explaining why appears in the run log. Every other stream still syncs.
Attendance report (GET /v4/reports). Uses the Conversas v4 API base. Despite the name, each record is a single attendance — one customer interaction — not a report definition. This stream supports incremental sync on created_at, resuming from the previous run’s bookmark, and it is the parent of messages_history: every attendance names its contact, and that is where the history stream gets the contacts to fetch.
The endpoint requires a period and rejects any range wider than three months, so the connector splits the interval between your Initial sync date (or the previous run’s bookmark, whichever is later) and today into consecutive 89-day windows and fetches each one. A longer history simply means more windows. If no start date is configured — or the configured date is in the future — the connector falls back to fetching the last 30 days.
TME / TMA (objects):Company, employee and customer (objects):
List message templates (GET /v2/template/all).
List wallets (GET /v2/wallets). The endpoint returns an array of wallet names, so each record carries a single field.
List official WhatsApp integrations (GET /v2/whatsapp/integrations/official).
List workflows (GET /v2/workflows).

Data Model

The following diagram illustrates the main relationships. Reports (attendances) is the parent of messages_history: each attendance names its contact, and the history stream is partitioned by that contact. Both refer to Contacts through the contact identifier. Other streams are independent configuration or metadata entities.

Implementation Notes

Message history and encryption

  • The messages_history stream returns responses encrypted with JWE (RSA-OAEP-256), so the Private key (JWK) is what makes them readable. The connector automatically normalizes different JWK shapes and cleans up invisible or look-alike spaces (often accidentally included when copying keys from a web page or chat app) to ensure the key can be correctly processed. Without a key, or with one that cannot decrypt the payload, the stream is completely skipped to avoid replacing good data with unreadable values.
  • Malformed payloads: If the API returns invalid UTF-8 bytes or raw control characters in the conversation history, the connector automatically replaces the unreadable characters (with U+FFFD) or parses them leniently so the rest of the message can still be loaded. If a contact’s decrypted history is not valid JSON, that specific contact is skipped while the rest of the sync continues normally. However, to prevent wasting rate limits on broken API responses, if more than 50% of the payloads are unreadable after attempting at least 100 contacts, the connector will stop the stream part-way.

Backfilling and Initial sync date

  • Initial sync date bounds the period of reports and messages_history. On the history endpoint it is sent together with an end date because the API requires the pair and otherwise falls back to the last 30 days.
  • For reports, each run starts at the later of your Initial sync date and the bookmark saved by the previous run. Moving the start date forward takes effect immediately; moving it back changes nothing while a newer bookmark exists. To backfill older data, run a Full Sync so the state is cleared and the connector reads from the older date again. Because messages_history is read from the attendances reports returns, the same rule decides which contacts get their history fetched.

Child stream behavior

  • messages_history is a child of reports (attendances). The tap first syncs the attendances of the requested period, then requests message history once for each distinct contact found in them — a contact with several attendances in the period is fetched only once per run. The number of requests therefore grows with the number of contacts who had an interaction in the window, not with the size of your contact base: the contacts listing has no date filter, so hanging the history off it would mean walking every contact on every run.

Reports stream behavior

  • The stream supports incremental sync on created_at: it resumes from the previous run’s bookmark instead of rebuilding its whole history every run. The bookmark’s own day is re-read, because the period filter has day granularity and a run that stopped mid-day would otherwise lose the rest of it; the primary key settles the overlap. Only a completed run leaves a bookmark — an interrupted run re-reads its whole window next time.
  • The /v4/reports endpoint rejects date ranges wider than 90 days, so the connector slices the requested period (from the later of Initial sync date and the bookmark, to today) into consecutive 89-day windows. If no start date is configured, or the configured date is in the future, it falls back to a 30-day lookback window.
  • The API’s documentation is ambiguous about where the records live in the payload (reports vs docs), so the connector accepts both keys and logs which one actually arrived.

Pagination and page size

  • The contacts and messages_history endpoints are fetched at 100 records per page — the documented ceiling on the history endpoint.
  • For messages_history, since the endpoint provides no total records or pagination headers, the connector uses offset pagination and correctly pages through each contact’s history until it returns a page with fewer than 100 records.
  • The reports endpoint rejects page sizes of 50 or more, so it is fetched at 49 records per page.

Rate limiting

  • RD Station Conversas allows 100 requests per 120 seconds and publishes an IETF-style rate limit budget in its headers (RateLimit-Policy, RateLimit-Remaining and RateLimit-Reset). The connector observes these headers on every response and spreads the remaining budget over the rest of the window, so it neither wastes budget nor walks into the wall.
  • Until a budget has been reported, the connector relies on the configured Requests per minute (45 by default). If a 429 still arrives, it honours Retry-After when present, waits, retries, and reports the slowdown once in the run log. Lower Requests per minute if the account is shared with another integration that spends the same quota.

Unavailable resources

  • A stream the account cannot read is skipped with an explanation in the run log; the run continues and every other stream is synced. Its table is left as it was rather than being emptied.

Skills for agents

Download RD Station Conversas skills file

RD Station Conversas connector documentation as plain markdown, for use in AI agent contexts.