UDS to Plug Status Mapping
Migrating from UDS to Plug involves a shift from a multi-field status model to a unified, action-oriented model.
Executive Summary
- In addition to
Credential.statusandCredential.statusDetail, UDS used three separate fields to describe anAccount:enrollmentStatus,extractionStatus, andmonitoringStatus. - Plug uses the
status(a state category) field combined with a higher-fidelitystatusDetail(a detailed reason for being placed in that state category) and introduces a critical boolean field:isCustomerActionRequired(whether the owner of that credential/account/meter/etc needs to be involved to fix the issue) across most entities in the Plug data model.
This guide provides a comprehensive reference for mapping these values to update your internal logic and user-facing messages.
Plug status details can be found in the Status and Status Detail Definitions. UDS status details can be found in the UDS API Documentation - Account Status Breakdown. Below is a convenient breakdown of the differences between the two.
Credential Status Mapping
API Endpoints
UDS
GET https://api.urjanet.net/api/v1/credential/status/{credentialId}
Plug
GET https://api.arcadia.com/plug/credentials/{credentialId}
Credential Mapping Table
UDS.Credential.status | UDS.Credential.statusDetail | Plug.Credential.status | Plug.Credential.statusDetail | Plug.Credential.isCustomerActionRequired |
|---|---|---|---|---|
OK | (Any) | CONNECTION_SUCCESS | LOGIN_AND_DATA_DISCOVERY_SUCCESS | false |
OK | (Any) | CONNECTION_SUCCESS | LOGIN_SUCCESS_AND_INTERVALS_DISCOVERY_SUCCESS | false |
PENDING | WEBSITE_DOWN | CONNECTION_IN_PROGRESS | PROVIDER_WEBSITE_INACCESSIBLE | false |
PENDING | STATEMENT_UNAVAILABLE | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false |
PENDING | UNDER_REVIEW | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false |
FIX | LOGIN_FAILURE | CONNECTION_FAILURE | INVALID_CREDENTIALS | true |
FIX | ACCOUNT_LOCKED | CONNECTION_FAILURE | OTHER_ACCESS_LIMITATION | true |
FIX | UNSUPPORTED_CAPTCHA | CONNECTION_FAILURE | UNSUPPORTED_CAPTCHA | true |
FIX | NO_ACCOUNTS_FOUND | CONNECTION_FAILURE | OTHER_ACCESS_LIMITATION | true |
FIX | E_BILL_REQUIRED | CONNECTION_FAILURE | OTHER_ACCESS_LIMITATION | true |
| (None) | (None) | CONNECTION_FAILURE | UNSUPPORTED_MULTI_FACTOR_AUTHENTICATION | true |
| (None) | (None) | CONNECTION_FAILURE | UNSUPPORTED_MULTI_FACTOR_AUTHENTICATION | true |
| (None) | (None) | CONNECTION_FAILURE | USER_REVOKED_ACCESS | true |
Plug-Only Credential Statuses
These status / statusDetail combinations represent new capabilities or edge cases with no direct UDS equivalent:
-
CONNECTION_SUCCESS/LOGIN_SUCCESS_AND_INTERVALS_DISCOVERY_FAILURE: Only relevant for Plug’s Instant Intervals feature. In cases where we don’t find intervals, we use this as an intermediate state until statements are collected. -
CONNECTION_IN_PROGRESS/EMAIL_APPROVAL: Waiting for the user to click a link in an email to enroll their account. This is used for 3rd party portals like ConEd. -
CONNECTION_IN_PROGRESS/REQUIRES_ENROLLMENT: The account is being connected via a 3rd party portal like Smart Meter Texas but the enrollment step wasn’t completed yet. -
CONNECTION_FAILURE/UNSUPPORTED_MULTI_FACTOR_AUTHENTICATION: The credential has MFA security at a provider that Arcadia does not support MFA logins for yet. -
CONNECTION_FAILURE/MULTI_FACTOR_AUTHENTICATION_FAILURE: The customer provided an incorrect MFA code and another attempt is necessary. -
CONNECTION_FAILURE/USER_REVOKED_ACCESS: The owner of the credentials manually revoked access to interval data from a third party portal, such as Smart Meter Texas.
Account Status Mapping
This is the most complex migration area. UDS required checking enrollmentStatus AND extractionStatus to know the true state. Plug simplifies this into Account.status and Account.statusDetail. Additionally, Plug introduced the Account.isCustomerActionRequired field to make it more clear if the owner of the account needs to be involved to fix an issue.
UDS' Account.monitoringStatus was manually assigned by operations teams. These statuses are often used to override or clarify the automated status. Plug does not expose Monitoring Statuses externally but they are used internally to power some state transitions. As such, there is no mapping from UDS' Account.monitoringStatus to an entity or field in Plug beyond the statuses described in the table below.
API Endpoints
UDS
GET https://api.urjanet.net/api/v1/account/status/{accountId}
Plug
GET https://api.arcadia.com/plug/accounts/{accountId}
Account Mapping Table
This table includes all UDS Enrollment and Extraction statuses. Rows where Enrollment Status is the driver are listed first. Rows where Extraction Status provides the specific error (usually when Enrollment is ENROLLED) follow.
UDS.Account.enrollmentStatus | UDS.Account.extractionStatus | Plug.Account.status` | Plug.Account.statusDetail | Plug.Account.isCustomerActionRequired | Explanation |
|---|---|---|---|---|---|
SUBMITTED | Any | N/A | N/A | N/A | Plug uses a concept of Expected Accounts to represent account number submitted for discovery. Read more. |
NEEDS_CREDENTIAL | Any | N/A | N/A | N/A | Plug allows accounts to exist without credentials, this is especially relevant for accounts created via the Files Module. |
NEEDS_TEMPLATE | Any | N/A | N/A | N/A | There is no equivalent state in Plug. |
NOMINATED | Any | N/A | N/A | N/A | There is no equivalent state in Plug. |
FAILED_TO_ACCESS | Any | DATA_ACCESS_FAILURE | NO_DATA_AVAILABLE | false | Arcadia is able to access the utility account and there is no data for this specific account, though there was data for this account in the past. Please check if there is data available for this specific account by logging into the utility provider website. |
FAILED_LOGIN | Any | DATA_ACCESS_FAILURE | CREDENTIAL_ISSUE | true | Confirmed credential failure. |
ACCOUNT_MISSING | Any | DATA_ACCESS_FAILURE | NO_DATA_AVAILABLE | true | Credential worked, but this account wasn't found in the list. |
STATEMENT_MISSING | Any | DATA_ACCESS_FAILURE | NO_DATA_AVAILABLE | true | Account found previously on statement however, now no statements could be found. |
STATEMENT_FAILED | Any | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Extracted but failed audits. It may be stored as a Discovered Statement. |
SUCCESSFUL_NOT_ENROLLED | Any | N/A | N/A | N/A | This is not part of the Account status but rather Account.isStatementProductActivated |
SUCCESSFUL_ENROLLED | Any | CONNECTION_SUCCESS | DATA_ACCESSIBLE | false | Connection healthy. |
SUCCESSFUL_DELIVERED | Any | N/A | N/A | N/A | Plug is a "pull" system so we can't indicate whether customers have fetched the data or not. Additionally, there are multiple ways customers can collect the data (DataHub, Webhooks, API, etc.) |
CREDENTIAL_UPDATED | Any | N/A | N/A | N/A | Not a state in Plug. |
TEMPLATE_UPDATED | Any | N/A | N/A | N/A | Not a state in Plug. |
LOGIN_UPDATED | Any | N/A | N/A | N/A | Not a state in Plug. |
NEEDS_ENROLLMENT | Any | CONNECTION_IN_PROGRESS | REQUIRES_ENROLLMENT | false | Waiting on 3rd party portal setup. |
| Any | EXISTS | NEW_ACCOUNT | DATA_ACCESSIBLE | false | Initial discovery state. |
ENROLLED | SUCCESS | CONNECTION_SUCCESS | DATA_ACCESSIBLE | false | Fully healthy. |
ENROLLED | FAILED_TO_ACCESS_DURING_LOGIN | CONNECTION_IN_PROGRESS | PROVIDER_WEBSITE_INACCESSIBLE | false | Transient login issue. |
ENROLLED | FAILED_TO_ACCESS | CONNECTION_IN_PROGRESS | PROVIDER_WEBSITE_INACCESSIBLE | false | Transient site issue. |
ENROLLED | ACCOUNT_MISSING | DATA_ACCESS_FAILURE | NO_DATA_AVAILABLE | true | Previously seen account is gone. |
ENROLLED | STATEMENT_MISSING | DATA_ACCESS_FAILURE | NO_DATA_AVAILABLE | true | Previously seen statement is gone. |
ENROLLED | AUDIT_CHECKSUM | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Failed Data Quality Audit (Statement held). |
ENROLLED | AUDIT_VALID_USAGE | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Failed Data Quality Audit. |
ENROLLED | AUDIT_INVALID_INTERVAL | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Failed Data Quality Audit. |
ENROLLED | AUDIT_OTHER | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Failed Data Quality Audit. |
ENROLLED | ERROR_DATA_TYPE | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Parsing error. |
ENROLLED | ERROR_MISSING_REQUIREMENT | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Parsing error. |
ENROLLED | ERROR_STORAGE | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Internal system error. |
ENROLLED | ERROR_MODEL_COLLISION | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Internal system error. |
ENROLLED | CUSTOMER_REJECTED_HTML | N/A | N/A | N/A | Plug doesn't allow customers to reject HTML bills. |
ENROLLED | LOGIN_FAILURE | DATA_ACCESS_FAILURE | CREDENTIAL_ISSUE | true | Credential broke. |
ENROLLED | TRACKED_ACCOUNT_SKIPPED | CONNECTION_SUCCESS | DATA_ACCESSIBLE | false | |
ENROLLED | ACCESS_CHANNEL_SKIPPED | CONNECTION_SUCCESS | DATA_ACCESSIBLE | false | |
ENROLLED | TRACKED_STATEMENT_SKIPPED | CONNECTION_SUCCESS | DATA_ACCESSIBLE | false | |
ENROLLED | ERROR_211 | DATA_ACCESS_FAILURE | ISSUE_UNDER_REVIEW | false | Plug does not yet expose the reasons why audits may have failed like UDS does |
ENROLLED | ERROR_808 / _CRITICAL | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Plug does not yet expose the reasons why audits may have failed like UDS does |
ENROLLED | TRACKED_ACCOUNT_MISSING | DATA_ACCESS_FAILURE | NO_DATA_AVAILABLE | true | |
ENROLLED | TRACKED_STATEMENT_MISSING | DATA_ACCESS_FAILURE | NO_DATA_AVAILABLE | true | |
ENROLLED | TRACKED_BILL_NOT_YET_AVAILABLE | CONNECTION_SUCCESS | DATA_ACCESSIBLE | false | You may want to use the Statement Gaps feature to understand why latest bills with past NEPs might be missing. |
ENROLLED | ERROR_WEBSITE_PROBLEM | CONNECTION_IN_PROGRESS | PROVIDER_WEBSITE_INACCESSIBLE | false | Site maintenance/down. |
ENROLLED | USER_ACTION_REQUIRED | DATA_ACCESS_FAILURE | OTHER_ACCESS_LIMITATION | true | Check website for alerts/popups. |
ENROLLED | CAPTCHA_LOGIN | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Autosolving captcha. |
ENROLLED | FINALLED | INACTIVE | NO_BILLS_DISCOVERED_AFTER_FINAL_BILL_NOTICE | false | Account Closed. |
ENROLLED | AUTOSOLVE_CAPTCHA_FAILURE | CONNECTION_FAILURE | UNSUPPORTED_CAPTCHA | true | Autosolve failed; user intervention may be needed. |
ENROLLED | EXTRACTION_FAILURE | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Generic parsing failure. |
ENROLLED | WEBSITE_TIMEOUT | CONNECTION_IN_PROGRESS | PROVIDER_WEBSITE_NAVIGATION_FAILURE | false | Slow site response. Note that we only expose these statuses if there is a consistent pattern of failures. |
ENROLLED | DUPLICATE_SOURCE_EXTRACTION_SKIPPED | N/A | N/A | N/A | Not exposed in Plug |
ENROLLED | MULTI_FACTOR_AUTH_FAILURE | DATA_ACCESS_FAILURE | MULTI_FACTOR_AUTHENTICATION_FAILURE | true | MFA challenge failed. |
ENROLLED | LIMITED_ACCESS | DATA_ACCESS_FAILURE | OTHER_ACCESS_LIMITATION | true | Website restricts access (e.g. "You can't access this bill"). |
ENROLLED | CAPTCHA_ATTEMPT_FAILED | CONNECTION_IN_PROGRESS | ISSUE_UNDER_REVIEW | false | Automation failed, requires internal fix. |
Meters
In UDS, Meter statuses were not often utilized. Plug treats Meters as first-class citizens, with status and statusDetail which UDS did not. It's used for the purposes of fetching interval data associated with the meter.
API Endpoints
UDS
GET https://api.urjanet.net/api/v1/meter/status/{meterId}
Plug
GET https://api.arcadia.com/plug/meters/{meterId}
Meter Statuses
Plug.Meter.status | Plug.Meter.statusDetail | Description |
|---|---|---|
INTERVALS_SUCCESS | INTERVALS_AVAILABLE | Data is flowing. |
INTERVALS_IN_PROGRESS | INTERVALS_EXTRACTION_IN_PROGRESS | Currently collecting data. |
INTERVALS_PENDING | REQUIRES_ENROLLMENT | Backend setup for 3rd party portals necessary. |
INTERVALS_FAILURE | INVALID_CREDENTIALS | Blocked by parent credential issue. |
INTERVALS_NOT_SUPPORTED | SERVICE_TYPE_NOT_SUPPORTED | Arcadia doesn't support interval collection for this type/provider. |
Discovered Statements (New Entity)
In UDS, if a statement failed validation, it often just didn't appear or triggered an ERROR_808 on the UDS.Account.extractionStatus. In Plug, these are visible as Discovered Statement entities in the API and Dashboard. You can read more about Discovered Statements in this guide.
API Endpoints
UDS
No equivalent
Plug
GET https://api.arcadia.com/plug/discoveredStatements/{discoveredStatementId}
They have two possible status and no statusDetail (because it would be superfluous).
-
EXTRACTION_PASSED_QUALITY_CHECKS:Healthy statement. -
EXTRACTION_FAILED_QUALITY_CHECKS:Scraped but contains data anomalies (e.g., total amount mismatch).
Files (New Entity)
In addition to automatic navigation to invoices using Credentials, Plug also supports bill processing for PDFs uploaded via API or the Dashboard. Files are a first class entity with their own complex pipeline and statuses. UDS does not have an equivalent API.
API Endpoints
UDS
No equivalent
Plug
GET https://api.arcadia.com/plug/files/{fileId}
File Statuses
Since UDS does not have an equivalent Files entity in the UDS API, a mapping table is not necessary. For more details on all possible File status and statusDetails, please see this guide.
Updated 2 days ago
