ProjectsCreate a task-driven-revenue contract

Create a task-driven-revenue contract

Adds a TaskDrivenRevenue contract (model 6) to an existing project and returns it.

Creates a fixed-price contract whose revenue is requested per task (TDR); payments can then be tied to tasks (see payment create), on ProjectID, with the fields of ContractCreate that this type accepts (the others are ignored — see the overrides). Answers 200 with the new contract as ContractRead, which carries no budgets: read them in the TimeLog UI or trust what you sent, keeping in mind the server-side derivations on ContractCreate's fields. Also creates the contract's hourly rates and customers from the project, and possibly a first instalment (see side effects). Not idempotent and not atomic. No project privilege is checked.

Use it to:

  • Create a fixed-price contract whose instalments are later linked to tasks (POST /v1/payment with TaskID)

Not for:

  • A dry run: POST /v1/contract/validate-task-driven-revenue-contract
  • Recurring contracts (periodic balancing, continuous service, FPVI) — no REST v1 create

Rules across fields:

  • R1: BudgetWorkAmount and TargetHourlyRate are mutually exclusive: at most one may be non-zero (400).
  • R2: Send BudgetWorkHour > 0 whenever BudgetWorkAmount or TargetHourlyRate is sent; with 0 hours both are stored as 0.

Behaviour:

  • Not idempotent.
  • Not safe to retry blindly. Every call inserts a new contract; there is no external key or dedup. After a timeout or a 500, list the project contracts (newest first) before retrying.
  • Side effect: Inserts the contract (model 6 TaskDrivenRevenue, the sent status and owner) and writes a contract-history entry.
  • Side effect: Budget link: the project's FIRST contract is budget-linked (the project's budget hours / work amount are set from it); any later contract is not, and adding it clears the budget link of every other contract of the project.
  • Side effect: IsDefaultExpenses true clears the flag on the project's other contracts.
  • Side effect: Creates the contract's hourly rates and contract customers from the project; notifies the project (may activate an inactive project when the contract is active).
  • Side effect: First instalment: PaymentPlanAmount (when not 0): one instalment, invoice date = server 'now'.
  • Side effect: Re-saves the project after the contract.
  • Changes are visible to the next read immediately.

Call first: GET /v1/project/get-all, GET /v1/user, GET /v1/ContractModel

Next: GET /v1/contract/{contractID}, GET /v1/contract, POST /v1/payment

Not yet documented: behaviour → side effects; examples.

curl -X POST "https://app3.timelog.com/your-account/api/v1/contract/create-task-driven-revenue-contract" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -d '{
  "ProjectID": 123,
  "ContractName": "John Doe",
  "ContractStatus": 42,
  "ContractOwnerUserID": 123,
  "BudgetWorkAmount": 3.14,
  "BudgetWorkHour": 3.14,
  "HasCompletionNotification": true,
  "CompletionNotificationPercentage": 3.14,
  "IsMileageBillable": true,
  "IsDefaultExpenses": true,
  "ContractTypeID": 123,
  "BudgetExpensesAmount": 3.14,
  "BudgetTravelAmount": 3.14,
  "HasBudgetOverrunNotification": "null",
  "TargetHourlyRate": 3.14,
  "PaymentPlanAmount": 3.14,
  "RevenueExprAmount": 3.14,
  "RevenueTravelAmount": 3.14,
  "IsExpensesLinked": true,
  "IsTravelLinked": true,
  "IsFixedHourlyRate": true,
  "HourlyRatePrice": 29.99,
  "HourlyRateName": "John Doe"
}'
{
  "Properties": {
    "ContractID": 123,
    "ContractGuid": "123e4567-e89b-12d3-a456-426614174000",
    "ContractModelType": 42,
    "ProjectID": 123,
    "IsMainContract": true,
    "ContractName": "John Doe",
    "ContractStatus": 42,
    "IsMileageBillable": true,
    "IsDefaultExpenses": "null",
    "ContractTypeID": 123,
    "ContractTypeName": "John Doe"
  },
  "Links": [
    {
      "Href": "example_string",
      "Rel": "example_string"
    }
  ],
  "Actions": [
    {}
  ]
}
POST
/v1/contract/create-task-driven-revenue-contract
POST
Base URLstring

