diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index e5978d484ea84d89fff98d1368cad8ce9f43fbae..843768619e5e03b42165902b17c79f5bfc27930f 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -527,7 +527,8 @@ sub startup {
 					my ($journey) = @_;
 					my $found;
 					for my $stop ( $journey->route ) {
-						if ( $stop->eva == $station ) {
+						if ( $stop->name eq $station or $stop->eva == $station )
+						{
 							$found = $stop;
 							last;
 						}
diff --git a/lib/Travelynx/Controller/Api.pm b/lib/Travelynx/Controller/Api.pm
index 8ff98dee0ee6759e2eb60bd85de14f146324344b..7f72a53e4c0b2623bacbcd329ac3df0a11937f6f 100755
--- a/lib/Travelynx/Controller/Api.pm
+++ b/lib/Travelynx/Controller/Api.pm
@@ -176,12 +176,14 @@ sub travel_v1 {
 		my $from_station = sanitize( q{}, $payload->{fromStation} );
 		my $to_station   = sanitize( q{}, $payload->{toStation} );
 		my $train_id;
+		my $hafas = exists $payload->{train}{journeyID} ? 1 : 0;
 
 		if (
 			not(
 				$from_station
-				and ( ( $payload->{train}{type} and $payload->{train}{no} )
-					or $payload->{train}{id} )
+				and (  ( $payload->{train}{type} and $payload->{train}{no} )
+					or $payload->{train}{id}
+					or $payload->{train}{journeyID} )
 			)
 		  )
 		{
@@ -196,7 +198,7 @@ sub travel_v1 {
 			return;
 		}
 
-		if ( not $self->stations->search($from_station) ) {
+		if ( not $hafas and not $self->stations->search($from_station) ) {
 			$self->render(
 				json => {
 					success    => \0,
@@ -208,7 +210,10 @@ sub travel_v1 {
 			return;
 		}
 
-		if ( $to_station and not $self->stations->search($to_station) ) {
+		if (    $to_station
+			and not $hafas
+			and not $self->stations->search($to_station) )
+		{
 			$self->render(
 				json => {
 					success    => \0,
@@ -222,7 +227,11 @@ sub travel_v1 {
 
 		my $train_p;
 
-		if ( exists $payload->{train}{id} ) {
+		if ( exists $payload->{train}{journeyID} ) {
+			$train_p = Mojo::Promise->resolve(
+				sanitize( q{}, $payload->{train}{journeyID} ) );
+		}
+		elsif ( exists $payload->{train}{id} ) {
 			$train_p
 			  = Mojo::Promise->resolve( sanitize( 0, $payload->{train}{id} ) );
 		}
diff --git a/templates/api_documentation.html.ep b/templates/api_documentation.html.ep
index ab90dec30972064a277059f80d89230c82167d63..084713901242942622c44e0e587446e7d6f5d708 100644
--- a/templates/api_documentation.html.ep
+++ b/templates/api_documentation.html.ep
@@ -102,7 +102,7 @@
 		<p style="font-family: Monospace;">
 			curl -X POST -H "Content-Type: application/json" -d '{"token":"<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>"}' <%= $api_root %>/travel
 		</p>
-		<p>Payload zum Einchecken, optional mit Zielwahl:</p>
+		<p>Payload zum Einchecken per IRIS-Backend (Schienenverkehr DE/DB), optional mit Zielwahl:</p>
 		<p style="font-family: Monospace;">
 		{<br/>
 			"token" : "<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>",<br/>
@@ -116,6 +116,19 @@
 			"comment" : "Beliebiger Text" (optional, überschreibt vorherigen Kommentar)<br/>
 		}
 		</p>
+		<p>Payload zum Einchecken per HAFAS-Backend (Nahverkehr und außerhalb DE/DB), optional mit Zielwahl. fromStation und toStation müssen mit den Unterwegshalten übereinstimmen, z.B. "Hauptbahnhof (U Gleis 2+4), Essen (Ruhr)" statt "Essen Hbf".</p>
+		<p style="font-family: Monospace;">
+		{<br/>
+			"token" : "<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>",<br/>
+			"action" : "checkin",<br/>
+			"train" : {<br/>
+				"journeyID" : "1|1426396|4|80|19082023",<br/>
+			}<br/>
+			"fromStation" : 651806, (Name oder EVA-Nummer)<br/>
+			"toStation" : 654645, (optional, Name oder EVA-Nummer)<br/>
+			"comment" : "Beliebiger Text" (optional, überschreibt vorherigen Kommentar)<br/>
+		}
+		</p>
 		<p>Payload zur Wahl eines neuen Ziels, wenn bereits eingecheckt:</p>
 		<p style="font-family: Monospace;">
 		{<br/>