POST /api/remote/start Bearer

Start Tunnel

Start a Cloudflare tunnel to expose PocketPaw's local server with a public HTTPS URL. Required for WhatsApp Business webhooks and remote dashboard access without port forwarding.

Overview

Starts a Cloudflare quick tunnel that exposes the local dashboard to the internet. No Cloudflare account is required — uses the free trycloudflare.com domain.

Warning

When a tunnel is active, localhost auth bypass is disabled. All requests must include a valid token.

Response (Success)

url string
The public tunnel URL
active boolean
true

Response (Failure)

error string
Error message
active boolean
false
Terminal window
curl -X POST "http://localhost:8000/api/remote/start" \
-H "Authorization: Bearer <token>"
const response = await fetch("http://localhost:8000/api/remote/start", {
method: "POST",
headers: { "Authorization": "Bearer <token>" }
});
const data = await response.json();
console.log(data);
import requests
response = requests.post(
"http://localhost:8000/api/remote/start",
headers={"Authorization": "Bearer <token>"}
)
print(response.json())
{
"url": "https://steep-mountain-abc123.trycloudflare.com",
"active": true
}
Info

Requires cloudflared to be installed on the system. Install via brew install cloudflared or apt install cloudflared.

Request
curl -X POST "http://localhost:8000/api/remote/start" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>"
const response = await fetch("http://localhost:8000/api/remote/start", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": "Bearer <token>"
},
});

const data = await response.json();
console.log(data);
import requests

response = requests.post(
    "http://localhost:8000/api/remote/start",
    headers={'Content-Type':'application/json','Authorization':'Bearer <token>'},
)

print(response.json())
package main

import (
    "fmt"
    "net/http"
    "io"
)

func main() {
    req, _ := http.NewRequest("POST", "http://localhost:8000/api/remote/start", nil)
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer <token>")

    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
Response
Send a request to see the response