Target server for requests. Edit to use your own host.

Bearer Token
Bearer Tokenstring
Required

OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp). The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user. > Not yet documented: how to obtain a token. > Not yet documented: token lifetime.

OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp). The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user. > Not yet documented: how to obtain a token. > Not yet documented: token lifetime.
Content-Typestring
Required

The media type of the request body

Options: application/json
ProjectIDinteger
Required

The project to add the contract to. Must be > 0 (400) and exist (37014, 500). Can be set on create only. Refers to ProjectRead.ProjectID. Look up valid values with GET /v1/project/get-all. Valid values come from GET /v1/project/get-all.

Format: int32
ContractNamestring
Required

Display name of the new contract. Kept as sent (the server generates a name only when it is empty, which the validator already forbids). Can be set on create only. > Not yet documented: constraints → max length.

ContractStatusinteger
Required

Initial status of the contract. 0 or an undefined value is rejected (400 "'Contract Status' has a range of values which does not include '0'."). Can be set on create only. - All five types — Set on the new contract through ProjectSubContract.ChangeStatus before the first save. Allowed values: | Value | Name | Meaning | |---|---|---| | 1 | Quotation | Create the contract in quote stage (not yet running). | | 2 | Active | Create a running contract. | | 3 | Completed | Create the contract already closed as finished. | | 4 | Cancelled | Create the contract already closed as cancelled. | > Not yet documented: values → members.

Format: int32 • Options: 1, 2, 3, 4
ContractOwnerUserIDinteger
Required

USER ID (not employee ID) of the contract owner. Must be an existing (37040) and active (37931) user. In practice required: the validator accepts 0 and the save logic would default 0 to the project manager, but the controller validates the owner before that and rejects 0 with 37040. Can be set on create only. Refers to UserRead.UserID. Look up valid values with GET /v1/user. Valid values come from GET /v1/user. > Not yet documented: behaviour.

Format: int32
BudgetWorkAmountnumber

Budgeted revenue for work (hours × rate) on the contract, in project currency. Its handling differs by type — see behaviour. Can be set on create only. Unit: project currency - TMB, TMAEB — Stored as sent. TMAEB: also part of the first instalment (BudgetWorkAmount + BudgetExpensesAmount + BudgetTravelAmount). - FPB, TDR — together with a non-zero TargetHourlyRate — 400 "BudgetWorkAmount must be 0 when TargetHourlyRate is added." (and the mirror message on TargetHourlyRate). - FPB, TDR — BudgetWorkHour > 0 — Stored as BudgetWorkHour × (BudgetWorkAmount / BudgetWorkHour), rounded — equal to the sent value up to rounding; TargetHourlyRate is derived from it. - FPB, TDR — BudgetWorkHour = 0 — Stored as 0: the derived target rate is 0 when there are no hours, so the amount is lost. - PS — IsFixedHourlyRate false — Stored as sent; it is also the amount of the first instalment. - PS — IsFixedHourlyRate true, together with a non-zero BudgetWorkHour — 400 "BudgetWorkAmount must be 0 when BudgetWorkHour is added." - PS — IsFixedHourlyRate true, 0 and BudgetWorkHour > 0 — Derived as BudgetWorkHour × HourlyRatePrice on the second save. The first instalment is created from the SENT value (0 → no instalment). - More decimals than InvoiceSetting_NumberOfDecimals — 400; the message names AmountIncludingVatExpenseCurrency instead of this field.

Format: double
BudgetWorkHournumber

Budgeted work hours on the contract. Can be set on create only. Unit: hours - TMB, TMAEB, FPB, TDR — Stored as sent. FPB / TDR: it is the divisor of the target-rate derivation — send it whenever you send BudgetWorkAmount or TargetHourlyRate. - PS — IsFixedHourlyRate false — applied - PS — IsFixedHourlyRate true, together with a non-zero BudgetWorkAmount — 400 "BudgetWorkHour must be 0 when BudgetWorkAmount is added." - PS — IsFixedHourlyRate true, 0 and BudgetWorkAmount > 0 — Derived as BudgetWorkAmount / HourlyRatePrice. With HourlyRatePrice 0 this divides by zero.

Format: double
HasCompletionNotificationboolean

