> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nekt.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Umbler as a data source

> Bring your Umbler websites, domains, e-mail accounts, DNS records and users to Nekt.

Umbler is a Brazilian cloud platform for website hosting, domain registration, professional e-mail and DNS. This connector reads your Umbler account through the Umbler API and brings the websites you host (with their FTP accounts), the domains you registered, your e-mail domains and mailboxes, the DNS records of your domains and the users of the account.

> [!NOTE]
>
> The connector only reads data. It never creates, changes or deletes anything in Umbler. The FTP and e-mail passwords that the Umbler API returns are discarded and never loaded.

## Configuring Umbler as a Source

In the [Sources](https://app.nekt.ai/sources) tab, click on the "Add source" button located on the top right of your screen. Then, select the Umbler option from the list of connectors.

Click **Next** and you'll be prompted to add your access.

### 1. Add account access

The Umbler API uses a pair of credentials: a **User ID** and an **API Token**. Both are generated in the Umbler panel, in the API access area of your account.

* **User ID**: the User ID of your Umbler API credential.
* **API Token**: the API token generated together with the User ID.

> [!TIP]
>
> The connector reads what the Umbler user who generated the token can see. Use a token from the account owner to get every website, domain and mailbox. A collaborator's token only sees what was shared with that collaborator.

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**: every Umbler stream is Full table. The Umbler API has no filter by date, so each sync reads the current state of your account and replaces the table with it.

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](https://docs.nekt.com/runs/scheduling-and-triggers.md), 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). Umbler data changes slowly, so a daily sync is usually enough.

Optionally, you can 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](https://docs.nekt.com/get-started/core-concepts/resource-control). Since every stream is Full table, an Additional Full Sync is not needed.

Once you are ready, click **Next** to finalize the setup.

### 5. Check your new source

You can view your new source on the [Sources](https://app.nekt.ai/sources) page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.

> [!WARNING]
>
> For you to be able to see it on your [Catalog](https://app.nekt.ai/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. All streams are Full table.

| Stream | Slug | Description |
| - | - | - |
| Websites | `websites` | Websites hosted at Umbler, with their stack, status and the full detail Umbler returns for each one. |
| Website FTP Accounts | `website_ftp_accounts` | FTP accounts of each website (user, host, port and directory; never the password). |
| Domain Registrations | `domain_registrations` | Domains registered through Umbler, with their automatic renewal setting and full detail. |
| E-mail Domains | `email_domains` | Domains with Umbler e-mail, with their spam settings and status. |
| E-mail Accounts | `email_accounts` | Mailboxes of each e-mail domain: plan, aliases, anti-spam setting and disk usage (never the password). |
| DNS Records | `dns_records` | DNS records of the account's domains whose DNS zone is hosted at Umbler. |
| Users | `users` | Users of the Umbler account. |

## Fields by stream

> [accordion] Websites
>
> Every website of the account. For each website the connector also reads its detail from Umbler and keeps it whole in `details`.
>
> Table: `websites` · Primary key: `domain` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `domain` | String | Domain of the website (lowercase), its identifier in Umbler. |
> | `stack` | String | Technology the website runs on, such as PHP or Node.js. |
> | `status` | String | Current status of the website. |
> | `owner_id` | Integer | ID of the Umbler user who owns the website (see Users). |
> | `dedicated_server_friendly_name` | String | Name of the dedicated server hosting the website; empty for websites in shared containers. |
> | `details` | String (JSON) | Everything Umbler returns for the website, as JSON, with credential fields replaced by `[redacted]` (see Data Quality Considerations). Empty when the website was removed during the sync. |

> [accordion] Website FTP Accounts
>
> FTP accounts of each website. Websites without FTP accounts have no rows.
>
> Table: `website_ftp_accounts` · Primary key: `domain`, `user` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `domain` | String | Domain of the website the account belongs to (see Websites). |
> | `user` | String | FTP user name. |
> | `host` | String | FTP host to connect to. |
> | `port` | String | FTP port. |
> | `path` | String | Directory the account opens in. |

> [accordion] Domain Registrations
>
> Domains registered through Umbler. For each domain the connector also reads its detail and keeps it whole in `details`.
>
> Table: `domain_registrations` · Primary key: `domain` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `domain` | String | Registered domain (lowercase). |
> | `automatic_renewal` | String | Whether the registration renews automatically, as Umbler reports it. |
> | `details` | String (JSON) | Everything Umbler returns for the registration, as JSON, with credential fields (including the transfer/EPP code) replaced by `[redacted]`. Empty when the domain was removed during the sync. |

> [accordion] E-mail Domains
>
> Domains that use Umbler e-mail.
>
> Table: `email_domains` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `id` | Integer | Umbler ID of the e-mail domain. |
> | `domain` | String | Domain name (lowercase). |
> | `spam_action` | String | What happens to spam: `DoNothing`, `JunkEmail` or `Exclude`. |
> | `spam_filter_enable` | Boolean | Whether the spam filter is on. |
> | `sync_status` | String | Provisioning status: `Synchronized`, `Creating`, `Editing` or `Removing`. |
> | `domain_status` | String | `Enabled` or `Disabled`. |

> [accordion] E-mail Accounts
>
> Mailboxes of each e-mail domain. Domains without mailboxes have no rows.
>
> Table: `email_accounts` · Primary key: `domain`, `email_account` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `domain` | String | E-mail domain of the mailbox (see E-mail Domains). |
> | `email_account` | String | Mailbox name, as Umbler returns it. |
> | `id` | Integer | Umbler ID of the mailbox. |
> | `full_name` | String | Display name of the mailbox owner. |
> | `email_type` | String | E-mail plan, such as `UmblerMailOnDemand_10GB`. |
> | `aliases` | Array of strings | Other addresses delivered to this mailbox. |
> | `email_account_size` | String | Mailbox size of the plan. |
> | `maximum_alias_quantity` | Integer | Maximum number of aliases allowed. |
> | `enable_anti_spam_filter` | Boolean | Whether the anti-spam filter is on for the mailbox. |
> | `disk_consumption_account_name` | String | Account name reported with the disk usage. |
> | `consumed_disk_space` | Integer | Disk space used by the mailbox. Umbler updates it once a day. |
> | `total_disk_space` | Integer | Disk space available to the mailbox. Umbler updates it once a day. |
> | `sync_status` | String | Provisioning status: `Synchronized`, `Creating`, `Editing` or `Removing`. |

> [accordion] DNS Records
>
> DNS records of the account's domains whose DNS zone is hosted at Umbler. The connector checks every domain found in Websites, and also in Domain Registrations and E-mail Domains when Umbler returns them. If Umbler refuses or does not return one of these two lists, the sync log warns, and the domains that only appear there are missing from this table. A domain whose DNS is hosted elsewhere has no rows.
>
> Table: `dns_records` · Primary key: `domain`, `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `domain` | String | Domain (DNS zone) of the record. |
> | `id` | Integer | ID of the record inside its zone. |
> | `name` | String | Record name (host), such as `www` or `@`. |
> | `value` | String | Record value: an address, a target host or a text. |
> | `record_type` | String | `A`, `CNAME`, `TXT`, `MX` or `SRV`. |
> | `priority` | String | Priority of MX and SRV records. |
> | `ttl_in_seconds` | String | Time to live, as Umbler names it: `OneMinute`, `TenMinutes`, `HalfHour`, `OneHour`, `ThreeHours`, `SixHours`, `TwelveHours` or `TwentyFourHours`. |
> | `service` | String | Service of an SRV record. |
> | `protocol` | String | Protocol of an SRV record. |
> | `port` | String | Port of an SRV record. |
> | `importance` | String | Weight of an SRV record. |

> [accordion] Users
>
> Users of the Umbler account.
>
> Table: `users` · Primary key: `id` · Sync: Full table
>
> | Field | Type | Description |
> | :- | :- | :- |
> | `id` | Integer | Umbler ID of the user. |
> | `email` | String | E-mail address of the user. |
> | `name` | String | Name of the user. |
> | `wallet_id` | String | ID of the Umbler wallet (balance) the user is billed from. |
> | `phone` | String | Phone number. |
> | `cellphone` | String | Mobile phone number. |
> | `telephone` | String | Landline phone number. |
> | `status` | Integer | Status code of the user, as Umbler returns it. |
> | `culture` | String | Language and region, such as `pt-BR`. |
> | `has_flag` | Boolean | Flag Umbler returns for the user. |
> | `created_at` | Datetime | When the user was created. |

## Implementation Notes

### Data Quality Considerations

* **Every table is a snapshot.** Each sync replaces the tables with what Umbler returns at that moment. Websites, domains or mailboxes removed in Umbler disappear from the tables on the next sync.
* **A table is never half updated.** The connector reads all the data of a table before writing any of it. If Umbler fails or refuses part of a table, that table keeps its previous content and the sync shows it as failed. The one exception is DNS Records: when Umbler refuses or does not return the Domain Registrations or E-mail Domains list, DNS records are still loaded for the other domains, and the sync log warns which domains were left out.
* **A table that suddenly comes back empty is not emptied.** If Umbler returns no rows for a table that had rows in the previous sync, the sync fails for that table instead of emptying it. If the data really was removed in Umbler, run a full sync of the source to accept the empty table.
* **Domains without data.** A website without FTP accounts, an e-mail domain without mailboxes or a domain whose DNS is hosted elsewhere has no rows in the related table, even when that is true for every domain. The sync log warns how many domains were in that situation.
* **Passwords are never loaded.** The Umbler API returns FTP and e-mail passwords; the connector drops them. Inside `details`, fields whose name looks like a credential (password, senha, secret, token, keys, authorization or EPP codes, connection strings) and any text containing `password=` or `pwd=` are replaced by `[redacted]`. This works by field name and pattern, so treat `details` as internal data.
* **Domains are lowercase** in every table, so you can join Websites, Domain Registrations, E-mail Domains, E-mail Accounts, Website FTP Accounts and DNS Records on `domain`.

### API Limits & Performance

* Umbler does not publish a request limit. The connector makes at most about 4 requests per second and, when Umbler asks it to slow down, waits as long as Umbler says.
* Besides the four lists (websites, domain registrations, e-mail domains and users), the connector makes one request per website (detail and FTP accounts), per registered domain (detail), per e-mail domain (mailboxes) and per domain (DNS records). An account with 100 domains syncs in a few minutes.

## Troubleshooting

| Error or symptom | What it means | What to do |
| :- | :- | :- |
| "Umbler rejected the User ID and API Token" | The credentials are wrong, were revoked, or the User ID and the token do not belong together. | Generate the credentials again in the Umbler panel and update both fields of the source. |
| "Umbler refused every request of this sync" | Umbler denied access (HTTP 403) to everything the sync asked for. | Check the User ID and API Token of the source. If they are right, contact Nekt support. |
| "Umbler refused access to the ... of this account" | The Umbler user who generated the token cannot see that part of the account. The tables that depend on it were skipped; the others were loaded. | Use a token from the account owner, or deselect the skipped tables. |
| "Umbler refused part of ..." | Umbler refused one of the domains of that table. The table was not updated. | Use a token that can see every domain of the account, or deselect the table. |
| "'dns\_records': Umbler refused access to the ..." or "... list of this account does not exist" | Umbler refused or did not return the domain registrations or e-mail domains list, so DNS records were read only for the other domains. | Use a token from the account owner if you need the DNS records of every domain. If the account has those domains, contact Nekt support. |
| "Umbler reports no ... for N of M domain(s)" | Those websites have no FTP accounts, those e-mail domains have no mailboxes, or the DNS of those domains is hosted elsewhere. | No action needed if that matches your account. |
| "Umbler returned no ... records at all, although the previous sync read N" | Umbler returned an empty list for a table that had rows. The table was kept. | If the data really was removed, run a full sync of the source. Otherwise run the sync again later. |
| "Could not reach Umbler" or "Umbler kept failing" | Umbler did not answer, or answered with errors, after several attempts. | Usually temporary; the next sync tries again. |
| "Umbler answered ... in a format this connector does not recognize" | The Umbler API changed. | Contact Nekt support. |

## Skills for agents

<Snippet file="agent-skills-intro.mdx" />

> [card] [Download Umbler skills file](https://docs.nekt.com/sources/umbler.md)
>
> Umbler connector documentation as plain markdown, for use in AI agent contexts.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.