---
title: "Create organization member"
method: POST
path: "/v2/organizations/{organization_id}/members"
tags: ["members"]
---

# Create organization member

`POST /v2/organizations/{organization_id}/members`

## Request

- Base URL: `https://api.hubstaff.com`
- URL: `https://api.hubstaff.com/v2/organizations/{organization_id}/members`
- Auth: OAuth 2
  - Authorization code: `https://account.hubstaff.com/authorizations/new`
  - Token URL: `https://account.hubstaff.com/access_tokens` scopes: `hubstaff:read`, `hubstaff:write`
- TypeScript: <https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/docs/v2/organizations/:organization_id/members/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new user and adds them to the organization as a member.

Returns the created member.

Available roles:
- organization_manager - Organization manager
- project_manager - Project manager
- project_user - Project user
- project_viewer - Project viewer

Available pay periods:
- none - Disables automatic payments
- weekly - Pay users weekly
- twice_per_month - Pay users twice a month
- biweekly - Pay users bi-weekly
- monthly - Pay users monthly

## Path parameters

- `organization_id` integer, required

## Request body

- PostV2OrganizationsOrganizationIdMembers: Create organization member
  - `user` object, required: User data
    - `name` string: User full name (deprecated, use first_name, last_name)
    - `first_name` string: User first name
    - `last_name` string: User last name
    - `email` string, required: User email
    - `password` string, required: User password
    - `require_password_change` boolean: Require user to change password on first sign in
    - `allow_receiving_emails` boolean: Allow user to receive Hubstaff emails
  - `role` 'organization_manager' | 'project_manager' | 'project_user' | 'project_viewer': The role to add the user as
  - `pay_rate` number, float: A pay rate to set for the user
  - `view_only` boolean: Create the member as view-only
  - `pay_period` 'none' | 'weekly' | 'twice_per_month' | 'biweekly' | 'monthly': Member pay period; values are the API symbols mapped in UserOrganization::PayPeriods (see list above). When timesheet_approval is true, required only if the organization has no default pay period; otherwise optional (omit to use the organization default where applicable).
  - `period_week_day` integer: When pay_period is set: day of the week when the pay period starts (0 Monday through 6 Sunday). Required for weekly or biweekly pay periods when the organization uses custom pay period dates.
  - `period_start_day` integer: When pay_period is set: day of the month when the pay period starts. Required for monthly or twice_per_month pay periods when the organization uses custom pay period dates.
  - `period_second_start_day` integer: When pay_period is set: day of the month when the second period starts for twice_per_month (31 = last day of the month). Required for that pay period when the organization uses custom pay period dates.
  - `period_anchor_date` string, date: When pay_period is set: anchor date for biweekly periods when the organization uses custom pay period dates.
  - `timesheet_approval` boolean: Tri-state: true requires timesheet approval for the member, false disables it, and omitting the parameter inherits the organization default for new members.
  - `project_ids` integer[]: List of project IDs to add the user
  - `team_ids` integer[]: List of team IDs to add the user
  - `metadata` object[]: Member metadata. See the update_members endpoint for further details
    - `key` string, required: The metadata key
    - `value` string, required: The value for the metadata key

## Response `201`

A member

