---
title: "Replace identities in bulk"
method: POST
path: "/api/v1/identities/bulk"
tags: ["identities"]
---

# Replace identities in bulk

`POST /api/v1/identities/bulk`

## Request

- Base URL: `https://api.past.dev`
- URL: `https://api.past.dev/api/v1/identities/bulk`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer
  - HTTP bearer

Replace traits for up to 1,000 identities in one transaction. A malformed row refuses the complete batch.

## Query parameters

- `project` string

## Request body

- BulkIdentityRow[]
  - `identity` string, required
  - `traits` object

## Response `200`

One created or updated status for each distinct identity.

- BulkIdentityResponse
  - `identities` BulkIdentityResult[], required
    - `identity` string, required
    - `status` 'created' | 'updated', required

## Other responses

- `400`: The request is malformed or violates a field constraint. Match behavior on the response code field.
- `401`: missing-api-key: no bearer. malformed-api-key: the header or the key has the wrong shape, or an agent token was sent to a route that accepts keys only. unauthorized: the key is unknown, expired, revoked, or of the kind this route refuses, or the agent token is invalid or expired.
- `403`: project-archived: the project of the key, or the project an agent token names, is archived. Unarchive it in the console to resume. insufficient-scope: the agent token does not carry the scope of the route.
- `409`: A concurrent write raced this batch. Nothing was applied; retry.
- `default`: Any other failure uses the same JSON error envelope.

---

[API](https://skmtc.dev/past/apis/past-dev-memory-api.md) · [All operations](https://skmtc.dev/past/apis/past-dev-memory-api/llms.txt) · [OpenAPI document](https://skmtc.dev/past/apis/past-dev-memory-api/revisions/3ddccc19f0eb?raw)