Turn on the contract's completion notification, which fires at CompletionNotificationPercentage. Can be set on create only. - All five types — applied > Not yet documented: description.

CompletionNotificationPercentagenumber

Threshold in percent for the completion notification. Can be set on create only. Unit: percent - All five types — applied - Outside 0–100 — 400 (InclusiveBetween).

Format: double
IsMileageBillableboolean

Default billable flag for mileage registered on this contract. Can be set on create only. - All five types — applied

IsDefaultExpensesboolean

Make this the project's default contract for expenses. Can be set on create only. - true (all five types) — Clears IsDefaultExpenses on every other contract of the project (at most one default per project).

ContractTypeIDinteger

Account-defined contract type (a classification independent of the contract model). 0 = none. When > 0 it must exist (37958). When the account feature ContractTypeIsRequired is on, a value >= 1 is required (37957). Conditional. Required (>= 1) when the account feature ContractTypeIsRequired is active; otherwise optional (0 = none). Can be set on create only. Refers to ContractTypeRead.ContractTypeID. - Feature ContractTypeIsRequired on and value < 1 — 37957, 500 (controller, before the contract is built). - Value > 0 that is not a contract type — 37958, 500 (save business rules, before the insert). - 37958 is still checked. > Not yet documented: values → lookup op.

Format: int32
BudgetExpensesAmountnumber

Budgeted expenses on the contract, in project currency. Can be set on create only. Unit: project currency - TMB, TMAEB — TMAEB: part of the first instalment. - FPB, TDR — When IsExpensesLinked is true it is ALSO written as RevenueExprAmount. - PS — Not part of the prepaid body.

Format: double
BudgetTravelAmountnumber

Budgeted travel (mileage / travel expenses) on the contract, in project currency. Can be set on create only. Unit: project currency - TMB, TMAEB — TMAEB: part of the first instalment. - FPB, TDR — When IsTravelLinked is true it is ALSO written as RevenueTravelAmount. - PS — Not part of the prepaid body.

Format: double
HasBudgetOverrunNotificationbooleannull

Turn on the budget-overrun notification of a time-and-material contract. Can be set on create only. Null: null = false. - TMB, TMAEB — null is stored as false. - FPB, PS, TDR — Not part of those bodies. > Not yet documented: description.

TargetHourlyRatenumber

Fixed price contracts: the hourly rate the fixed price is expected to yield, in project currency per hour. Alternative to BudgetWorkAmount — send one of them, together with BudgetWorkHour. Can be set on create only. Unit: project currency per hour - FPB, TDR — together with a non-zero BudgetWorkAmount — 400 "TargetHourlyRate must be 0 when BudgetWorkAmount is added." - FPB, TDR — BudgetWorkHour > 0 — Kept (rounded); BudgetWorkAmount becomes BudgetWorkHour × TargetHourlyRate. When 0 it is derived as BudgetWorkAmount / BudgetWorkHour. - FPB, TDR — BudgetWorkHour = 0 — Stored as 0. - FPB (not TDR) — After the save, every task on this contract whose hourly-rate model is not Allocated gets this rate (none exist yet on a new contract). - TMB, TMAEB, PS — Not part of those bodies.

Format: double
PaymentPlanAmountnumber

The contract's fixed price, in project currency. When not 0, the create also adds a first instalment of this amount to the billing plan, dated today. Can be set on create only. Unit: project currency - FPB, TDR — Stored; != 0 → one instalment of PaymentPlanAmount named by the default payment name, invoice date = server 'now' (not on multi-customer projects). - TMB, TMAEB, PS — Not part of those bodies.

Format: double
RevenueExprAmountnumber

Fixed price contracts: expected revenue from expenses, in project currency. Can be set on create only. Unit: project currency - FPB, TDR — IsExpensesLinked false — applied - FPB, TDR — IsExpensesLinked true — Replaced by BudgetExpensesAmount. - TMB, TMAEB, PS — Not part of those bodies. > Not yet documented: description.

Format: double
RevenueTravelAmountnumber

Fixed price contracts: expected revenue from travel, in project currency. Can be set on create only. Unit: project currency - FPB, TDR — IsTravelLinked false — applied - FPB, TDR — IsTravelLinked true — Replaced by BudgetTravelAmount. - TMB, TMAEB, PS — Not part of those bodies.

