---
title: "Ingest an immutable Profile Studio capture"
method: POST
path: "/profile-packages/snapshots"
---

# Ingest an immutable Profile Studio capture

`POST /profile-packages/snapshots`

## Request

- Base URL: `https://api.bamf.ai/v1`
- URL: `https://api.bamf.ai/v1/profile-packages/snapshots`
- Auth: HTTP bearer

Stores a creator-authorized, bounded snapshot handed off by BAMFOS. Requires profile_packages:write and Idempotency-Key. The caller supplies the exact snapshot UUID. A retry with the same UUID and canonical content returns 200 idempotently; a differing payload returns 409. Original is accepted only for a verified pre-BAMF capture. This endpoint stores evidence only and never changes LinkedIn.

## Headers

- `Idempotency-Key` string, required

## Request body

- ProfileSnapshotIngestRequest
  - `id` string, uuid, required: Exact immutable source snapshot UUID; also serves as record-level idempotency identity.
  - `creator_id` string, uuid, required
  - `source_profile_url` string, uri, required: HTTPS LinkedIn /in/ profile URL.
  - `captured_at` string, date-time, required
  - `validation_status` 'pending' | 'partial' | 'verified' | 'failed', required
  - `is_pre_bamf_capture` boolean, required
  - `is_original_baseline` boolean, required: Allowed only when validation_status is verified and is_pre_bamf_capture is true.
  - `supersedes_snapshot_id` string, uuid, nullable
  - `profile` object, required
    - `name` string, nullable
    - `headline` string, nullable
    - `about` string, nullable
    - `location` string, nullable
    - `profile_url` string, uri, nullable
    - `featured` object[]
      - `title` string, nullable
      - `description` string, nullable
      - `url` string, uri, nullable
  - `assets` object, required
    - `full_page_screenshot` ProfileSnapshotAsset
      - `asset_id` string, required
      - `storage_bucket` string, nullable: Optional durable bucket identifier. Omit for private cross-system storage.
      - `storage_path` string, nullable: Optional relative object path. Signed URLs and credentials are forbidden.
      - `mime_type` 'image/png' | 'image/jpeg' | 'image/webp', required
      - `size_bytes` integer, required
      - `sha256` string, required
      - `source_url` string, uri, nullable: Credential-free public HTTPS URL; query and fragment are discarded.
      - `captured_at` string, date-time, nullable
      - `localization_status` 'localized' | 'external' | 'missing', required
    - `photo` ProfileSnapshotAsset
      - `asset_id` string, required
      - `storage_bucket` string, nullable: Optional durable bucket identifier. Omit for private cross-system storage.
      - `storage_path` string, nullable: Optional relative object path. Signed URLs and credentials are forbidden.
      - `mime_type` 'image/png' | 'image/jpeg' | 'image/webp', required
      - `size_bytes` integer, required
      - `sha256` string, required
      - `source_url` string, uri, nullable: Credential-free public HTTPS URL; query and fragment are discarded.
      - `captured_at` string, date-time, nullable
      - `localization_status` 'localized' | 'external' | 'missing', required
    - `banner` ProfileSnapshotAsset
      - `asset_id` string, required
      - `storage_bucket` string, nullable: Optional durable bucket identifier. Omit for private cross-system storage.
      - `storage_path` string, nullable: Optional relative object path. Signed URLs and credentials are forbidden.
      - `mime_type` 'image/png' | 'image/jpeg' | 'image/webp', required
      - `size_bytes` integer, required
      - `sha256` string, required
      - `source_url` string, uri, nullable: Credential-free public HTTPS URL; query and fragment are discarded.
      - `captured_at` string, date-time, nullable
      - `localization_status` 'localized' | 'external' | 'missing', required
    - `featured` ProfileSnapshotAsset[]
      - `asset_id` string, required
      - `storage_bucket` string, nullable: Optional durable bucket identifier. Omit for private cross-system storage.
      - `storage_path` string, nullable: Optional relative object path. Signed URLs and credentials are forbidden.
      - `mime_type` 'image/png' | 'image/jpeg' | 'image/webp', required
      - `size_bytes` integer, required
      - `sha256` string, required
      - `source_url` string, uri, nullable: Credential-free public HTTPS URL; query and fragment are discarded.
      - `captured_at` string, date-time, nullable
      - `localization_status` 'localized' | 'external' | 'missing', required
  - `missing` object[], required
    - `field` string, required
    - `reason` string, required
  - `provenance` object, required
    - `capture_method` 'governed_browser' | 'api' | 'import', required
    - `source_system` string, required
    - `source_record_id` string, required
    - `source_content_hash` string, nullable: Source system's immutable custody hash. This is distinct from BAMF.ai's canonical content_hash.
    - `source_snapshot_id` string, uuid, nullable
    - `capture_receipt_id` string, uuid, nullable
    - `capture_job_id` string, uuid, nullable
    - `visible_url` string, uri, nullable
    - `evidence_refs` string[]
    - `notes` string, nullable
  - `content_hash` string, nullable: Optional expected BAMF.ai canonical hash. Omit on first handoff and persist the returned hash for receipts.

## Response `200`

Existing identical snapshot returned idempotently

- ProfileSnapshotIngestResponse
  - `data` object, required
    - `snapshot_id` string, uuid, required
    - `creator_id` string, uuid, required
    - `captured_at` string, date-time, required
    - `validation_status` 'pending' | 'partial' | 'verified' | 'failed', required
    - `is_pre_bamf_capture` boolean, required
    - `is_original_baseline` boolean, required
    - `content_hash` string, required
    - `created_at` string, date-time, required
    - `idempotent_replay` boolean, required

## Other responses

- `201`: Snapshot ingested
- `400`: Invalid, unsafe, unbounded, or non-Original-eligible snapshot
- `409`: UUID, content hash, creator, supersession, or Original-baseline conflict

---

[API](https://skmtc.dev/bamf/apis/bamf-developer-platform-api.md) · [All operations](https://skmtc.dev/bamf/apis/bamf-developer-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bamf/apis/bamf-developer-platform-api/revisions/a390dd3294bd?raw)
