| # Profiles |
|
|
| Profiles are browser user data directories. They hold cookies, local storage, history, and other durable browser state. |
|
|
| In PinchTab: |
|
|
| - profiles exist even when no instance is running |
| - one profile can have at most one active managed instance at a time |
| - profile IDs and names are both useful, but some endpoints require the profile ID specifically |
|
|
| ## List Profiles |
|
|
| ```bash |
| curl http://localhost:9867/profiles |
| # CLI Alternative |
| pinchtab profiles |
| # Response |
| [ |
| { |
| "id": "prof_278be873", |
| "name": "work", |
| "created": "2026-02-27T20:37:13.599055326Z", |
| "diskUsage": 534952089, |
| "sizeMB": 510.17, |
| "running": false, |
| "source": "created", |
| "useWhen": "Use for work accounts", |
| "description": "" |
| } |
| ] |
| ``` |
|
|
| Notes: |
|
|
| - `GET /profiles` excludes temporary auto-generated instance profiles by default |
| - use `GET /profiles?all=true` to include temporary profiles |
| - `pinchtab profiles` exists, but the HTTP API is the more reliable source of truth for structured output |
|
|
| ## Get One Profile |
|
|
| ```bash |
| curl http://localhost:9867/profiles/prof_278be873 |
| # Response |
| { |
| "id": "prof_278be873", |
| "name": "work", |
| "path": "/path/to/profiles/work", |
| "pathExists": true, |
| "created": "2026-02-27T20:37:13.599055326Z", |
| "diskUsage": 534952089, |
| "sizeMB": 510.17, |
| "source": "created", |
| "chromeProfileName": "Your Chrome", |
| "accountEmail": "admin@example.com", |
| "accountName": "Luigi", |
| "hasAccount": true, |
| "useWhen": "Use for work accounts", |
| "description": "" |
| } |
| ``` |
|
|
| `GET /profiles/{id}` accepts either the profile ID or the profile name. |
|
|
| ## Create A Profile |
|
|
| ```bash |
| curl -X POST http://localhost:9867/profiles \ |
| -H "Content-Type: application/json" \ |
| -d '{"name":"scraping-profile","description":"Used for scraping","useWhen":"Use for ecommerce scraping"}' |
| # Response |
| { |
| "status": "created", |
| "id": "prof_0f32ae81", |
| "name": "scraping-profile" |
| } |
| ``` |
|
|
| Notes: |
|
|
| - there is no `pinchtab profile create` CLI command |
| - both `POST /profiles` and `POST /profiles/create` work for creating profiles |
|
|
| ## Update A Profile |
|
|
| ```bash |
| curl -X PATCH http://localhost:9867/profiles/prof_278be873 \ |
| -H "Content-Type: application/json" \ |
| -d '{"description":"Updated description","useWhen":"Updated usage note"}' |
| # Response |
| { |
| "status": "updated", |
| "id": "prof_278be873", |
| "name": "work" |
| } |
| ``` |
|
|
| You can also rename the profile: |
|
|
| ```bash |
| curl -X PATCH http://localhost:9867/profiles/prof_278be873 \ |
| -H "Content-Type: application/json" \ |
| -d '{"name":"work-renamed"}' |
| ``` |
|
|
| Important: |
|
|
| - `PATCH /profiles/{id}` requires the profile ID |
| - using the profile name in that path returns an error |
| - a rename changes the generated profile ID because IDs are derived from the name |
|
|
| ## Delete A Profile |
|
|
| ```bash |
| curl -X DELETE http://localhost:9867/profiles/prof_278be873 |
| # Response |
| { |
| "status": "deleted", |
| "id": "prof_278be873", |
| "name": "work" |
| } |
| ``` |
|
|
| `DELETE /profiles/{id}` also requires the profile ID. |
|
|
| ## Start Or Stop By Profile |
|
|
| Start the active instance for a profile: |
|
|
| ```bash |
| curl -X POST http://localhost:9867/profiles/prof_278be873/start \ |
| -H "Content-Type: application/json" \ |
| -d '{"headless":true}' |
| # Response |
| { |
| "id": "inst_ea2e747f", |
| "profileId": "prof_278be873", |
| "profileName": "work", |
| "port": "9868", |
| "headless": true, |
| "status": "starting" |
| } |
| ``` |
|
|
| Stop the active instance for a profile: |
|
|
| ```bash |
| curl -X POST http://localhost:9867/profiles/prof_278be873/stop |
| # Response |
| { |
| "status": "stopped", |
| "id": "prof_278be873", |
| "name": "work" |
| } |
| ``` |
|
|
| For these orchestrator routes, the path can be a profile ID or profile name. |
|
|
| ## Check Whether A Profile Has A Running Instance |
|
|
| ```bash |
| curl http://localhost:9867/profiles/prof_278be873/instance |
| # Response |
| { |
| "name": "work", |
| "running": true, |
| "status": "running", |
| "port": "9868", |
| "id": "inst_ea2e747f" |
| } |
| ``` |
|
|
| ## Additional Profile Operations |
|
|
| ### Reset A Profile |
|
|
| ```bash |
| curl -X POST http://localhost:9867/profiles/prof_278be873/reset |
| ``` |
|
|
| This route requires the profile ID. |
|
|
| ### Import A Profile |
|
|
| ```bash |
| curl -X POST http://localhost:9867/profiles/import \ |
| -H "Content-Type: application/json" \ |
| -d '{"name":"imported-profile","sourcePath":"/path/to/existing/profile"}' |
| ``` |
|
|
| ### Get Logs |
|
|
| ```bash |
| curl http://localhost:9867/profiles/prof_278be873/logs |
| curl 'http://localhost:9867/profiles/work/logs?limit=50' |
| ``` |
|
|
| `logs` accepts either the profile ID or the profile name. |
|
|
| ### Get Analytics |
|
|
| ```bash |
| curl http://localhost:9867/profiles/prof_278be873/analytics |
| curl http://localhost:9867/profiles/work/analytics |
| ``` |
|
|
| `analytics` also accepts either the profile ID or the profile name. |
|
|
| ## Related Pages |
|
|
| - [Instances](./instances.md) |
| - [Tabs](./tabs.md) |
| - [Config](./config.md) |
|
|