Format: double
IsExpensesLinkedboolean

Fixed price contracts: when true, expense revenue (RevenueExprAmount) follows the expense budget (BudgetExpensesAmount). Can be set on create only. - FPB, TDR — applied - TMB, TMAEB — Not part of those bodies; the adapter forces false. - PS — Not part of the prepaid body.

IsTravelLinkedboolean

Fixed price contracts: when true, travel revenue (RevenueTravelAmount) follows the travel budget (BudgetTravelAmount). Can be set on create only. - FPB, TDR — applied - TMB, TMAEB — Not part of those bodies; the adapter forces false. - PS — Not part of the prepaid body.

IsFixedHourlyRateboolean

Prepaid contracts: when true, the budget is kept consistent with HourlyRatePrice — send EITHER BudgetWorkHour OR BudgetWorkAmount (400 if both) and the other is derived. When false, both are stored as sent. Can be set on create only. - PS — Set through ChangeIsFixedHourlyRate; drives the derivation in UpdatePrepaidContractCreatedFromApi. - TMB, FPB, TMAEB, TDR — Not part of those bodies. > Not yet documented: description.

HourlyRatePricenumber

Prepaid contracts: price of the project-specific contract hourly rate that the create adds to the new contract, in the project's price-list currency. Can be set on create only. Unit: project currency per hour - PS — After the first save a contract hourly rate (HourlyRateName, this price, project CurrencyListID) is created and set as the contract's hourly rate. - Negative — 400 (GreaterThanOrEqualTo 0). - TMB, FPB, TMAEB, TDR — Not part of those bodies.

Format: double
HourlyRateNamestring

Prepaid contracts: name of the contract hourly rate created with HourlyRatePrice. Can be set on create only. - PS — applied - TMB, FPB, TMAEB, TDR — Not part of those bodies.

Request Preview
Response

Response will appear here after sending the request

Authentication

header
Authorizationstring
Required

Bearer token. OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).

The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.

Not yet documented: how to obtain a token.

Not yet documented: token lifetime.

Body

application/json
ProjectIDinteger
Required

The project to add the contract to. Must be > 0 (400) and exist (37014, 500).

Can be set on create only.

Refers to ProjectRead.ProjectID. Look up valid values with GET /v1/project/get-all.

Valid values come from GET /v1/project/get-all.

ContractNamestring
Required

Display name of the new contract. Kept as sent (the server generates a name only when it is empty, which the validator already forbids).

Can be set on create only.

Not yet documented: constraints → max length.

ContractStatusinteger
Required

Initial status of the contract. 0 or an undefined value is rejected (400 "'Contract Status' has a range of values which does not include '0'.").

Can be set on create only.

  • All five types — Set on the new contract through ProjectSubContract.ChangeStatus before the first save.

Allowed values:

ValueNameMeaning
1QuotationCreate the contract in quote stage (not yet running).
2ActiveCreate a running contract.
3CompletedCreate the contract already closed as finished.
4CancelledCreate the contract already closed as cancelled.

Not yet documented: values → members.

Allowed values:1234
ContractOwnerUserIDinteger
Required

USER ID (not employee ID) of the contract owner. Must be an existing (37040) and active (37931) user. In practice required: the validator accepts 0 and the save logic would default 0 to the project manager, but the controller validates the owner before that and rejects 0 with 37040.

Can be set on create only.

Refers to UserRead.UserID. Look up valid values with GET /v1/user.

Valid values come from GET /v1/user.

Not yet documented: behaviour.

BudgetWorkAmountnumber

Budgeted revenue for work (hours × rate) on the contract, in project currency. Its handling differs by type — see behaviour.

Can be set on create only.

