Skip to main content
POST
/
projects
Create a project
curl --request POST \
  --url https://www.ruddr.io/api/workspace/projects \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "<string>",
  "clientId": "<string>",
  "billingTypeId": "tm",
  "projectAdminId": "<string>",
  "key": "<string>",
  "notes": "<string>",
  "statusId": "tentative",
  "start": "2023-12-25",
  "end": "2023-12-25",
  "code": "<string>",
  "poNumber": "<string>",
  "isProductive": true,
  "currency": "<string>",
  "revenueRecognitionMethod": "invoiced",
  "useRoles": true,
  "requiresNotes": true,
  "requiresTasks": true,
  "recordStatusId": "active",
  "lockTimeAndExpenses": true,
  "trackTimeToAssignedRoles": true,
  "capMaxMemberHoursPerDay": true,
  "maxMemberHoursPerDay": 123,
  "capMaxMemberHoursPerWeek": true,
  "maxMemberHoursPerWeek": 123,
  "capMaxMemberHoursPerMonth": true,
  "maxMemberHoursPerMonth": 123,
  "cloudFolderUrl": "<string>",
  "practiceId": "<string>",
  "projectTypeId": "<string>",
  "tagIds": [
    "<string>"
  ],
  "salesRepresentativeId": "<string>",
  "businessUnitId": "<string>",
  "useBudget": true,
  "budgetMode": "summary",
  "budgetServiceRevenue": 123,
  "budgetBillableHours": 123,
  "budgetNonBillableHours": 123,
  "budgetExpensesBillableAmount": 123,
  "budgetExpensesNonBillableAmount": 123,
  "budgetOtherItemsAmount": 123,
  "useMonthlyBudget": true,
  "monthlyBudgetMode": "summary",
  "monthlyBudgetServiceRevenue": 123,
  "monthlyBudgetBillableHours": 123,
  "monthlyBudgetNonBillableHours": 123,
  "monthlyBudgetExpensesBillableAmount": 123,
  "monthlyBudgetExpensesNonBillableAmount": 123,
  "monthlyBudgetOtherItemsAmount": 123
}
'
{
  "id": "572e66b1-60a6-4935-853f-b59b053112e6",
  "key": "website-redesign",
  "name": "Website Redesign",
  "notes": "Full redesign of the public-facing marketing website.",
  "statusId": "completed",
  "start": "2025-03-01",
  "end": "2025-09-30",
  "code": "WR-001",
  "poNumber": "PO-2025-001",
  "billingTypeId": "fixed",
  "isBillable": true,
  "currency": "USD",
  "revenueRecognitionMethod": "invoiced",
  "fixedFee": null,
  "fixedRecurringFee": null,
  "fixedRecurringStart": null,
  "fixedRecurringEnd": null,
  "useRoles": true,
  "useBudget": true,
  "budgetMode": "detailed",
  "useMonthlyBudget": true,
  "monthlyBudgetMode": "summary",
  "capMaxMemberHoursPerDay": true,
  "maxMemberHoursPerDay": 8,
  "capMaxMemberHoursPerWeek": true,
  "maxMemberHoursPerWeek": 40,
  "capMaxMemberHoursPerMonth": true,
  "maxMemberHoursPerMonth": 160,
  "requiresNotes": true,
  "requiresTasks": false,
  "recordStatusId": "active",
  "isProductive": true,
  "lockTimeAndExpenses": false,
  "trackTimeToAssignedRoles": true,
  "cloudFolderUrl": "https://drive.google.com/drive/folders/abc123",
  "createdAt": "2025-01-15T20:47:03.284Z",
  "completedOn": "2026-03-15",
  "client": {
    "id": "9b577a12-dd68-4df6-9f48-d8071684bfca",
    "name": "Acme Corp"
  },
  "practice": {
    "id": "9bb7965e-991f-451c-9ea6-94f9ff180258",
    "name": "Digital Strategy"
  },
  "projectType": {
    "id": "1be77fb4-6300-4db7-ad3f-c960083f5433",
    "name": "Web Development"
  },
  "projectGroup": {
    "id": "bacffeea-24de-441c-b770-9219516f4034",
    "name": "Q1 Initiatives"
  },
  "tags": [
    {
      "id": "9166a6d1-dbc6-43b5-abcf-450cbfcfd891",
      "name": "High Priority"
    }
  ],
  "salesRepresentative": {
    "id": "d1980029-6c43-4af9-88ac-7b9066944f34",
    "name": "Jane Smith"
  },
  "businessUnit": {
    "id": "de116c6c-665e-4ce0-bf49-d77103f55095",
    "name": "Engineering"
  },
  "budget": {
    "revenue": 150000,
    "servicesRevenue": 140000,
    "otherRevenue": 10000,
    "billableExpenses": 5000,
    "nonBillableExpenses": 2000,
    "billableHours": 1400,
    "nonBillableHours": 200
  },
  "monthlyBudget": {
    "revenue": 25000,
    "servicesRevenue": 23000,
    "otherRevenue": 2000,
    "billableExpenses": 800,
    "nonBillableExpenses": 300,
    "billableHours": 230,
    "nonBillableHours": 40
  }
}
A scope of work for a client. Contains the top-level information for a project in your workspace.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
name
string
required

