# Devtools # Session ## List sessions. `client.BrowserRendering.Devtools.Session.List(ctx, params) (*[]DevtoolSessionListResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/session` List active browser sessions. ### Parameters - `params DevtoolSessionListParams` - `AccountID param.Field[string]` Path param: Account ID. - `Limit param.Field[float64]` Query param - `Offset param.Field[float64]` Query param ### Returns - `type DevtoolSessionListResponse []DevtoolSessionListResponse` - `SessionID string` Session ID. - `CloseReason string` Reason for session closure. - `CloseReasonText string` Human-readable close reason. - `ConnectionEndTime float64` Connection end time. - `ConnectionID string` Connection ID. - `ConnectionStartTime float64` Connection start time. - `DevtoolsFrontendURL string` DevTools frontend URL. - `EndTime float64` Session end time. - `LastUpdated float64` Last updated timestamp. - `StartTime float64` Session start time. - `WebSocketDebuggerURL string` WebSocket URL for debugging this target. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) sessions, err := client.BrowserRendering.Devtools.Session.List(context.TODO(), browser_rendering.DevtoolSessionListParams{ AccountID: cloudflare.F("account_id"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", sessions) } ``` #### Response ```json [ { "sessionId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "closeReason": "closeReason", "closeReasonText": "closeReasonText", "connectionEndTime": 0, "connectionId": "connectionId", "connectionStartTime": 0, "devtoolsFrontendUrl": "devtoolsFrontendUrl", "endTime": 0, "lastUpdated": 0, "startTime": 0, "webSocketDebuggerUrl": "webSocketDebuggerUrl" } ] ``` ## Get session details. `client.BrowserRendering.Devtools.Session.Get(ctx, sessionID, query) (*DevtoolSessionGetResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/session/{session_id}` Get details for a specific browser session. ### Parameters - `sessionID string` Session ID. - `query DevtoolSessionGetParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolSessionGetResponse struct{…}` - `SessionID string` Session ID. - `CloseReason string` Reason for session closure. - `CloseReasonText string` Human-readable close reason. - `ConnectionEndTime float64` Connection end time. - `ConnectionID string` Connection ID. - `ConnectionStartTime float64` Connection start time. - `DevtoolsFrontendURL string` DevTools frontend URL. - `EndTime float64` Session end time. - `LastUpdated float64` Last updated timestamp. - `StartTime float64` Session start time. - `WebSocketDebuggerURL string` WebSocket URL for debugging this target. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) session, err := client.BrowserRendering.Devtools.Session.Get( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", browser_rendering.DevtoolSessionGetParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", session.SessionID) } ``` #### Response ```json { "sessionId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "closeReason": "closeReason", "closeReasonText": "closeReasonText", "connectionEndTime": 0, "connectionId": "connectionId", "connectionStartTime": 0, "devtoolsFrontendUrl": "devtoolsFrontendUrl", "endTime": 0, "lastUpdated": 0, "startTime": 0, "webSocketDebuggerUrl": "webSocketDebuggerUrl" } ``` # Browser ## Get a browser session ID. `client.BrowserRendering.Devtools.Browser.New(ctx, params) (*DevtoolBrowserNewResponse, error)` **post** `/accounts/{account_id}/browser-rendering/devtools/browser` Get a browser session ID. ### Parameters - `params DevtoolBrowserNewParams` - `AccountID param.Field[string]` Path param: Account ID. - `KeepAlive param.Field[float64]` Query param: Keep-alive time in milliseconds. - `Lab param.Field[bool]` Query param: Use experimental browser. - `Recording param.Field[bool]` Query param - `Targets param.Field[bool]` Query param: Include browser targets in response. ### Returns - `type DevtoolBrowserNewResponse struct{…}` - `SessionID string` Browser session ID. - `WebSocketDebuggerURL string` WebSocket URL for the session. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) browser, err := client.BrowserRendering.Devtools.Browser.New(context.TODO(), browser_rendering.DevtoolBrowserNewParams{ AccountID: cloudflare.F("account_id"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", browser.SessionID) } ``` #### Response ```json { "sessionId": "sessionId", "webSocketDebuggerUrl": "webSocketDebuggerUrl" } ``` ## Acquire and connect to browser session. `client.BrowserRendering.Devtools.Browser.Launch(ctx, params) error` **get** `/accounts/{account_id}/browser-rendering/devtools/browser` Acquires and establishes a WebSocket connection to a browser session. ### Parameters - `params DevtoolBrowserLaunchParams` - `AccountID param.Field[string]` Path param: Account ID. - `KeepAlive param.Field[float64]` Query param: Keep-alive time in ms (only valid when acquiring new session). - `Lab param.Field[bool]` Query param: Use experimental browser. - `Recording param.Field[bool]` Query param ### Example ```go package main import ( "context" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) err := client.BrowserRendering.Devtools.Browser.Launch(context.TODO(), browser_rendering.DevtoolBrowserLaunchParams{ AccountID: cloudflare.F("account_id"), }) if err != nil { panic(err.Error()) } } ``` ## Connect to browser session. `client.BrowserRendering.Devtools.Browser.Connect(ctx, sessionID, params) error` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}` Establishes a WebSocket connection to an existing browser session. ### Parameters - `sessionID string` Browser session ID to connect to. - `params DevtoolBrowserConnectParams` - `AccountID param.Field[string]` Path param: Account ID. - `KeepAlive param.Field[float64]` Query param: Keep-alive time in ms (only valid when acquiring new session). - `Lab param.Field[bool]` Query param: Use experimental browser. - `Recording param.Field[bool]` Query param ### Example ```go package main import ( "context" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) err := client.BrowserRendering.Devtools.Browser.Connect( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", browser_rendering.DevtoolBrowserConnectParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } } ``` ## Close browser session. `client.BrowserRendering.Devtools.Browser.Delete(ctx, sessionID, body) (*DevtoolBrowserDeleteResponse, error)` **delete** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}` Closes an existing browser session. ### Parameters - `sessionID string` Browser session ID to close. - `body DevtoolBrowserDeleteParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolBrowserDeleteResponse struct{…}` - `Status DevtoolBrowserDeleteResponseStatus` - `const DevtoolBrowserDeleteResponseStatusClosing DevtoolBrowserDeleteResponseStatus = "closing"` - `const DevtoolBrowserDeleteResponseStatusClosed DevtoolBrowserDeleteResponseStatus = "closed"` ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) browser, err := client.BrowserRendering.Devtools.Browser.Delete( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", browser_rendering.DevtoolBrowserDeleteParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", browser.Status) } ``` #### Response ```json { "status": "closing" } ``` ## Get browser version metadata. `client.BrowserRendering.Devtools.Browser.Version(ctx, sessionID, query) (*DevtoolBrowserVersionResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/version` Get browser version metadata. ### Parameters - `sessionID string` Browser session ID. - `query DevtoolBrowserVersionParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolBrowserVersionResponse struct{…}` - `Browser string` Browser name and version. - `ProtocolVersion string` Chrome DevTools Protocol version. - `UserAgent string` User agent string. - `V8Version string` V8 JavaScript engine version. - `WebKitVersion string` WebKit version. - `WebSocketDebuggerURL string` WebSocket URL for debugging the browser. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) response, err := client.BrowserRendering.Devtools.Browser.Version( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", browser_rendering.DevtoolBrowserVersionParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Browser) } ``` #### Response ```json { "Browser": "Browser", "Protocol-Version": "Protocol-Version", "User-Agent": "User-Agent", "V8-Version": "V8-Version", "WebKit-Version": "WebKit-Version", "webSocketDebuggerUrl": "webSocketDebuggerUrl" } ``` ## Get Chrome DevTools Protocol schema. `client.BrowserRendering.Devtools.Browser.Protocol(ctx, sessionID, query) (*DevtoolBrowserProtocolResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/protocol` Returns the complete Chrome DevTools Protocol schema including all domains, commands, events, and types. This schema describes the entire CDP API surface. ### Parameters - `sessionID string` Browser session ID. - `query DevtoolBrowserProtocolParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolBrowserProtocolResponse struct{…}` - `Domains []DevtoolBrowserProtocolResponseDomain` List of protocol domains. - `Domain string` Domain name. - `Commands []map[string, unknown]` Available commands. - `Dependencies []string` Domain dependencies. - `Events []map[string, unknown]` Available events. - `Experimental bool` Whether this domain is experimental. - `Types []map[string, unknown]` Type definitions. - `Version DevtoolBrowserProtocolResponseVersion` Protocol version. - `Major string` Major version. - `Minor string` Minor version. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) response, err := client.BrowserRendering.Devtools.Browser.Protocol( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", browser_rendering.DevtoolBrowserProtocolParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Domains) } ``` #### Response ```json { "domains": [ { "domain": "domain", "commands": [ { "foo": {} } ], "dependencies": [ "string" ], "events": [ { "foo": {} } ], "experimental": true, "types": [ { "foo": {} } ] } ], "version": { "major": "major", "minor": "minor" } } ``` # Page ## Connect to a specific Chrome DevTools page. `client.BrowserRendering.Devtools.Browser.Page.Get(ctx, sessionID, targetID, query) error` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/page/{target_id}` Establishes a WebSocket connection to a specific Chrome DevTools target or page. ### Parameters - `sessionID string` Browser session ID. - `targetID string` Target ID, e.g. page ID. - `query DevtoolBrowserPageGetParams` - `AccountID param.Field[string]` Account ID. ### Example ```go package main import ( "context" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) err := client.BrowserRendering.Devtools.Browser.Page.Get( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "target_id", browser_rendering.DevtoolBrowserPageGetParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } } ``` # Targets ## Open a new browser tab. `client.BrowserRendering.Devtools.Browser.Targets.New(ctx, sessionID, params) (*DevtoolBrowserTargetNewResponse, error)` **put** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/new` Opens a new tab in the browser. Optionally specify a URL to navigate to. ### Parameters - `sessionID string` Browser session ID. - `params DevtoolBrowserTargetNewParams` - `AccountID param.Field[string]` Path param: Account ID. - `URL param.Field[string]` Query param ### Returns - `type DevtoolBrowserTargetNewResponse struct{…}` - `ID string` Target ID. - `Type string` Target type (page, background_page, worker, etc.). - `URL string` URL of the target. - `Description string` Target description. - `DevtoolsFrontendURL string` DevTools frontend URL. - `Title string` Title of the target. - `WebSocketDebuggerURL string` WebSocket URL for debugging this target. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) target, err := client.BrowserRendering.Devtools.Browser.Targets.New( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", browser_rendering.DevtoolBrowserTargetNewParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", target.ID) } ``` #### Response ```json { "id": "id", "type": "type", "url": "url", "description": "description", "devtoolsFrontendUrl": "devtoolsFrontendUrl", "title": "title", "webSocketDebuggerUrl": "webSocketDebuggerUrl" } ``` ## List targets. `client.BrowserRendering.Devtools.Browser.Targets.List(ctx, sessionID, query) (*[]DevtoolBrowserTargetListResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/list` Returns a list of all debuggable targets including tabs, pages, service workers, and other browser contexts. ### Parameters - `sessionID string` Browser session ID. - `query DevtoolBrowserTargetListParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolBrowserTargetListResponse []DevtoolBrowserTargetListResponse` - `ID string` Target ID. - `Type string` Target type (page, background_page, worker, etc.). - `URL string` URL of the target. - `Description string` Target description. - `DevtoolsFrontendURL string` DevTools frontend URL. - `Title string` Title of the target. - `WebSocketDebuggerURL string` WebSocket URL for debugging this target. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) targets, err := client.BrowserRendering.Devtools.Browser.Targets.List( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", browser_rendering.DevtoolBrowserTargetListParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", targets) } ``` #### Response ```json [ { "id": "id", "type": "type", "url": "url", "description": "description", "devtoolsFrontendUrl": "devtoolsFrontendUrl", "title": "title", "webSocketDebuggerUrl": "webSocketDebuggerUrl" } ] ``` ## Get a target by ID. `client.BrowserRendering.Devtools.Browser.Targets.Get(ctx, sessionID, targetID, query) (*DevtoolBrowserTargetGetResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/list/{target_id}` Returns the debuggable target with the given ID. ### Parameters - `sessionID string` Browser session ID. - `targetID string` Target ID. - `query DevtoolBrowserTargetGetParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolBrowserTargetGetResponse struct{…}` - `ID string` Target ID. - `Type string` Target type (page, background_page, worker, etc.). - `URL string` URL of the target. - `Description string` Target description. - `DevtoolsFrontendURL string` DevTools frontend URL. - `Title string` Title of the target. - `WebSocketDebuggerURL string` WebSocket URL for debugging this target. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) target, err := client.BrowserRendering.Devtools.Browser.Targets.Get( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "target_id", browser_rendering.DevtoolBrowserTargetGetParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", target.ID) } ``` #### Response ```json { "id": "id", "type": "type", "url": "url", "description": "description", "devtoolsFrontendUrl": "devtoolsFrontendUrl", "title": "title", "webSocketDebuggerUrl": "webSocketDebuggerUrl" } ``` ## Activate a browser target. `client.BrowserRendering.Devtools.Browser.Targets.Activate(ctx, sessionID, targetID, query) (*DevtoolBrowserTargetActivateResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/activate/{target_id}` Activates (brings to front) a specific browser target by its ID. ### Parameters - `sessionID string` Browser session ID. - `targetID string` Target ID to activate. - `query DevtoolBrowserTargetActivateParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolBrowserTargetActivateResponse struct{…}` - `Message string` Target activated. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) response, err := client.BrowserRendering.Devtools.Browser.Targets.Activate( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "target_id", browser_rendering.DevtoolBrowserTargetActivateParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Message) } ``` #### Response ```json { "message": "message" } ``` ## Close a browser target. `client.BrowserRendering.Devtools.Browser.Targets.Close(ctx, sessionID, targetID, query) (*DevtoolBrowserTargetCloseResponse, error)` **get** `/accounts/{account_id}/browser-rendering/devtools/browser/{session_id}/json/close/{target_id}` Closes a specific browser target (tab, page, etc.) by its ID. Returns 'Target is closing' on success or an error if the target is not found. ### Parameters - `sessionID string` Browser session ID. - `targetID string` Target ID to close. - `query DevtoolBrowserTargetCloseParams` - `AccountID param.Field[string]` Account ID. ### Returns - `type DevtoolBrowserTargetCloseResponse struct{…}` - `Message string` Target is closing. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/browser_rendering" "github.com/cloudflare/cloudflare-go/option" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) response, err := client.BrowserRendering.Devtools.Browser.Targets.Close( context.TODO(), "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "target_id", browser_rendering.DevtoolBrowserTargetCloseParams{ AccountID: cloudflare.F("account_id"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.Message) } ``` #### Response ```json { "message": "message" } ```