RocketChat/Rocket.Chat · error

Failed to retrieve registration confirmation poll data

Error message

Failed to retrieve registration confirmation poll data: ${response.statusText}

What it means

During device-code style registration, getConfirmationPoll polls cloud /api/v2/register/workspace/poll with the device token. Any non-ok response or unreadable body is rethrown as 'Failed to retrieve registration confirmation poll data: <statusText>'. The original detail (including the cloud's JSON error) is only visible in SystemLogger under 'Failed to get confirmation poll from Rocket.Chat Cloud'.

Solutions

  1. Check SystemLogger for the underlying error detail before trusting the generic statusText message.
  2. Restart the registration to obtain a fresh device code and approve it promptly in the cloud console.
  3. Verify network egress and proxy access to Cloud_Url from the server.
  4. If the cloud is temporarily down, wait and retry the poll later.
Defensive patterns

Strategy: retry

Try / catch

try {
  const poll = await getConfirmationPoll(deviceCode);
} catch (e) {
  if (e instanceof Error && e.message.startsWith('Failed to retrieve registration confirmation poll data')) {
    // inspect SystemLogger for the real cause; restart registration if the device code expired
  }
  throw e;
}

Prevention

When it happens

Trigger: Polling while the cloud rejects the device code (expired or unknown), during cloud outages, or when a proxy answers instead of the cloud so the body cannot be parsed.

Common situations: Registration left pending past the device-code expiry; cloud maintenance windows; blocked egress to cloud.rocket.chat; slow approvals exceeding the code lifetime.

Related errors


AI-assisted analysis of RocketChat/Rocket.Chat@b2c16d5842 (2026-08-18). Data as JSON: /api/errors/4e27795e5e4b81b1. Report an issue: GitHub.

Appendix: source

Thrown at apps/meteor/server/lib/cloud/getConfirmationPoll.ts:26

export async function getConfirmationPoll(deviceCode: string): Promise<CloudConfirmationPollData> {
	assertNotOfflineLicense();

	try {
		const cloudUrl = settings.get<string>('Cloud_Url');
		const response = await fetch(`${cloudUrl}/api/v2/register/workspace/poll`, {
			params: { token: deviceCode },
			// SECURITY: the URL is a default hardcoded value or an envvar/setting set by an admin. It's safe to disable this check.
			ignoreSsrfValidation: true,
		});

		try {
			if (!response.ok) {
				throw new Error((await response.json()).error);
			}

			return await response.json();
		} catch (err) {
			throw new Error(`Failed to retrieve registration confirmation poll data: ${response.statusText}`);
		}
	} catch (err: any) {
		SystemLogger.error({
			msg: 'Failed to get confirmation poll from Rocket.Chat Cloud',
			url: '/api/v2/register/workspace/poll',
			err,
		});

		throw err;
	}
}

View on GitHub (pinned to b2c16d5842)