The name of the project. Max 255 characters.

clientId
string
required

The client ID (uuid) associated with this project.

billingTypeId
enum<string>
required

The billing type for the project.

Available options:
tm,
fixed,
fixed_recurring,
non_billable
projectAdminId
string
required

The member ID (uuid) of the initial project admin. All projects require at least one project admin.

key
string

The URL-friendly slug for the project. Will be autogenerated from name if not provided. Max 255 characters.

notes
string | null

Notes associated with the project. Max 5000 characters.

statusId
enum<string>

The project status.

Available options:
tentative,
not_started,
in_progress,
paused,
completed,
cancelled
start
string<date> | null

The start date of the project. Must be in the form YYYY-MM-DD. Must come on or before end if set.

end
string<date> | null

The end date of the project. Must be in the form YYYY-MM-DD. Must come on or after start if set.

code
string | null

The project code. Max 255 characters.

poNumber
string | null

The purchase order number. Max 255 characters.

isProductive
boolean

Whether time logged on this project counts as productive time. Only applicable for internal client projects.

currency
string

The 3-letter currency code associated with the project. Defaults to the client or workspace currency if not supplied.

revenueRecognitionMethod
enum<string>

The revenue recognition method. Only used when billingTypeId is "fixed" or "fixed_recurring".

Available options:
invoiced,
manual,
automated_hours,
automated_tm_basis
useRoles
boolean

Whether the project uses roles.

requiresNotes
boolean

Requires notes on time entries for this project.

requiresTasks
boolean

Requires a task selection on time entries for this project.

recordStatusId
enum<string>

The record status of the project. Defaults to active.

Available options:
active,
archived
lockTimeAndExpenses
boolean

When enabled, locks time and expenses on the project, preventing further edits.

trackTimeToAssignedRoles
boolean

Whether time should be tracked per assigned role. Only applies when useRoles is true.

capMaxMemberHoursPerDay
boolean

When enabled, caps the number of hours a member can log per day on the project.

maxMemberHoursPerDay
integer

The maximum number of hours a member can log per day on the project. Only used if capMaxMemberHoursPerDay is true.

capMaxMemberHoursPerWeek
boolean

When enabled, caps the number of hours a member can log per week on the project.

maxMemberHoursPerWeek
integer

The maximum number of hours a member can log per week on the project. Only used if capMaxMemberHoursPerWeek is true.

capMaxMemberHoursPerMonth
boolean

When enabled, caps the number of hours a member can log per month on the project.

maxMemberHoursPerMonth
integer

The maximum number of hours a member can log per month on the project. Only used if capMaxMemberHoursPerMonth is true.

cloudFolderUrl
string | null

The URL to the associated cloud storage folder.

practiceId
string | null

The practice ID (uuid) associated with this project.

projectTypeId
string | null

The project type ID (uuid) associated with this project.

tagIds
string[]

A list of project tag IDs (uuid) associated with this project.

salesRepresentativeId
string | null

The member ID (uuid) of the sales representative for this project.

businessUnitId
string | null

The business unit ID (uuid) associated with this project.

useBudget
boolean

Whether the project has a budget.

budgetMode
enum<string>

The budget mode. Only used if useBudget is true.

Available options:
summary,
detailed,
aggregated
budgetServiceRevenue
number<float> | null

The budgeted services revenue. Only used if useBudget is true.

budgetBillableHours
number<float> | null

The budgeted billable hours. Only used if useBudget is true and budgetMode is "summary".

budgetNonBillableHours
number<float> | null

The budgeted non-billable hours. Only used if useBudget is true and budgetMode is "summary".

budgetExpensesBillableAmount
number<float> | null

The budgeted billable expenses. Only used if useBudget is true and budgetMode is "summary".

budgetExpensesNonBillableAmount
number<float> | null

The budgeted non-billable expenses. Only used if useBudget is true and budgetMode is "summary".

budgetOtherItemsAmount
number<float> | null

The budgeted other items amount. Only used if useBudget is true and budgetMode is "summary".

useMonthlyBudget
boolean

Whether the project has a monthly budget.

monthlyBudgetMode
enum<string>

The monthly budget mode. Only used if useMonthlyBudget is true.

Available options:
summary,
detailed
monthlyBudgetServiceRevenue
number<float> | null

The budgeted monthly services revenue. Only used if useMonthlyBudget is true.

monthlyBudgetBillableHours
number<float> | null

