SES Hospedajes errors: why your report is rejected and how to fix it
The rejections SES Hospedajes actually returns when you file the traveller report — document, postcode, municipality, duplicates — and how to avoid them.
· 9 min read
Filing the traveller report with SES Hospedajes has a trap you do not see until you are inside: the submission can go through “fine” and the report still be rejected. SES accepts the batch, hands you a number, and hours later you find out one of the communications came back with an error. If you are not watching, that traveller is simply not filed.
This article collects the rejections we actually ran into integrating the service, the concrete cause of each one, and how to avoid them before sending. No theory: all of them have happened.
Why a “correct” submission can fail
SES processes batches asynchronously. The real flow has two stages:
- You send the batch. If the XML is valid and the credentials get in, SES answers with a batch number. At this point you still do not know whether the data is right.
- You query the batch. Minutes or hours later, SES tells you what it did with each communication: either it gives you a
communication codeper traveller, or it returns errors.
The practical consequence: an integration that only checks the submission response is blind. You have to go back and ask. And because each traveller is an independent communication inside the batch, it is perfectly possible for three out of a party of four to be confirmed and one rejected, with everything else looking calm.
That is why it is worth storing the outcome per traveller, not per batch. If you store “batch 000123 = OK” you lose the information about who was left out.
The document: the most common rejection
Most rejections are about the document, and nearly all of them can be avoided by validating in the form. These are the concrete cases:
Spaces and separators
SES wants the number exactly as it appears on the document: no spaces, dots or hyphens. A real case that cost us a report: someone typed 53572037 T with a space before the letter. The DNI check-letter validation passed it — the control digit adds up — but SES rejected it on formatting.
// uppercase, and strip any separator const clean = value.toUpperCase().replace(/[\s.\-_/]/g, ''); // 53572037 T → 53572037T
Wrong DNI or NIE check letter
It sounds obvious, but it is the most frequent error when the guest types from memory. It is computed from the remainder of dividing the number by 23 against the table TRWAGMYFPDXBNJZSQVHLCKE. For the NIE, the leading letter is replaced by a digit (X→0, Y→1, Z→2) and then the same rule applies. Validating it in the form saves the round trip to the Ministry.
Missing document support number
This one catches a lot of people. With a Spanish DNI or NIE, alongside the number you must send the support number: the code printed on the document itself (on the current DNI, top right; it starts with letters and continues with digits). It is not optional, and anyone who does not know what it is leaves it blank.
Missing second surname
With a Spanish document, SES expects two surnames. With a foreign passport, one is enough. If your form asks for “surname” in a single field, this fails systematically.
Repeated document within the same report
If two travellers in the same party carry the same document number, SES rejects the communication. It happened to us with two brothers: one made a mistake and entered the other’s DNI. It is worth checking for duplicates within the party before sending, because the rejection arrives late and is confusing.
Address, municipality and postcode
The second block of rejections is geographic, and here the detail matters:
| Situation | What SES expects |
|---|---|
| Traveller resident in Spain | The INE municipality code (5 digits), not the name typed by hand. |
| Traveller resident abroad | The name of the municipality as text; there is no INE code to put there. |
| Spanish postcode | That it actually exists: five digits is not enough if it is not in the address register. |
The postcode case is the one that surprises people most. 99999 has five digits and passes any format validation, but SES rejects it because it does not correspond to anywhere. Validating it against the real list of Spanish postcodes avoids the rejection.
One thing worth not validating: cross-checking the postcode against the municipality’s province. There are legitimate enclaves — the Condado de Treviño is a municipality of Burgos with Álava postcodes — and a “logical” validation would break them. SES accepts them; your form should too.
Minors: the threshold is 14, not 18
Since December 2024, every traveller has to be registered, minors included. But the operational cut-off is 14 years old, not the age of majority:
- From 14: the traveller must have their own document and signs their own report.
- Under 14: the document is optional, but the relationship to the accompanying adult is required, using a code from the official SES table — not free text.
Age is calculated on the arrival date, not on the date the form is filled in. A child who turns 14 between booking and arrival changes category, and that is an easy one to get wrong.
When the problem is not the data
Not every failure comes from the traveller. These are configuration problems, and they block the whole report:
| Symptom | Usual cause |
|---|---|
| HTTP 401 on submission | Wrong SES username or password, or expired after a change on the portal. |
| The report does not go out and there is no Ministry error | The accommodation is missing its establishment code: without it there is nothing to file. |
| TLS / certificate error | The service uses certificates from a Spanish authority that is not in the default trust store of many environments. You have to include the CA bundle. |
The last one wastes the most time on a new integration, because the error does not mention SES at all: it looks like a network problem.
The real deadline: 24 hours, and what to do if people are missing
The obligation is to file within 24 hours of each person’s stay beginning, and to keep the information for 3 years. The question that always comes up: what do I do if, at sending time, only two of four travellers have registered?
Send what you have. Because each traveller is an independent communication, you can send a partial report and file the stragglers afterwards, without duplicating the ones already sent. Waiting for the full party is what makes you miss the deadline.
What is worth validating before sending
To sum up, validating this in the form saves you almost every rejection:
- Normalised document (no spaces or separators, uppercase).
- Correct DNI/NIE check letter.
- Support number present when the document is a DNI or NIE.
- Second surname present with a Spanish document.
- No repeated document among travellers in the same party.
- INE municipality code if the address is in Spain; the name if it is abroad.
- A Spanish postcode that actually exists in the address register.
- Relationship (a table code) for under-14s on the arrival date.
- Establishment code configured on the accommodation.
And above all: query the batch again. Without that second step you do not know whether you are complying or it merely looks that way.
If your accommodation is in Catalonia or the Basque Country
None of the above applies: those two regions have their own system and do not use SES Hospedajes. We cover it in the article on registration in Catalonia, where we also explain why there is no automated way to integrate there.
Kinapi files the report for you
The guest registers from their phone with the data already validated, signs the contract, and Kinapi transmits the report to SES Hospedajes. €0.50 per booking filed, no subscription.