{"record":{"id":"7610aedeb1fe027a","repo":"temporalio/temporal","slug":"stream-not-supported","errorCode":null,"errorMessage":"stream not supported","messagePattern":"stream not supported","errorType":"http","errorClass":null,"httpStatus":501,"severity":"error","filePath":"service/frontend/http_api_server.go","lineNumber":63,"sourceCode":"\tserveMux                      *runtime.ServeMux\n\tstopped                       chan struct{}\n\tallowedHosts                  dynamicconfig.TypedPropertyFn[*regexp.Regexp]\n\tmatchAdditionalHeaders        map[string]bool\n\tmatchAdditionalHeaderPrefixes []string\n}\n\nvar defaultForwardedHeaders = []string{\n\t\"Authorization-Extras\",\n\t\"X-Forwarded-For\",\n\thttp.CanonicalHeaderKey(headers.ClientNameHeaderName),\n\thttp.CanonicalHeaderKey(headers.ClientVersionHeaderName),\n}\n\ntype httpRemoteAddrContextKey struct{}\n\nvar (\n\terrHTTPGRPCListenerNotTCP     = errors.New(\"must use TCP for gRPC listener to support HTTP API\")\n\terrHTTPGRPCStreamNotSupported = errors.New(\"stream not supported\")\n)\n\n// NewHTTPAPIServer creates an [HTTPAPIServer].\n//\n// routes registered with additionalRouteRegistrationFuncs take precedence over the auto generated grpc proxy routes.\nfunc NewHTTPAPIServer(\n\tserviceConfig *Config,\n\trpcConfig config.RPC,\n\tgrpcListener net.Listener,\n\ttlsConfigProvider encryption.TLSConfigProvider,\n\thandler Handler,\n\toperatorHandler *OperatorHandlerImpl,\n\tinterceptors []grpc.UnaryServerInterceptor,\n\tmetricsHandler metrics.Handler,\n\trouter *mux.Router,\n\tnamespaceRegistry namespace.Registry,\n\tlogger log.Logger,\n) (*HTTPAPIServer, error) {","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/service/frontend/http_api_server.go#L45-L81","documentation":"errHTTPGRPCStreamNotSupported is returned by the HTTP API server's NewStream implementation: the Temporal HTTP API is a unary (POST/GET JSON) gateway over gRPC and does not support gRPC streaming. Any attempt to open a gRPC stream through the HTTP gateway fails with this error.","triggerScenarios":"An HTTP client or proxy invoking a streaming RPC method (gRPC server-streaming/bidi) against the HTTP API server, or a generated client attempting NewStream over the HTTP transport.","commonSituations":"Using grpc-gateway style clients expecting streaming, SDKs pointed at the HTTP port instead of the gRPC port, or workloads requiring long-lived streams (e.g. workflow task streams) misrouted through HTTP.","solutions":["Use streaming RPCs against the native gRPC port (default 7233), not the HTTP API port (default 7243)","Restructure the call as unary operations (polling) if you must stay on the HTTP API","Check client configuration so SDK transport selection matches the endpoint type"],"exampleFix":"// before: client dials HTTP port for streaming\nconn, _ := grpc.Dial(\"localhost:7243\")\n// after: use gRPC port\nconn, _ := grpc.Dial(\"localhost:7233\")","handlingStrategy":"fallback","validationCode":"// check the method is unary before routing through the HTTP API\nif methodKind(methodDesc) != grpc.UnaryCall {\n    // route to native gRPC endpoint instead\n}","typeGuard":null,"tryCatchPattern":"if strings.Contains(err.Error(), \"stream not supported\") { // switch to gRPC port and retry as stream or poll as unary }","preventionTips":["Point streaming clients at the gRPC port, HTTP clients at the HTTP port","Treat the HTTP API as unary-only and implement polling instead of streaming","Verify SDK transport configuration matches endpoint type"],"tags":["http-api","grpc","streaming","unsupported-operation"],"backgroundTag":"grpc-streaming-unsupported","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}