The budgeted monthly billable hours. Only used if useMonthlyBudget is true and monthlyBudgetMode is "summary".

monthlyBudgetNonBillableHours
number<float> | null

The budgeted monthly non-billable hours. Only used if useMonthlyBudget is true and monthlyBudgetMode is "summary".

monthlyBudgetExpensesBillableAmount
number<float> | null

The budgeted monthly billable expenses. Only used if useMonthlyBudget is true and monthlyBudgetMode is "summary".

monthlyBudgetExpensesNonBillableAmount
number<float> | null

The budgeted monthly non-billable expenses. Only used if useMonthlyBudget is true and monthlyBudgetMode is "summary".

monthlyBudgetOtherItemsAmount
number<float> | null

The budgeted monthly other items amount. Only used if useMonthlyBudget is true and monthlyBudgetMode is "summary".

Response

200

id
string

The unique identifier for the object.

key
string

The URL-friendly slug for the project.

name
string

The name of the project.

notes
string | null

Notes associated with the project.

statusId
enum<string>

The project status.

Available options:
tentative,
not_started,
in_progress,
paused,
completed,
cancelled
start
string<date> | null

The start date for the project. Will be in the form YYYY-MM-DD.

end
string<date> | null

The end date for the project. Will be in the form YYYY-MM-DD. null if no end date is set.

code
string | null

The project code.

poNumber
string | null

The purchase order number.

billingTypeId
enum<string>

The billing type for the project.

Available options:
tm,
fixed,
fixed_recurring,
non_billable
isBillable
boolean

Whether this project is billable. Derived from billingTypeIdfalse only when billingTypeId is "non_billable".

currency
string

The 3-letter currency code associated with the project.

revenueRecognitionMethod
enum<string> | null

The revenue recognition method. Only applicable when billingTypeId is "fixed" or "fixed_recurring". null for other billing types.

Available options:
invoiced,
manual,
automated_hours,
automated_tm_basis
fixedFee
number | null
deprecated

Deprecated. Always null.

fixedRecurringFee
number | null
deprecated

Deprecated. Always null.

fixedRecurringStart
string | null
deprecated

Deprecated. Always null.

fixedRecurringEnd
string | null
deprecated

Deprecated. Always null.

useRoles
boolean

Whether the project uses roles.

useBudget
boolean

Whether the project has a budget.

budgetMode
enum<string> | null

The budget mode. null when useBudget is false.

Available options:
summary,
detailed,
aggregated
useMonthlyBudget
boolean

Whether the project has a monthly budget.

monthlyBudgetMode
enum<string> | null

The monthly budget mode. null when useMonthlyBudget is false.

Available options:
summary,
detailed
capMaxMemberHoursPerDay
boolean

When enabled, caps the number of hours a member can log per day on the project.

maxMemberHoursPerDay
integer | null

The maximum number of hours a member can log per day on the project. Only used if capMaxMemberHoursPerDay is true. null when capMaxMemberHoursPerDay is false.

capMaxMemberHoursPerWeek
boolean

When enabled, caps the number of hours a member can log per week on the project.

maxMemberHoursPerWeek
integer | null

The maximum number of hours a member can log per week on the project. Only used if capMaxMemberHoursPerWeek is true. null when capMaxMemberHoursPerWeek is false.

capMaxMemberHoursPerMonth
boolean

When enabled, caps the number of hours a member can log per month on the project.

maxMemberHoursPerMonth
integer | null

The maximum number of hours a member can log per month on the project. Only used if capMaxMemberHoursPerMonth is true. null when capMaxMemberHoursPerMonth is false.

requiresNotes
boolean

Requires notes on time entries for this project.

requiresTasks
boolean

Requires a task selection on time entries for this project.

recordStatusId
enum<string>

The record status of the project.

Available options:
active,
archived
isProductive
boolean | null

Whether time logged on this project counts as productive time. Only applicable for internal client projects; null for external client projects.

lockTimeAndExpenses
boolean

When enabled, locks time and expenses on the project, preventing further edits.

trackTimeToAssignedRoles
boolean | null

Whether time should be tracked per assigned role. Only applies when useRoles is true. null when useRoles is false.

cloudFolderUrl
string | null

The URL to the associated cloud storage folder.

createdAt
string<date-time>

The timestamp when the object was created.

completedOn
string<date> | null

The date the project was completed. Only populated when statusId is "completed".

client
object

The client associated with the project.

practice
object

The practice associated with the project.

projectType
object

The project type associated with the project.

projectGroup
object

The project group associated with the project.

tags
object[]

The tags associated with the project.

salesRepresentative
object

The sales representative for the project.

businessUnit
object

The business unit associated with the project.

budget
object

The overall budget targets for the project. null when useBudget is false.

monthlyBudget
object

The monthly budget targets for the project. null when useMonthlyBudget is false.