Unit: project currency

  • TMB, TMAEB — Stored as sent. TMAEB: also part of the first instalment (BudgetWorkAmount + BudgetExpensesAmount + BudgetTravelAmount).

  • FPB, TDR — together with a non-zero TargetHourlyRate — 400 "BudgetWorkAmount must be 0 when TargetHourlyRate is added." (and the mirror message on TargetHourlyRate).

  • FPB, TDR — BudgetWorkHour > 0 — Stored as BudgetWorkHour × (BudgetWorkAmount / BudgetWorkHour), rounded — equal to the sent value up to rounding; TargetHourlyRate is derived from it.

  • FPB, TDR — BudgetWorkHour = 0 — Stored as 0: the derived target rate is 0 when there are no hours, so the amount is lost.

  • PS — IsFixedHourlyRate false — Stored as sent; it is also the amount of the first instalment.

  • PS — IsFixedHourlyRate true, together with a non-zero BudgetWorkHour — 400 "BudgetWorkAmount must be 0 when BudgetWorkHour is added."

  • PS — IsFixedHourlyRate true, 0 and BudgetWorkHour > 0 — Derived as BudgetWorkHour × HourlyRatePrice on the second save. The first instalment is created from the SENT value (0 → no instalment).

  • More decimals than InvoiceSetting_NumberOfDecimals — 400; the message names AmountIncludingVatExpenseCurrency instead of this field.

BudgetWorkHournumber

Budgeted work hours on the contract.

Can be set on create only.

Unit: hours

  • TMB, TMAEB, FPB, TDR — Stored as sent. FPB / TDR: it is the divisor of the target-rate derivation — send it whenever you send BudgetWorkAmount or TargetHourlyRate.

  • PS — IsFixedHourlyRate false — applied

  • PS — IsFixedHourlyRate true, together with a non-zero BudgetWorkAmount — 400 "BudgetWorkHour must be 0 when BudgetWorkAmount is added."

  • PS — IsFixedHourlyRate true, 0 and BudgetWorkAmount > 0 — Derived as BudgetWorkAmount / HourlyRatePrice. With HourlyRatePrice 0 this divides by zero.

HasCompletionNotificationboolean

Turn on the contract's completion notification, which fires at CompletionNotificationPercentage.

Can be set on create only.

  • All five types — applied

Not yet documented: description.

CompletionNotificationPercentagenumber

Threshold in percent for the completion notification.

Can be set on create only.

Unit: percent

  • All five types — applied

  • Outside 0–100 — 400 (InclusiveBetween).

IsMileageBillableboolean

Default billable flag for mileage registered on this contract.

Can be set on create only.

  • All five types — applied
IsDefaultExpensesboolean

Make this the project's default contract for expenses.

Can be set on create only.

  • true (all five types) — Clears IsDefaultExpenses on every other contract of the project (at most one default per project).
ContractTypeIDinteger

Account-defined contract type (a classification independent of the contract model). 0 = none. When > 0 it must exist (37958). When the account feature ContractTypeIsRequired is on, a value >= 1 is required (37957).

Conditional. Required (>= 1) when the account feature ContractTypeIsRequired is active; otherwise optional (0 = none).

Can be set on create only.

Refers to ContractTypeRead.ContractTypeID.

  • Feature ContractTypeIsRequired on and value < 1 — 37957, 500 (controller, before the contract is built).

  • Value > 0 that is not a contract type — 37958, 500 (save business rules, before the insert).

  • 37958 is still checked.

Not yet documented: values → lookup op.

BudgetExpensesAmountnumber

Budgeted expenses on the contract, in project currency.

Can be set on create only.

Unit: project currency

  • TMB, TMAEB — TMAEB: part of the first instalment.

  • FPB, TDR — When IsExpensesLinked is true it is ALSO written as RevenueExprAmount.

  • PS — Not part of the prepaid body.

BudgetTravelAmountnumber

Budgeted travel (mileage / travel expenses) on the contract, in project currency.

Can be set on create only.

Unit: project currency

  • TMB, TMAEB — TMAEB: part of the first instalment.

  • FPB, TDR — When IsTravelLinked is true it is ALSO written as RevenueTravelAmount.

  • PS — Not part of the prepaid body.

HasBudgetOverrunNotificationboolean,null

Turn on the budget-overrun notification of a time-and-material contract.

Can be set on create only.

Null: null = false.

  • TMB, TMAEB — null is stored as false.

  • FPB, PS, TDR — Not part of those bodies.

Not yet documented: description.

TargetHourlyRatenumber

Fixed price contracts: the hourly rate the fixed price is expected to yield, in project currency per hour. Alternative to BudgetWorkAmount — send one of them, together with BudgetWorkHour.

