Update a profile
credential links a password credential (null unlinks it): sessions with this profile, and agent runs, task runs and steps in them, get it as if listed in their credentials (same scope rules), so the AI can sign in again when the cookies have expired. 404 credential_not_found, 400 for a secret, 402 without loginDetails.
PATCH
/v1/profiles/{id}Request
| Method and path | PATCH/v1/profiles/{id} |
|---|---|
| Base URL | https://api.boxline.dev |
| Authentication | Your API key in the x-api-key header (or Authorization: Bearer). The examples read it from BOXLINE_API_KEY. |
Path parameters
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
idrequired | string | – | – |
Body
JSON with content-type: application/json. Required.
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
name | string | – | – | 1 to 100 characters. |
credential | string | null | – | – | Up to 64 characters. Pattern: ^[A-Z_][A-Z0-9_]*$. |
curl -X PATCH "https://api.boxline.dev/v1/profiles/$PROFILE_ID" \ -H "x-api-key: $BOXLINE_API_KEY" \ -H "content-type: application/json" \ -d '{"credential": "SHOP"}'import { Boxline } from "@boxline/sdk";const bx = new Boxline(); // reads BOXLINE_API_KEY and BOXLINE_API_URLconst profile = await bx.profiles.update("PROFILE_ID", { credential: "SHOP" });console.log(profile.name, profile.credential);from boxline import Boxlinebx = Boxline() # reads BOXLINE_API_KEY and BOXLINE_API_URLprofile = bx.profiles.update("PROFILE_ID", credential="SHOP")print(profile["name"], profile["credential"])Responses
200 OK
The profile.
Fields
| Name | Type | Default | Allowed values | Description |
|---|---|---|---|---|
id | string | – | – | |
name | string | – | – | |
sizeBytes | integer | – | – | |
createdAt | string | – | – | Format: date-time. |
updatedAt | string | – | – | Format: date-time. |
inUseBy | string | null | – | – | The running session using it. |
credential | string | null | – | – | The password credential it signs in with (PATCH /v1/profiles/:id {credential}); null without one. |
{ "id": "prof_Hk3VxP9mQ2sLw7Tn", "name": "Work account", "sizeBytes": 0, "createdAt": "2026-09-29T10:00:00.000Z", "updatedAt": "2026-09-29T10:00:00.000Z", "inUseBy": "…", "credential": "SHOP"}Errors
Errors have a matching HTTP status and the same body. code is stable, so check it in your code; message is for people. See Errors and request ids.
| Status | Codes | When |
|---|---|---|
| 400 Bad Request | invalid_request, invalid_json, invalid_cursor, invalid_idempotency_key, invalid_extension, variables_with_extensions, terms_not_accepted, invalid_reset_token, invalid_confirmation_code, wrong_password, no_password, invalid_next, invalid_oauth_token | The request is not valid. |
| 401 Unauthorized | unauthorized | Missing or invalid API key. |
| 402 Payment Required | feature_not_in_plan, spend_limit, out_of_credit, plan_limit, spend_limit, out_of_credit, organization, project, plan, credit | The plan does not include this, a monthly allowance or spending limit is used up, the organization has no credit left, or the plan allows no more of this. spend_limit and out_of_credit carry error.details.limit: organization, project, plan or credit. |
| 404 Not Found | not_found, invite_not_found, provider_unavailable | No such thing in this project (or organization), or no such route. |
{ "error": { "code": "not_found", "message": "session not found", "requestId": "req_4fJx0aQm2Lk9Pz7N" }}Learn more
These docs describe a beta API. Endpoints, fields and SDK methods may change before general availability; breaking changes will be listed in the changelog.