- object
  - `organization_member` OrganizationMember: OrganizationMember model
    - `user_id` integer, required: User ID
    - `pay_rate` string: Pay rate
    - `bill_rate` string: Bill rate
    - `currency` string: Currency of pay and bill rates
    - `membership_role` string, required: Membership role
    - `membership_status` string, required: Membership status
    - `created_at` string, date-time, required: When the member was added to the organization/project
    - `updated_at` string, date-time, required: When the membership was last updated
    - `removed_at` string, date-time: When the member was removed
    - `last_client_activity` string, date-time, required: Last client activity of user
    - `user` User: User model
      - `id` integer, required: User ID
      - `name` string, required: User full name
      - `first_name` string, required: User first name
      - `last_name` string, required: User last name
      - `email` string: User email address
      - `time_zone` string, required: User time zone
      - `ip_address` string, required: User last IP address
      - `status` string, required: User status
      - `created_at` string, date-time, required: When the record was created
      - `updated_at` string, date-time, required: When the record was last updated
    - `project_members` NestedProjectMember[]: List of project memberships
      - `pay_rate` string: Pay rate
      - `bill_rate` string: Bill rate
      - `currency` string: Currency of pay and bill rates
      - `membership_role` string, required: Membership role
      - `membership_status` string, required: Membership status
      - `created_at` string, date-time, required: When the member was added to the organization/project
      - `updated_at` string, date-time, required: When the membership was last updated
      - `removed_at` string, date-time: When the member was removed
      - `last_client_activity` string, date-time, required: Last client activity of user
      - `team_id` integer: Team ID
      - `profile` OrganizationMemberProfile
        - `job_title` string: The job title of the member
        - `job_type` string: The job type of the member
        - `location` string: The location of the member
        - `employee_id` string: The employee id of the member
        - `tax_info` string: The tax info of the member
        - `birthday` string, date: The member's birthday (YYYY-MM-DD). If the year is not available, it will be 0000
        - `started_on` string, date: The start date of the member
        - `custom_fields` object: Custom fields
        - `work_phone` string: The work phone number of the member
        - `personal_phone` string: The personal phone number of the member
        - `personal_email` string: The personal email address of the member
        - `department` string: The department of the member
        - `tax_type` string: The tax type of the member
        - `occupied_seat` boolean: Whether the member occupies a billing seat
        - `os_username` string: The OS username of the member
        - `employment_type` string: The employment type of the member
        - `work_mode` string: The workplace mode of the member
        - `in_office_percent` integer: The in-office work percentage of the member
        - `remote_percent` integer: The remote work percentage of the member
        - `employed_through` string: How the member is employed
        - `eor_name` string: The EOR or vendor name of the member
        - `account_code` string: The account code of the member
        - `employment_comments` string: Employment comments for the member
        - `contractual_end_date` string, date: The contractual end date of the member
        - `termination_reason` string: The termination reason of the member
        - `home_address` string: The home address of the member
        - `home_address_country` string: The home address country of the member
        - `home_address_state` string: The home address state of the member
        - `work_address` string: The work address of the member
        - `work_address_country` string: The work address country of the member
        - `work_address_state` string: The work address state of the member
      - `project_id` integer, required: Project ID
      - `project_type` string, required: Project type (project, work_order, work_break)
      - `project_status` string, required: Project status (active, archived, deleted)
    - `pay_period` string: Pay period
    - `fixed_pay_rate` string: Fixed pay rate
    - `period_week_day` integer: Pay period week day (0 monday)
    - `period_start_day` integer: Pay period start day
    - `period_second_start_day` integer: Second pay period start day
    - `period_anchor_date` string, date: Date when the biweekly pay period must start
    - `trackable` string, required: Whether the member has tracking enabled, disabled or implicitly disabled
    - `effective_role` string, required: A virtual membership role that takes into account the project memberships
    - `profile` OrganizationMemberProfile
      - `job_title` string: The job title of the member
      - `job_type` string: The job type of the member
      - `location` string: The location of the member
      - `employee_id` string: The employee id of the member
      - `tax_info` string: The tax info of the member
      - `birthday` string, date: The member's birthday (YYYY-MM-DD). If the year is not available, it will be 0000
      - `started_on` string, date: The start date of the member
      - `custom_fields` object: Custom fields
      - `work_phone` string: The work phone number of the member
      - `personal_phone` string: The personal phone number of the member
      - `personal_email` string: The personal email address of the member
      - `department` string: The department of the member
      - `tax_type` string: The tax type of the member
      - `occupied_seat` boolean: Whether the member occupies a billing seat
      - `os_username` string: The OS username of the member
      - `employment_type` string: The employment type of the member
      - `work_mode` string: The workplace mode of the member
      - `in_office_percent` integer: The in-office work percentage of the member
      - `remote_percent` integer: The remote work percentage of the member
      - `employed_through` string: How the member is employed
      - `eor_name` string: The EOR or vendor name of the member
      - `account_code` string: The account code of the member
      - `employment_comments` string: Employment comments for the member
      - `contractual_end_date` string, date: The contractual end date of the member
      - `termination_reason` string: The termination reason of the member
      - `home_address` string: The home address of the member
      - `home_address_country` string: The home address country of the member
      - `home_address_state` string: The home address state of the member
      - `work_address` string: The work address of the member
      - `work_address_country` string: The work address country of the member
      - `work_address_state` string: The work address state of the member
    - `limits` OrganizationMemberLimits
      - `limits_by_shifts` boolean: Whether the shifts are used to set allowance limits
      - `weekly_limit` number, float: The hours member is allowed to work weekly
      - `daily_limit` number, float: The hours daily limit of the member
      - `dow_limit` string[]: The days when member is allowed to track time
      - `expected_per_week` number, float: The hours member is expected to work weekly
      - `dow_expected` string[]: The days when member is expected to track time
    - `type` string, required: How the member was provisioned: standard, scim, silent or sso
    - `metadata` object, required: Metadata attached to the member
    - `view_only` boolean, required: View-only member flag

## Other responses

- `400`: Invalid parameters
- `401`: Unauthorized
- `403`: API access is only for organizations on an active plan
- `404`: Could not find record
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api.md) - [All operations](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hubstaff/apis/hubstaff-v2-api/revisions/c6b90e4e4bdc?raw)
