---
title: "Derive (and persist) a smart wallet address from (owner, salt, factory)"
method: POST
path: "/wallets"
tags: ["Wallets"]
---

# Derive (and persist) a smart wallet address from (owner, salt, factory)

`POST /wallets`

Idempotent "ensure exists". Returns the deterministic CREATE2-derived
address. POST (not GET) because it persists a wallet record server-side
as a side effect of the derivation.

## Request body

- CreateWalletRequest
  - `salt` string, required — Salt as a decimal string (big-int). Determines the derived address together with the factory.
  - `factoryAddress` string — Lowercase or checksummed hex EOA / contract address.
  - `chainId` integer — Numeric chain ID (e.g. 11155111 for Sepolia, 8453 for Base). On chain-aware trigger/node configs this is required and must be a configured chain; on query/filter params it is optional.

## Response `200`

Wallet derived (existing record returned if already present).

- Wallet
  - `address` string, required — Lowercase or checksummed hex EOA / contract address.
  - `salt` string, required — Salt used in CREATE2 derivation (decimal string).
  - `factoryAddress` string — Lowercase or checksummed hex EOA / contract address.
  - `isHidden` boolean
  - `totalWorkflowCount` integer
  - `enabledWorkflowCount` integer
  - `completedWorkflowCount` integer
  - `failedWorkflowCount` integer
  - `disabledWorkflowCount` integer

## Other responses

- `201` — Wallet derived (new record persisted).
- `400` — Request validation failed.
- `401` — Missing or invalid bearer token.

---

[API](https://skmtc.net/avaprotocol/apis/ava-protocol-avs-api.md) · [All operations](https://skmtc.net/avaprotocol/apis/ava-protocol-avs-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/avaprotocol/ava-protocol-avs-api/versions/231d563f2c9f/schema)
