---
title: "Upsert Account"
method: POST
path: "/v1/accounts"
tags: ["accounts"]
---

# Upsert Account

`POST /v1/accounts`

Create an account, or return the matching one if it already exists.

The account is matched inside your organization on `domain`
(normalized), so re-sending the same company is safe and returns the
same `id`. `name` is only used when the account (and its company) does
not exist yet. `201` is returned for both the create and the match.

Upserting a contact with `company_domain` (`POST /v1/contacts`) creates
the account implicitly — use this endpoint when you want to push
companies before knowing which people to pursue.

Requires the `accounts:write` scope on the API key.

## Request body

- UpsertAccountPublicInput
  - `name` string, nullable — Company name. Only used when the account is created.
  - `domain` string, required — Primary company domain. The account is matched inside your organization on this domain.

## Response `201`

Successful Response

- PublicAccountOutput
  - `id` string, uuid, required — Unique identifier of the account.
  - `name` string, nullable — Company name.
  - `domain` string, nullable — Primary company domain.
  - `owner_user_id` string, uuid, nullable — User who owns this account, if any.
  - `owner` PublicUserSummary
    - `id` string, uuid, required — Unique identifier of the user.
    - `name` string, nullable — Display name.
    - `email` string, required — Email address.
  - `first_seen_at` string, date-time, required — When this account was first associated with the organization.
  - `last_seen_at` string, date-time, required — When this account was last touched in the organization.

---

[API](https://skmtc.net/topo/apis/topo-public-api.md) · [All operations](https://skmtc.net/topo/apis/topo-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/topo/topo-public-api/revisions/80f4fd40b75e/schema)
