Request ID | Echo Skip to content
Quickstart Guide Routing Guide Binding Guide
opennavigateescclose
`;function a(){const s=document.querySelector(".pagefind-ui");if(!s||s.querySelector(".echo-search-empty"))return!!s;const e=s.querySelector(".pagefind-ui__form");return e?(e.insertAdjacentHTML("afterend",i),!0):!1}if(!a()){const s=new MutationObserver(()=>{a()&&s.disconnect()});s.observe(document.body,{childList:!0,subtree:!0}),setTimeout(()=>{s.disconnect()},1e4)}

Request ID

Request ID middleware generates a unique ID for a request.

All core middleware lives in the middleware package:

import "github.com/labstack/echo/v5/middleware"
e.Use(middleware.RequestID())

Example:

func main() {
e := echo.New()
e.Use(middleware.RequestID())
e.GET("/", func(c *echo.Context) error {
return c.String(http.StatusOK, c.Response().Header().Get(echo.HeaderXRequestID))
})
if err := e.Start(":8080"); err != nil {
e.Logger.Error("failed to start server", "error", err)
}
}
e.Use(middleware.RequestIDWithConfig(middleware.RequestIDConfig{
Generator: func() string {
return customGenerator()
},
}))
type RequestIDConfig struct {
// Skipper defines a function to skip middleware.
Skipper Skipper
// Generator defines a function to generate an ID.
// Optional. Default value random.String(32).
Generator func() string
// RequestIDHandler defines a function which is executed for a request id.
RequestIDHandler func(c *echo.Context, requestID string)
// TargetHeader defines what header to look for to populate the id.
// Optional. Default value is `X-Request-Id`.
TargetHeader string
}
// Effective defaults applied when fields are left unset.
RequestIDConfig{
Skipper: DefaultSkipper,
Generator: generator, // random 32-character string
TargetHeader: echo.HeaderXRequestID,
}

You can set the ID from the requester with the X-Request-ID header.

Terminal window
curl -H "X-Request-ID: 3" --compressed -v "http://localhost:1323/?my=param"
{"time":"2017-11-13T20:26:28.6438003+01:00","id":"3","remote_ip":"::1","host":"localhost:1323","method":"GET","uri":"/?my=param","my":"param","status":200, "latency":0,"latency_human":"0s","bytes_in":0,"bytes_out":13}
© 2026 LabStack LLC. Released under the MIT License.