Skip to main content
Waid (formerly Curseduca) is a Brazilian platform for online courses, members areas and course sales. This connector reads your Waid platform through its public API and brings your members and their accesses, access groups (turmas) and who belongs to each one, products (courses), lessons, enrollments with their progress, lesson completions, grades, reviews and the sales made through Waid Pay.
The connector only reads data. It never creates, changes or deletes anything in Waid.

Configuring Waid as a Source

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

1. Add account access

Every request to the Waid API carries two credentials: the API Key, which identifies your platform, and an access token, which identifies an administrator. You can get both in the Waid admin panel: click your name at the bottom of the left sidebar, choose Credenciais API and select an administrator. Only administrators, subadministrators and the developer profile can see this screen.
Waid access tokens expire after 7 days, and clicking Rotacionar invalidates the previous one immediately. To avoid replacing the token every week, choose the e-mail and password sign-in: the connector then gets a fresh token on every sync.
The following configurations are available:
  • Authentication Method: How the connector signs in.
    • Administrator e-mail and password (recommended): the connector signs in as a Waid administrator on every sync and asks Waid for a token that lasts only a few hours. We recommend creating a dedicated administrator for Nekt.
    • Access Token (expires every 7 days): paste the token from Credenciais API. You will need to replace it every week.
  • API Key: The API Key shown in Credenciais API. It is the same for every administrator and does not expire.
  • Administrator E-mail and Administrator Password: The administrator the connector signs in as (e-mail and password method). Use an administrator whose access is not restricted to some groups: the connector reads what this user can see. Users who only sign in with Google must set a password first, using Forgot my password on the Waid sign-in screen.
  • Access Token: The token from Credenciais API (Access Token method).
Sign-in with e-mail and password is confirmed by Nekt on your first sync. To make it smooth:
  1. Create a dedicated administrator for Nekt in Waid, with an e-mail address and a password. Users who only sign in with Google, or who have two-step verification turned on, cannot be used by an automated connection.
  2. Fill in that e-mail (not a CPF) and password, and run the source once.
  3. If the sign-in fails, the run log says why (wrong e-mail or password, two-step verification, CPF instead of e-mail). You can also switch to the Access Token method, keeping in mind that it must be replaced every 7 days.
  • Start Date: (Optional) Earliest date to read for the streams filtered by date: members and group members (last update), lesson completions, member accesses and sales (purchase day). Leave empty to extract the whole history.
  • Lookback Days: (Default: 1, minimum 1) Each sync also re-reads this many days before the previous sync, for members, group members, lesson completions and member accesses.
  • Sales Lookback Days: (Default: 60, minimum 1) Waid only filters sales by purchase day, while a payment keeps changing after the purchase (confirmed, refunded, charged back). Each sync re-reads the purchases of this many past days, and also every refunded, cancelled or disputed payment bought since the Start Date (at most 400 days back).
  • Max Requests per Minute: (Default: 120) How many requests per minute the sync may send to Waid. Waid does not publish a limit; lower it if other integrations share your API access.
Once you’re done, click Next.

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.
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.
    • 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.
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.

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.

Fields by stream

Members and groups

Every member of the platform (students and administrators) with contact data, status, groups and tags. Incremental by last update: each sync reads the members changed since the previous sync, with a one-day safety margin.Table: members · Primary key: id · Sync: Incremental (updated_at)
The member report: profile fields, registration custom fields (for example state or schooling), phones, address and number of enrollments. Read in full on every sync.Table: member_profiles · Primary key: id · Sync: Full table
One row per access (sign-in) of a member, from the access history. Incremental by access time.Table: member_accesses · Primary key: member_id, accessed_at · Sync: Incremental (accessed_at)
Access groups (turmas): which products each group gives access to, how access expires and how many members it has. Read in full on every sync.Table: groups · Primary key: id · Sync: Full table
Each member’s link to each access group, including links of members removed from the group (is_active = false). Incremental per group by the link’s last update.Table: group_members · Primary key: group_id, member_id · Sync: Incremental (updated_at)

Learning

