SES HospedajesTraveller reportErrors

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:

  1. 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.
  2. You query the batch. Minutes or hours later, SES tells you what it did with each communication: either it gives you a communication code per 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.

Minimum normalisation before sending
// 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:

SituationWhat SES expects
Traveller resident in SpainThe INE municipality code (5 digits), not the name typed by hand.
Traveller resident abroadThe name of the municipality as text; there is no INE code to put there.
Spanish postcodeThat 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:

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:

SymptomUsual cause
HTTP 401 on submissionWrong SES username or password, or expired after a change on the portal.
The report does not go out and there is no Ministry errorThe accommodation is missing its establishment code: without it there is nothing to file.
TLS / certificate errorThe 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:

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.