> ## Documentation Index
> Fetch the complete documentation index at: https://hub.hcompany.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Complete a profile upload

> Finalize a browser profile after its archive is uploaded.

Finalizes a profile after you have uploaded its archive to the presigned target from
[Initiate upload](/computer-use-agents/browser-profiles/initiate-upload). The platform verifies the
uploaded archive and records the profile metadata.

**Returns** `201` with the created profile object (see
[Retrieve](/computer-use-agents/browser-profiles/retrieve) for the full field list).

***

## Path parameters

<ParamField path="profile_id" type="string" required>
  The `profile_id` returned by [Initiate upload](/computer-use-agents/browser-profiles/initiate-upload).
</ParamField>

***

## Request body

<ParamField body="name" type="string" required>
  Human-readable label for the profile.
</ParamField>

<ParamField body="browser_name" type="string" required>
  Browser the profile was captured with (for example `chromium`, `firefox`, `webkit`, or
  `selenium`). Validated against the set of supported browsers.
</ParamField>

<ParamField body="browser_version" type="string" required>
  Browser version string the profile was captured with (for example `131`).
</ParamField>

<ParamField body="description" type="string">
  Optional free-text description.
</ParamField>

<ParamField body="labels" type="object">
  Optional key-value metadata for your own bookkeeping.
</ParamField>

***

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://agp.eu.hcompany.ai/api/v2/browser-profiles/a1b2c3d4-5678-90ab-cdef-1234567890ab/complete-upload" \
    -H "Authorization: Bearer $HAI_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "acme-prod-login",
      "browser_name": "chromium",
      "browser_version": "131",
      "labels": {"team": "qa"}
    }'
  ```

  ```python Python theme={null}
  from hai_agents import Client

  client = Client()

  profile = client.browser_profiles.complete_browser_profile_upload(
      profile_id="a1b2c3d4-5678-90ab-cdef-1234567890ab",
      name="acme-prod-login",
      browser_name="chromium",
      browser_version="131",
      labels={"team": "qa"},
  )
  print(profile.id)
  ```

  ```typescript TypeScript theme={null}
  import { HaiAgentsClient } from "hai-agents";

  const client = new HaiAgentsClient();

  const profile = await client.browserProfiles.completeBrowserProfileUpload({
    profileId: "a1b2c3d4-5678-90ab-cdef-1234567890ab",
    name: "acme-prod-login",
    browserName: "chromium",
    browserVersion: "131",
    labels: { team: "qa" },
  });
  console.log(profile.id);
  ```
</CodeGroup>

```json Response theme={null}
{
  "id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
  "name": "acme-prod-login",
  "description": null,
  "browser_name": "chromium",
  "browser_version": "131",
  "s3_path": "browser-profiles/finished/org_123/a1b2c3d4-5678-90ab-cdef-1234567890ab/profile.zip",
  "file_size_bytes": 102400,
  "checksum": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "usage_count": 0,
  "last_used_at": null,
  "labels": {"team": "qa"},
  "is_default": false,
  "created_at": "2026-06-16T14:30:00Z",
  "updated_at": "2026-06-16T14:30:00Z"
}
```

***

## Errors

| Status | Cause                                                                                                        |
| ------ | ------------------------------------------------------------------------------------------------------------ |
| `404`  | No pending upload found for this `profile_id`, or you don't have access.                                     |
| `422`  | Body failed validation (for example an unsupported `browser_name`), or the archive was not found in storage. |
