0

Create a project contract line

by
Published Oct 17, 2025

Creates a new project contract line.

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

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