Networking Relay Error 404

I am following this page to use the new Relay system:

https://docs.unity.com/relay/relay-and-ngo.html

I have implemented the auth, host and join code listed there.

When I run the Host code on one device I get a join code. I then run it on another device and enter that code and execute the join process.

On the joining computer I get these errors:

Relay create join code request failed
UnityEngine.Debug:LogError (object)
GameManagerScript/<JoinRelayServerFromJoinCode>d__71:MoveNext () (at Assets/Scripts/Game/GameManagerScript.cs:497)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<Unity.Services.Relay.Models.JoinAllocation>:SetException (System.Exception)
Unity.Services.Relay.WrappedRelayService/<JoinAllocationAsync>d__8:MoveNext () (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/SDK/WrappedRelayService.cs:171)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<Unity.Services.Relay.Response`1<Unity.Services.Relay.Models.JoinResponseBody>>:SetException (System.Exception)
Unity.Services.Relay.Apis.RelayAllocations.RelayAllocationsApiClient/<JoinRelayAsync>d__9:MoveNext () (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Apis/RelayAllocationsApi.cs:186)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<Unity.Services.Relay.Http.HttpClientResponse>:SetResult (Unity.Services.Relay.Http.HttpClientResponse)
Unity.Services.Relay.Http.HttpClient/<MakeRequestAsync>d__1:MoveNext () (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Http/HttpClient.cs:39)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<Unity.Services.Relay.Http.HttpClientResponse>:SetResult (Unity.Services.Relay.Http.HttpClientResponse)
Unity.Services.Relay.Http.HttpClient/<CreateWebRequestAsync>d__3:MoveNext () (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Http/HttpClient.cs:77)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<Unity.Services.Relay.Http.HttpClientResponse>:SetResult (Unity.Services.Relay.Http.HttpClientResponse)
Unity.Services.Relay.Http.HttpClient/<>c__DisplayClass3_0/<<CreateWebRequestAsync>b__0>d:MoveNext () (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Http/HttpClient.cs:74)
System.Threading.Tasks.TaskCompletionSource`1<Unity.Services.Relay.Http.HttpClientResponse>:SetResult (Unity.Services.Relay.Http.HttpClientResponse)
Unity.Services.Relay.Http.UnityWebRequestHelpers/<>c__DisplayClass0_0:<GetAwaiter>b__0 (UnityEngine.AsyncOperation) (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Http/UnityWebRequestHelpers.cs:34)
UnityEngine.AsyncOperation:InvokeCompletionEvent () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/AsyncOperation.cs:21)

And then this:

HttpException`1: (404) HTTP/1.1 404 Not Found
Unity.Services.Relay.Http.ResponseHandler.HandleAsyncResponse (Unity.Services.Relay.Http.HttpClientResponse response, System.Collections.Generic.Dictionary`2[TKey,TValue] statusCodeToTypeMap) (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Http/ResponseHandler.cs:103)
Unity.Services.Relay.Http.ResponseHandler.HandleAsyncResponse[T] (Unity.Services.Relay.Http.HttpClientResponse response, System.Collections.Generic.Dictionary`2[TKey,TValue] statusCodeToTypeMap) (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Http/ResponseHandler.cs:186)
Unity.Services.Relay.Apis.RelayAllocations.RelayAllocationsApiClient.JoinRelayAsync (Unity.Services.Relay.RelayAllocations.JoinRelayRequest request, Unity.Services.Relay.Configuration operationConfiguration) (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/Apis/RelayAllocationsApi.cs:185)
Unity.Services.Relay.WrappedRelayService.JoinAllocationAsync (System.String joinCode) (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/SDK/WrappedRelayService.cs:149)
Rethrow as RelayServiceException: Not Found: join code not found
Unity.Services.Relay.WrappedRelayService.JoinAllocationAsync (System.String joinCode) (at Library/PackageCache/com.unity.services.relay@1.0.4/Runtime/SDK/WrappedRelayService.cs:156)
GameManagerScript.JoinRelayServerFromJoinCode (System.String joinCode) (at Assets/Scripts/Game/GameManagerScript.cs:498)
GameManagerScript.CreateMatchRequest (System.String pin, System.Int32 players, System.Boolean isHost) (at Assets/Scripts/Game/GameManagerScript.cs:451)
System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) (at <5e2d116f98d140d0a76ec8a673a2a4ac>:0)
UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/UnitySynchronizationContext.cs:153)
UnityEngine.UnitySynchronizationContext.Exec () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/UnitySynchronizationContext.cs:83)
UnityEngine.UnitySynchronizationContext.ExecuteTasks () (at /Users/bokken/buildslave/unity/build/Runtime/Export/Scripting/UnitySynchronizationContext.cs:107)

I figured this out. It is really dumb, but hopefully it will save someone else some wondering.

You can’t just do the first part of the creation of the host that is contained in the

AllocateRelayServerAndGetJoinCode

Method example. You have to actually do the rest of the setup and start the host. Then the join code becomes valid and you can do the join part.