0

Update a project contract line

by
Published Oct 17, 2025

Updates an existing project contract line by setting field values. Any fields not provided remain unchanged.

Script sage_intacct Verified

The script

Submitted by hugo697 Bun
Verified 235 days ago
1
//native
2
type SageIntacct = {
3
	token: string
4
}
5
/**
6
 * Update a project contract line
7
 * Updates an existing project contract line by setting field values. Any fields not provided remain unchanged.
8
 */
9
export async function main(
10
	auth: SageIntacct,
11
	key: string,
12
	body: {
13
		key?: string
14
		id?: string
15
		href?: string
16
		projectContract?: {
17
			key?: string
18
			id?: string
19
			name?: string
20
			href?: string
21
		}
22
		name?: string
23
		parent?: { key?: string; id?: string; name?: string; href?: string }
24
		description?: string
25
		contractLineDate?: string
26
		glAccount?: { key?: string; id?: string; name?: string; href?: string }
27
		retainagePercentage?: string
28
		isBillable?: false | true
29
		billing?: {
30
			billedPrice?: string
31
			previouslyAppliedPrice?: string
32
			externalReferenceNumber?: string
33
			billedNetRetainage?: string
34
			percentBilled?: string
35
			percentBilledNetRetainage?: string
36
			retainageHeld?: string
37
			retainageReleased?: string
38
			retainageBalance?: string
39
			paymentsReceived?: string
40
		}
41
		billingSetup?: {
42
			billingType?: 'progressBill' | 'timeAndMaterial'
43
			maximumBilling?: 'totalPrice' | 'specifiedAmount' | 'noMaximum'
44
			maximumBillingAmount?: string
45
			summarizeBill?: false | true
46
		}
47
		summary?: {
48
			originalPrice?: string
49
			revisionPrice?: string
50
			forecastPrice?: string
51
			approvedChangePrice?: string
52
			pendingChangePrice?: string
53
			otherPrice?: string
54
			totalPrice?: string
55
		}
56
		dimensions?: {
57
			location?: { key?: string; id?: string; name?: string; href?: string }
58
			department?: { key?: string; id?: string; name?: string; href?: string }
59
			employee?: { key?: string; id?: string; name?: string; href?: string }
60
			project?: { key?: string; id?: string; name?: string; href?: string }
61
			customer?: { key?: string; id?: string; name?: string; href?: string }
62
			vendor?: { key?: string; id?: string; name?: string; href?: string }
63
			item?: { key?: string; id?: string; name?: string; href?: string }
64
			warehouse?: { key?: string; id?: string; name?: string; href?: string }
65
			class?: { key?: string; id?: string; name?: string; href?: string }
66
			task?: { id?: string; key?: string; name?: string; href?: string }
67
			costType?: { id?: string; key?: string; name?: string; href?: string }
68
			asset?: { id?: string; key?: string; name?: string; href?: string }
69
			contract?: { id?: string; key?: string; name?: string; href?: string }
70
			affiliateEntity?: {
71
				key?: string
72
				id?: string
73
				href?: string
74
				name?: string
75
			}
76
		} & {
77
			location?: { key?: string; id?: string; name?: string; href?: string }
78
			customer?: { key?: string; id?: string; name?: string; href?: string }
79
			department?: { key?: string; id?: string; name?: string; href?: string }
80
		}
81
		excludeFromGLBudget?: false | true
82
		scope?: string
83
		inclusions?: string
84
		exclusions?: string
85
		terms?: string
86
		schedule?: {
87
			scheduledStartDate?: string
88
			actualStartDate?: string
89
			scheduledCompletionDate?: string
90
			revisedCompletionDate?: string
91
			substantialCompletionDate?: string
92
			actualCompletionDate?: string
93
			noticeToProceedDate?: string
94
			responseDueDate?: string
95
			executedOnDate?: string
96
			scheduleImpact?: string
97
		}
98
		internalReference?: {
99
			referenceNumber?: string
100
			initiatedBy?: { key?: string; id?: string; name?: string; href?: string }
101
			verbalApprovalBy?: {
102
				key?: string
103
				id?: string
104
				name?: string
105
				href?: string
106
			}
107
			issuedBy?: { key?: string; id?: string; name?: string; href?: string }
108
			issuedOnDate?: string
109
			approvedBy?: { key?: string; id?: string; name?: string; href?: string }
110
			approvedOnDate?: string
111
			signedBy?: { key?: string; id?: string; name?: string; href?: string }
112
			signedOnDate?: string
113
			source?: string
114
			sourceReferenceNumber?: string
115
		}
116
		externalReference?: {
117
			referenceNumber?: string
118
			verbalApprovalBy?: { key?: string; id?: string; href?: string }
119
			approvedBy?: { key?: string; id?: string; href?: string }
120
			approvedOnDate?: string
121
			signedBy?: { key?: string; id?: string; href?: string }
122
			signedOnDate?: string
123
		}
124
		rateTables?: {
125
			default?: { key?: string; id?: string; href?: string }
126
			timesheet?: { key?: string; id?: string; href?: string }
127
			purchasing?: { key?: string; id?: string; href?: string }
128
			ap?: { key?: string; id?: string; href?: string }
129
			gl?: { key?: string; id?: string; href?: string }
130
			creditCard?: { key?: string; id?: string; href?: string }
131
			employeeExpense?: { key?: string; id?: string; href?: string }
132
		}
133
		projectContractLineEntries?: {
134
			key?: string
135
			id?: string
136
			href?: string
137
			projectContractLine?: { key?: string; id?: string; href?: string }
138
			workflowType?: 'original' | 'revision' | 'forecast' | 'other'
139
			dimensions?: {
140
				location?: { key?: string; id?: string; name?: string; href?: string }
141
				department?: {
142
					key?: string
143
					id?: string
144
					name?: string
145
					href?: string
146
				}
147
				employee?: { key?: string; id?: string; name?: string; href?: string }
148
				project?: { key?: string; id?: string; name?: string; href?: string }
149
				customer?: { key?: string; id?: string; name?: string; href?: string }
150
				vendor?: { key?: string; id?: string; name?: string; href?: string }
151
				item?: { key?: string; id?: string; name?: string; href?: string }
152
				warehouse?: { key?: string; id?: string; name?: string; href?: string }
153
				class?: { key?: string; id?: string; name?: string; href?: string }
154
				task?: { id?: string; key?: string; name?: string; href?: string }
155
				costType?: { id?: string; key?: string; name?: string; href?: string }
156
				asset?: { id?: string; key?: string; name?: string; href?: string }
157
				contract?: { id?: string; key?: string; name?: string; href?: string }
158
				affiliateEntity?: {
159
					key?: string
160
					id?: string
161
					href?: string
162
					name?: string
163
				}
164
			} & {
165
				location?: { key?: string; id?: string; name?: string; href?: string }
166
				department?: {
167
					key?: string
168
					id?: string
169
					name?: string
170
					href?: string
171
				}
172
			}
173
			quantity?: string
174
			externalUOM?: string
175
			unitPrice?: string
176
			price?: string
177
			priceMarkupPercent?: string
178
			priceMarkupAmount?: string
179
			linePrice?: string
180
			memo?: string
181
			priceEffectiveDate?: string
182
			audit?: {
183
				createdDateTime?: string
184
				modifiedDateTime?: string
185
				createdBy?: string
186
				modifiedBy?: string
187
			}
188
		}[]
189
		changeRequestEntries?: {
190
			key?: string
191
			id?: string
192
			href?: string
193
			changeRequest?: { key?: string; id?: string; href?: string }
194
			workflowType?:
195
				| 'original'
196
				| 'revision'
197
				| 'forecast'
198
				| 'other'
199
				| 'none'
200
				| 'approvedChange'
201
				| 'pendingChange'
202
			dimensions?: {
203
				location?: { key?: string; id?: string; name?: string; href?: string }
204
				department?: {
205
					key?: string
206
					id?: string
207
					name?: string
208
					href?: string
209
				}
210
				employee?: { key?: string; id?: string; name?: string; href?: string }
211
				project?: { key?: string; id?: string; name?: string; href?: string }
212
				customer?: { key?: string; id?: string; name?: string; href?: string }
213
				vendor?: { key?: string; id?: string; name?: string; href?: string }
214
				item?: { key?: string; id?: string; name?: string; href?: string }
215
				warehouse?: { key?: string; id?: string; name?: string; href?: string }
216
				class?: { key?: string; id?: string; name?: string; href?: string }
217
				task?: { id?: string; key?: string; name?: string; href?: string }
218
				costType?: { id?: string; key?: string; name?: string; href?: string }
219
				asset?: { id?: string; key?: string; name?: string; href?: string }
220
				contract?: { id?: string; key?: string; name?: string; href?: string }
221
				affiliateEntity?: {
222
					key?: string
223
					id?: string
224
					href?: string
225
					name?: string
226
				}
227
			} & {
228
				location?: { key?: string; id?: string; name?: string; href?: string }
229
				department?: {
230
					key?: string
231
					id?: string
232
					name?: string
233
					href?: string
234
				}
235
			}
236
			numberOfProductionUnits?: string
237
			productionUnitDescription?: string
238
			quantity?: string
239
			externalUOM?: string
240
			unitCost?: string
241
			cost?: string
242
			unitPrice?: string
243
			price?: string
244
			priceMarkupPercent?: string
245
			priceMarkupAmount?: string
246
			linePrice?: string
247
			projectChangeOrder?: { key?: string; id?: string; href?: string }
248
			memo?: string
249
			projectEstimate?: { key?: string; id?: string; href?: string }
250
			glAccount?: { key?: string; id?: string; name?: string; href?: string }
251
			projectContract?: {
252
				key?: string
253
				id?: string
254
				name?: string
255
				href?: string
256
			}
257
			projectContractLine?: {
258
				key?: string
259
				id?: string
260
				name?: string
261
				href?: string
262
			}
263
			audit?: {
264
				createdDateTime?: string
265
				modifiedDateTime?: string
266
				createdBy?: string
267
				modifiedBy?: string
268
			}
269
		}[]
270
		attachment?: { key?: string; id?: string; href?: string }
271
		status?: 'active' | 'inactive'
272
		audit?: {
273
			createdDateTime?: string
274
			modifiedDateTime?: string
275
			createdBy?: string
276
			modifiedBy?: string
277
		}
278
	} & { id?: {} }
279
) {
280
	const url = new URL(
281
		`https://api.intacct.com/ia/api/v1/objects/construction/project-contract-line/${key}`
282
	)
283

284
	const response = await fetch(url, {
285
		method: 'PATCH',
286
		headers: {
287
			'Content-Type': 'application/json',
288
			Authorization: 'Bearer ' + auth.token
289
		},
290
		body: JSON.stringify(body)
291
	})
292
	if (!response.ok) {
293
		const text = await response.text()
294
		throw new Error(`${response.status} ${text}`)
295
	}
296
	return await response.json()
297
}
298