Can be set on create only.

Unit: project currency per hour

  • FPB, TDR — together with a non-zero BudgetWorkAmount — 400 "TargetHourlyRate must be 0 when BudgetWorkAmount is added."

  • FPB, TDR — BudgetWorkHour > 0 — Kept (rounded); BudgetWorkAmount becomes BudgetWorkHour × TargetHourlyRate. When 0 it is derived as BudgetWorkAmount / BudgetWorkHour.

  • FPB, TDR — BudgetWorkHour = 0 — Stored as 0.

  • FPB (not TDR) — After the save, every task on this contract whose hourly-rate model is not Allocated gets this rate (none exist yet on a new contract).

  • TMB, TMAEB, PS — Not part of those bodies.

PaymentPlanAmountnumber

The contract's fixed price, in project currency. When not 0, the create also adds a first instalment of this amount to the billing plan, dated today.

Can be set on create only.

Unit: project currency

  • FPB, TDR — Stored; != 0 → one instalment of PaymentPlanAmount named by the default payment name, invoice date = server 'now' (not on multi-customer projects).

  • TMB, TMAEB, PS — Not part of those bodies.

RevenueExprAmountnumber

Fixed price contracts: expected revenue from expenses, in project currency.

Can be set on create only.

Unit: project currency

  • FPB, TDR — IsExpensesLinked false — applied

  • FPB, TDR — IsExpensesLinked true — Replaced by BudgetExpensesAmount.

  • TMB, TMAEB, PS — Not part of those bodies.

Not yet documented: description.

RevenueTravelAmountnumber

Fixed price contracts: expected revenue from travel, in project currency.

Can be set on create only.

Unit: project currency

  • FPB, TDR — IsTravelLinked false — applied

  • FPB, TDR — IsTravelLinked true — Replaced by BudgetTravelAmount.

  • TMB, TMAEB, PS — Not part of those bodies.

IsExpensesLinkedboolean

Fixed price contracts: when true, expense revenue (RevenueExprAmount) follows the expense budget (BudgetExpensesAmount).

Can be set on create only.

  • FPB, TDR — applied

  • TMB, TMAEB — Not part of those bodies; the adapter forces false.

  • PS — Not part of the prepaid body.

IsTravelLinkedboolean

Fixed price contracts: when true, travel revenue (RevenueTravelAmount) follows the travel budget (BudgetTravelAmount).

Can be set on create only.

  • FPB, TDR — applied

  • TMB, TMAEB — Not part of those bodies; the adapter forces false.

  • PS — Not part of the prepaid body.

IsFixedHourlyRateboolean

Prepaid contracts: when true, the budget is kept consistent with HourlyRatePrice — send EITHER BudgetWorkHour OR BudgetWorkAmount (400 if both) and the other is derived. When false, both are stored as sent.

Can be set on create only.

  • PS — Set through ChangeIsFixedHourlyRate; drives the derivation in UpdatePrepaidContractCreatedFromApi.

  • TMB, FPB, TMAEB, TDR — Not part of those bodies.

Not yet documented: description.

HourlyRatePricenumber

Prepaid contracts: price of the project-specific contract hourly rate that the create adds to the new contract, in the project's price-list currency.

Can be set on create only.

Unit: project currency per hour

  • PS — After the first save a contract hourly rate (HourlyRateName, this price, project CurrencyListID) is created and set as the contract's hourly rate.

  • Negative — 400 (GreaterThanOrEqualTo 0).

  • TMB, FPB, TMAEB, TDR — Not part of those bodies.

HourlyRateNamestring

Prepaid contracts: name of the contract hourly rate created with HourlyRatePrice.

Can be set on create only.

  • PS — applied

  • TMB, FPB, TMAEB, TDR — Not part of those bodies.

Responses

Propertiesobject

A contract of a project: HOW the work on the project is invoiced. A project has one or more contracts; each has a contract model (time and material, fixed price, prepaid, ...), a status and an optional account-defined contract type. Tasks, payments (instalments), expenses and mileage are booked on a contract. The TAF self link points to GET /v1/contract/{ContractID}; each entity also lists the ten contract TAF actions (five creates, five validates).

Linksarray
Actionsobject[]