odoo/odoo · error · UserError
A user already exists with theses credentials on our server.
Error message
A user already exists with theses credentials on our server. Please check your information.
What it means
UserError raised during proxy user creation (_create_user path in account_edi_proxy_client). The proxy answered create_user with the raw error string 'A user already exists with this identification.', meaning the edi_identification (company/participant identifier for that proxy_type) is already registered on the Odoo proxy server. Because Peppol IAP errors lack proper codes, Odoo matches the message text and raises this translated UserError.
Source
Thrown at addons/account_edi_proxy_client/models/account_edi_proxy_user.py:195
)
edi_identification = self._get_proxy_identification(company, proxy_type)
if edi_mode == 'demo':
# simulate registration
response = {'id_client': f'demo{company.id}{proxy_type}', 'refresh_token': 'demo'}
else:
try:
# b64encode returns a bytestring, we need it as a string
server_url = self._get_server_url(proxy_type, edi_mode)
response = self._make_request(
f'{server_url}/iap/account_edi/2/create_user',
params=self._get_iap_params(company, proxy_type, private_key_sudo))
except AccountEdiProxyError as e:
raise UserError(e.message)
if 'error' in response:
if response['error'] == 'A user already exists with this identification.':
# Note: Peppol IAP errors weren't made properly with error code that are then translated on
# Odoo side. We are for now forced to check the error message.
raise UserError(_('A user already exists with theses credentials on our server. Please check your information.'))
raise UserError(response['error'])
return self.create({
'id_client': response['id_client'],
'company_id': company.id,
'proxy_type': proxy_type,
'edi_mode': edi_mode,
'edi_identification': edi_identification,
'private_key_id': private_key_sudo.id,
'refresh_token': response['refresh_token'],
})
def _renew_token(self):
''' Request the proxy for a new refresh token.
Request to the proxy should be made with a refresh token that expire after 24h to avoid
that multiple database use the same credentials. When receiving an error for an expired refresh_token,
This method makes a request to get a new refresh token.View on GitHub (pinned to 1e661df964)
Solutions
- Check whether registration actually already succeeded on this database: an existing account.edi.proxy.user row for the same identification means you can just use it instead of re-creating.
- If a previous attempt left a half-registered user, deactivate/remove it and retry, or use the resend/verification flow rather than create_user again.
- If the identification was claimed by a different database/party, you must either reclaim it through the provider's verification process or use a different (correct) identification.
- Verify the identification value itself (VAT/EAS combination) — a wrong but already-claimed identifier produces the same error.
Example fix
# before: blind registration
proxy_user = self._create_proxy_user(company, proxy_type)
# after: reuse an existing registration when present
existing = self.search([
('company_id', '=', company.id),
('proxy_type', '=', proxy_type),
('edi_identification', '=', edi_identification),
])
proxy_user = existing[:1] or self._create_proxy_user(company, proxy_type) Defensive patterns
Strategy: validation
Validate before calling
existing = env['account.edi.proxy.user'].search([
('company_id', '=', company.id),
('proxy_type', '=', proxy_type),
])
if existing:
return existing[:1] # already registered; skip create_user Try / catch
from odoo.exceptions import UserError
try:
user = self._create_proxy_user(company, proxy_type)
except UserError as e:
if 'already exists' in str(e):
return existing_proxy_user(company, proxy_type)
raise Prevention
- Search for an existing proxy user before triggering registration
- Ensure the edi_identification is unique across databases and providers
When it happens
Trigger: Registering an EDI proxy user (activating a webservice EDI format / Peppol onboarding) for an edi_identification that was already claimed — by a previous attempt on the same database, another database, or another party using the same identification (e.g. same VAT-based participant ID).
Common situations: Re-running Peppol/EDI registration after a partial first attempt; registering the same company identification on a test and a production database; another service/provider already claimed the participant identifier on the network.
Related errors
- A participant with these details has already been registered
- We could not find a user with this information on our server
- Cannot register a user with a %s application
- Please select a country for your company.
- A connection to '%s' already exists.
AI-assisted analysis of odoo/odoo@1e661df964 (2026-08-15).
Data as JSON: /api/errors/8e9110288928dcec.
Report an issue: GitHub.