---
title: "Create a project member"
method: POST
path: "/project-members"
tags: ["Project Members"]
---

# Create a project member

`POST /project-members`

## Request

- Base URL: `https://www.ruddr.io/api/workspace`
- URL: `https://www.ruddr.io/api/workspace/project-members`
- Auth: HTTP bearer

## Request body

- object
  - `projectId` string, required: The project ID (`uuid`) for this project member.
  - `memberId` string, required: The member ID (`uuid`) for this project member.
  - `typeId` 'collaborator' | 'administrator': The type of project member. Can be either `"administrator"` (Project administrator) or `"collaborator"` (Project collaborator). Defaults to `"collaborator"`.
  - `isActive` boolean: Whether the member is active on the project team. Only controls project-level participation; the returned value is `false` whenever the member is deactivated at the workspace level.
  - `isBillable` boolean: Whether the member is billable on this project. Only used if the project is not using roles.
  - `rate` number, nullable: The member's billing rate for the project. Only used if the project is not using roles and the member is billable. When Project Rate Cards is enabled, the new member gets this value on every rate card.
  - `overrideCostRate` boolean: Whether to override this project member's cost rate at the project member level rather than using the workspace or member default. When Project Rate Cards is enabled, the new member gets this value on every rate card.
  - `costCurrency` string, nullable: The ISO 4217 currency code for the overridden cost rate. This will only get used if `overrideCostRate` is `true`. When Project Rate Cards is enabled, the new member gets this value on every rate card.
  - `costPerHour` number, nullable: The overridden cost per hour. This will only get used if `overrideCostRate` is `true`. When Project Rate Cards is enabled, the new member gets this value on every rate card.
  - `overheadCostPerHour` number, nullable: The overridden overhead cost per hour. This will only get used if `overrideCostRate` is `true`. When Project Rate Cards is enabled, the new member gets this value on every rate card.
  - `estimatedBillableHours` number, nullable: The number of billable hours to budget. This will only get used if not using roles and `useBudget` is `true` and `budgetMode` is `"detailed"` on the project.
  - `estimatedNonBillableHours` number, nullable: The number of non-billable hours to budget. This will only get used if not using roles and `useBudget` is `true` and `budgetMode` is `"detailed"` on the project.
  - `estimatedMonthlyBillableHours` number, nullable: The number of billable hours on the monthly budget. This will only get used if not using roles and `useMonthlyBudget` is `true` and `monthlyBudgetMode` is `"detailed"` on the project.
  - `estimatedMonthlyNonBillableHours` number, nullable: The number of non-billable hours on the monthly budget. This will only get used if not using roles and `useMonthlyBudget` is `true` and `monthlyBudgetMode` is `"detailed"` on the project.
  - `roleIds` string[]: A list of project role IDs (`uuid`) assigned to the member. Only used if the project is using roles.

## Response `200`

200

- ProjectMember
  - `id` string: The unique identifier for the object.
  - `typeId` 'collaborator' | 'administrator': The project member type.
  - `isActive` boolean: Whether the member is active on the project. Returns `false` when the member is deactivated on the project team or deactivated at the workspace level.
  - `isBillable` boolean, nullable: Whether the member is billable on this project. Only used if the project is not using roles; otherwise billability is assigned at the role level and this field is `null`.
  - `rate` number, nullable: The member's billing rate for the project. Only used if the project is not using roles and the member is billable; otherwise `null`. When Project Rate Cards is enabled, this is the rate on the rate card covering today; see `rateCards` for other periods.
  - `overrideCostRate` boolean: Whether this project member's cost rate is overridden at the project member level rather than using the workspace or member default. When Project Rate Cards is enabled, this is the value on the rate card covering today; see `rateCards` for other periods.
  - `costCurrency` string, nullable: The ISO 4217 currency code for the overridden cost rate. Only populated when `overrideCostRate` is `true`; otherwise `null`. When Project Rate Cards is enabled, this is the value on the rate card covering today.
  - `costPerHour` number, nullable: The overridden cost per hour for this project member. Only populated when `overrideCostRate` is `true`; otherwise `null`. When Project Rate Cards is enabled, this is the value on the rate card covering today.
  - `overheadCostPerHour` number, nullable: The overridden overhead cost per hour for this project member. Only populated when `overrideCostRate` is `true`; otherwise `null`. When Project Rate Cards is enabled, this is the value on the rate card covering today.
  - `createdAt` string, date-time: The timestamp when the object was created.
  - `member` object: The workspace member assigned to this project.
    - `id` string: The unique identifier for the object.
    - `name` string: The name of the member.
  - `project` object: The project this member belongs to.
    - `id` string: The unique identifier for the object.
    - `name` string: The name of the project.
    - `client` object: The client associated with the project.
      - `id` string: The unique identifier for the object.
      - `name` string: The name of the client.
  - `roles` object[], nullable: The project roles assigned to this member. `null` when the project does not use roles.
    - `id` string: The unique identifier for the object.
    - `name` string: The name of the role.
  - `budget` object, nullable: The member's budget hours for the project. `null` when the project does not use a budget or uses roles.
    - `billableHours` number, nullable: The budgeted billable hours for the member on this project. `null` when the member is not billable.
    - `nonBillableHours` number, nullable: The budgeted non-billable hours for the member on this project.
  - `monthlyBudget` object, nullable: The member's monthly budget hours for the project. `null` when the project does not use a monthly budget in detailed mode or uses roles.
    - `billableHours` number, nullable: The budgeted billable hours per month for the member on this project. `null` when the member is not billable.
    - `nonBillableHours` number, nullable: The budgeted non-billable hours per month for the member on this project.
  - `rateCards` object[], nullable: The member's rates on each project rate card, earliest first. `null` if the Project Rate Cards feature is not enabled.
    - `id` string: The unique identifier of the project rate card.
    - `start` string, date, nullable: The date the rate card takes effect. Will be in the form YYYY-MM-DD. `null` for the earliest rate card.
    - `end` string, date, nullable: The last date the rate card covers. Will be in the form YYYY-MM-DD. `null` for the last rate card.
    - `rate` number, nullable: The member's billing rate on this rate card. `null` when the project uses roles or the member is not billable.
    - `overrideCostRate` boolean: Whether the member's cost rate is overridden on this rate card.
    - `costCurrency` string, nullable: The ISO 4217 currency code for the overridden cost rate. Only populated when `overrideCostRate` is `true`; otherwise `null`.
    - `costPerHour` number, nullable: The overridden cost per hour. Only populated when `overrideCostRate` is `true`; otherwise `null`.
    - `overheadCostPerHour` number, nullable: The overridden overhead cost per hour. Only populated when `overrideCostRate` is `true`; otherwise `null`.

## Other responses

- `400`: 400

---

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