Products (courses, materials, plans) with category, type, prices, instructors and the groups that give access to them. Read in full on every sync.Table: contents · Primary key: id · Sync: Full table
Every lesson of every product, with its module and position. Read in full on every sync.Table: lessons · Primary key: id · Sync: Full table
Every enrollment of a member in a product, with start and completion dates and the completion percentage. Read in full on every sync (Waid offers no date filter for enrollments).Table: enrollments · Primary key: id · Sync: Full table
One row per lesson a member finished, with the lesson, module, product, member and enrollment. Incremental by completion time.Table: lesson_completions · Primary key: id · Sync: Incremental (finished_at)
Progress and average grade of each member in each product, with the minimum grade the product requires for its certificate. Read in full on every sync.Table: member_grades · Primary key: member_id, content_id · Sync: Full table
Ratings and comments members left on products and lessons. Read in full on every sync.Table: content_reviews · Primary key: id · Sync: Full table

Sales

One row per payment of Waid Pay, the platform’s own checkout, with buyer, product, amounts, status and billing address. Incremental by purchase day: each sync re-reads the purchases of the last 60 days (Sales Lookback Days) and every refunded, cancelled or disputed payment bought since the Start Date (at most 400 days back).Table: sales · Primary key: id_payment · Sync: Incremental (purchase_date)

Implementation Notes

Data Quality Considerations

  • How each stream is kept up to date:
    • Members, group members, lesson completions and member accesses: each sync reads what changed (or happened) since the previous sync, with a one-day safety margin (Lookback Days).
    • Sales: each sync re-reads the purchases of the last 60 days (Sales Lookback Days) and every payment that is refunded, cancelled or disputed among purchases since the Start Date (at most 400 days back), so those status changes reach your table even on older purchases. Other changes to purchases older than the lookback (for example a late confirmation) are picked up by a full sync.
    • Member profiles, access groups, products, lessons, enrollments, member grades and content reviews: read in full on every sync. A full read is completed before anything is loaded, so a sync that fails halfway leaves the previous table in place. Access groups are loaded completely before their members are read, so a failure while reading group members does not cut the groups table. If a stream that had records comes back completely empty, the sync stops instead of emptying the table (Content Reviews excepted: every review can be removed).
  • Removed members stay in Group Members with is_active = false and the date they were removed (inactivated_at). has_access and access_expires_at reflect the moment the row was read: an access that simply expires does not change the link, so an incremental sync keeps the old value until a full sync.
  • Deleted records stay in incremental tables (for example, a member deleted in Waid). A full sync removes them.
  • Nested information (tenants, tags, prices, custom registration fields) is stored as JSON text. Small objects are split into their own columns (for example member_id, content_title, address_city).
  • extra_fields keeps, as JSON, any field Waid returns that has no column of its own, and any value of an unexpected type. Fields that could give access to an account (sign-in and password links, tokens, keys, password hashes) are removed when detected by their name.
  • Sales dates (dt_date_insert, dt_date_confirmed…) are kept exactly as Waid returns them; Waid does not document their time zone. purchase_date is the day of the purchase. Waid does not document whether the amounts (pr_price, pr_price_gross, pr_service_fee) are in reais or cents; Nekt confirms it on your first sync.
  • Sales from external checkouts (Hotmart, Eduzz, Kiwify…) only appear if Waid records them in its sales report. For those platforms, Nekt has dedicated connectors.
  • The Waid API does not provide issued certificates or detailed quiz answers. Member Grades shows each member’s average grade and whether it reaches the minimum grade required for the certificate.
  • To see every member of a group, use Group Members; the groups column of Members is a convenience copy.

API Limits & Performance

  • Waid does not publish a request limit. The connector sends at most 120 requests per minute (Max Requests per Minute) and waits when Waid asks it to slow down.
  • Lists are read in pages of up to 100 records (500 for products, member grades and reviews). The connector checks every list against the total Waid reports and against the previous page. If a list changes while it is read (a student enrolls, a member is removed), the connector reads it again; if the records still do not add up to Waid’s total, the sync stops and the next sync tries again. Records that Waid leaves out of both the list and its total cannot be detected.
  • The first sync of a platform with many years of history reads the date-filtered streams month by month and can take a while; later syncs only read what changed.

Troubleshooting

Skills for agents

Download Waid skills file

Waid connector documentation as plain markdown, for use in AI agent contexts.