---
title: "Create an owned company for a user"
method: POST
path: "/v1/users/{id}/companies"
tags: ["User"]
---

# Create an owned company for a user

`POST /v1/users/{id}/companies`

Creates (or claims by identifier) a company and makes the user its `owner`.
If a company with the given identifier already has memberships, the request
fails with `422` (identifier already taken).

## Path parameters

- `id` string, required

## Parameters

- `#/paths/~1v1~1users/get/parameters/0` — unresolved $ref

## Request body

- object
  - `company` object, required
    - `identifier` string, required
    - `name` string
    - `country` string
    - `fantasy_name` string
    - `commercial_business` string
    - `address` string
    - `contact_phone` string
    - `commercial_type` integer
    - `constitution_date` string, date-time
    - `referred_code` string
    - `legal_address` object
    - `economic_activities` object[]

## Response `201`

The created/claimed company.

- Company — A company (tenant / organization). Companies are Single-Table-Inheritance subclasses of `Person`, so the payload carries generic Person columns plus company-specific attributes. Internal financial and commission columns (`balance_cents`, `wallets`, `credit`, `commission*`, `amount_per_*`, `max_amount_commission_*`, `balance_threshold`, `cost_center`, `stp_name`, ...) and computed methods such as `balance` / `total_allocated_funds` are **not part of the documented public contract** and are intentionally omitted here. The fields documented below are the supported company shape.
  - `id` string, uuid, required
  - `type` string — STI subclass. Always `Company` for this resource.
  - `identifier` string, required — Tax id (RUT in Chile) of the company. Digits plus verification digit.
  - `name` string, nullable
  - `fantasy_name` string, nullable
  - `country` string, nullable
  - `commercial_business` string, nullable
  - `commercial_type` integer, nullable
  - `address` string, nullable
  - `contact_phone` string, nullable
  - `contact_email` string, nullable
  - `constitution_date` string, date-time, nullable
  - `purpose_to_use_cards` string, nullable
  - `legal_address` object, nullable — Structured legal address (`street`, `number`, `municipality_id`, `complement`, `city`).
  - `economic_activities` object[], nullable
  - `interests` string[]
  - `notification_emails` string[]
  - `ruts` object, nullable — Additional RUTs associated with the company.
  - `referral_code` string
  - `referrer_id` string, uuid, nullable
  - `referral_approved` boolean, nullable
  - `collector_account_id` string, uuid, nullable
  - `preferred_currency` string
  - `verification_status` 'pending' | 'awaiting_review' | 'approved' | 'rejected' — KYC verification status.
  - `kyc_completed` boolean
  - `plh_enabled` boolean — Whether the company is enrolled in the PLH card program.
  - `contracts_verified` boolean
  - `activated` boolean
  - `active` boolean
  - `can_delegate_payables` boolean
  - `n_users` integer — Number of member users (computed method).
  - `n_cards` integer — Number of cards (computed method).
  - `n_virtual_cards` integer — Number of virtual cards (computed method).
  - `owner_id` string, uuid, nullable — User id of the owner membership (present on the index listing).
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `401` — Unauthorized
- `404` — User not found
- `422` — Identifier is already taken

---

[API](https://skmtc.dev/cardda/apis/banking-api.md) · [All operations](https://skmtc.dev/cardda/apis/banking-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/cardda/banking-api/revisions/ff1aeb3fda8b/schema)
