---
title: "Create company"
method: POST
path: "/companies"
tags: ["Companies"]
---

# Create company

`POST /companies`

## Request

- Base URL: `https://api.100hires.com/v2`
- URL: `https://api.100hires.com/v2/companies`
- Auth: HTTP bearer

Creates a client company and links ownership context according to partner rules. Typical entrypoint for multi-tenant onboarding.

## Request body

- CompanyCreateRequest
  - `name` string, required: Company name.
  - `website` string: Company website URL.
  - `url` string: Company profile URL.
  - `company_owner_email` string, email, required: Company owner email address.
  - `company_owner_name` string, required: Company owner full name.
  - `company_owner_phone` string: Company owner phone number.
  - `is_staffing_agency` boolean: Whether this company is a staffing agency.
  - `logo` FileData
    - `data` string, required: Base64 content
    - `file_name` string, required: Original file name.
    - `mime_type` string, required: MIME type (e.g. application/pdf).
    - `size` integer: Optional for uploads, returned in responses
  - `linkedin_company_id` string: Numeric LinkedIn Company ID, digits only, usually 6 to 9 digits. The company's jobs are posted to LinkedIn only when it is set: LinkedIn attaches every job in the feed to the page with this ID. Find it in the address bar after clicking See all jobs on the company page (the f_C value), in the page Admin View URL (the number after /company/), or in the public page source after urn:li:organization:. A vanity URL such as /company/acme-corp is not the ID.
  - `linkedin_company_url` string: LinkedIn company page URL, https://www.linkedin.com/company/<slug>. Set it together with linkedin_company_id.
  - `job_board_names` object: Company name per job board, keyed by the board name from GET /boards. linkedin and googlejobs are not accepted: LinkedIn shows the page set by linkedin_company_id, Google for Jobs reads the career site. A board that is not in the object keeps its stored name; null or an empty string removes the name, so the board shows the company name again. Indeed and ZipRecruiter pick up a change on the next job board sync, the other boards on the next feed build.

## Response `200`

Created company

- Company
  - `id` integer, required: Unique identifier
  - `name` string, required: Company name
  - `website` string, nullable: Company website URL
  - `url` string, nullable: Company careers page URL
  - `is_staffing_agency` boolean: Whether this company is a staffing agency
  - `logo` string, nullable: URL of the company logo image
  - `company_owner_email` string, nullable: Email of the company owner
  - `company_owner_phone` string, nullable: Phone number of the company owner
  - `company_owner_name` string, nullable: Full name of the company owner
  - `linkedin_company_id` string, nullable: Numeric LinkedIn Company ID of the company page. The company's jobs are posted to LinkedIn only when it is set.
  - `linkedin_company_url` string, nullable: LinkedIn company page URL, e.g. https://www.linkedin.com/company/acme-corp
  - `job_board_names` object: Company name shown on each job board, keyed by the board name from GET /boards. A board without an entry shows the company name. An empty object when no name is set.

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `415`: Content-Type must be application/json
- `429`: Too many requests

---

[API](https://skmtc.dev/100hires/apis/100hires-api.md) · [All operations](https://skmtc.dev/100hires/apis/100hires-api/llms.txt) · [OpenAPI document](https://skmtc.dev/100hires/apis/100hires-api/revisions/e63e2d3115f7?raw)
