Skip to content

HighLevel: Create Invoice from Estimate

HighLevel invoices.createInvoiceFromEstimate: arguments, response, policy and SDK examples.

← Invoices operations · Get started

Operation gohighlevel.create_invoice_from_estimate

Provider route: POST /invoices/estimate/{estimateId}/invoice. Alter supplies the connection’s credentials and routing.

Install @alter-ai/sdk @alter-ai/gohighlevel with npm, or alter-sdk-gohighlevel with pip. Supply your connected customer’s grant ID and the arguments described below.

import { App } from "@alter-ai/sdk";
import { HighLevelIntegration } from "@alter-ai/gohighlevel";
async function execute(input: Parameters<HighLevelIntegration["invoices"]["createInvoiceFromEstimate"]>[0]) {
const app = new App({ apiKey: process.env.ALTER_API_KEY! });
try {
const provider = new HighLevelIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! });
const call = await provider.invoices.createInvoiceFromEstimate(input);
const result = await call.wait();
return result.bodyJson();
} finally {
await app.close();
}
}
import os
from alter_sdk import App
from alter_sdk_gohighlevel import HighLevelIntegration
async def execute(arguments):
async with App(api_key=os.environ["ALTER_API_KEY"]) as app:
provider = HighLevelIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]})
call = await provider.invoices.create_invoice_from_estimate(arguments)
result = await call.wait()
return result.body_json()
FieldTypePresenceDescription and constraints
$objectRootAdditional keys: not allowed
pathobjectRequired within parentAdditional keys: not allowed
path.estimateIdstringRequired within parent
bodyModelRequired within parentExpand Create Invoice from Estimate — request body — body

Referenced models: Create Invoice from Estimate — request body — body

Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.

FieldTypePresenceDescription and constraints
$ModelRootExpand Create Invoice from Estimate — response body

Referenced models: Create Invoice from Estimate — response body

4 more schemas are linked from the tables above, on the schema pages.

Create Invoice from Estimate — request body — body
FieldTypePresenceDescription and constraints
$objectRoot
altIdstringRequired within parentLocation Id or Agency Id
altTypestringRequired within parentOne of: location
markAsInvoicedbooleanRequired within parentMark Estimate as Invoiced
versionstringOptionalVersion of the update request
One of: v1, v2
Create Invoice from Estimate — response body
FieldTypePresenceDescription and constraints
$objectRoot
estimateJSONRequired within parentEstimate details
estimate (allOf 1)ModelAll variants applyExpand Send Estimate — response body
invoiceJSONRequired within parentInvoice details
invoice (allOf 1)ModelAll variants applyExpand Void invoice — response body

Referenced models: Void invoice — response body, Send Estimate — response body

Void invoice — response body
FieldTypePresenceDescription and constraints
$objectRoot
_idstringRequired within parentInvoice Id
altIdstringRequired within parentLocation Id or Agency Id
altTypestringRequired within parentKnown values: location
amountDueJSONRequired within parent
amountDue (anyOf 1)numberAlternativeTotal Amount Due
amountDue (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
amountPaidJSONRequired within parent
amountPaid (anyOf 1)numberAlternativeAmount Paid
amountPaid (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
automaticTaxesCalculatedbooleanOptionalIs Automatic taxes calculated for the Invoice items
automaticTaxesEnabledbooleanOptionalAutomatic taxes enabled for the Invoice
businessDetailsobjectRequired within parentBusiness Details
contactDetailsobjectRequired within parentContact Details
createdAtstringRequired within parentcreated at
currencystringRequired within parentCurrency
discountobjectOptionalDiscount
dueDatestringRequired within parentDue date in YYYY-MM-DD format
invoiceItemsarrayRequired within parentInvoice Items
invoiceItems[]stringEach item
invoiceNumberJSONRequired within parent
invoiceNumber (anyOf 1)numberAlternativeInvoice Number
invoiceNumber (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
issueDatestringRequired within parentIssue date in YYYY-MM-DD format
liveModebooleanRequired within parentLive Mode
namestringRequired within parentName of the invoice
paymentScheduleobjectOptionalsplit invoice into payment schedule summing up to full invoice amount
statusstringRequired within parentInvoice Status
Known values: draft, sent, payment_processing, paid, void, partially_paid
titlestringRequired within parentTitle
totalJSONRequired within parent
total (anyOf 1)numberAlternativeTotal Amount
total (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
updatedAtstringRequired within parentupdated at
Send Estimate — response body
FieldTypePresenceDescription and constraints
$objectRoot
__vJSONRequired within parent
__v (anyOf 1)numberAlternativeVersion number
__v (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
_idstringRequired within parentUnique identifier
altIdstringRequired within parentLocation Id or Agency Id
altTypestringRequired within parentKnown values: location
attachmentsarrayOptionalAttachments
attachments[]ModelEach itemExpand Send Estimate — response body — attachments item
autoInvoiceJSONOptionalAuto-invoice settings for the estimate
autoInvoice (allOf 1)ModelAll variants applyExpand Delete Event — request body — body
automaticTaxesCalculatedbooleanRequired within parentIndicates if automatic taxes were calculated
automaticTaxesEnabledbooleanRequired within parentIndicates if automatic taxes are enabled for this estimate
businessDetailsJSONRequired within parentBusiness details associated with the estimate
businessDetails (allOf 1)ModelAll variants applyExpand Delete Event — request body — body
companyIdstringRequired within parentCompany identifier associated with the estimate
contactDetailsJSONRequired within parentContact details for the estimate
contactDetails (allOf 1)ModelAll variants applyExpand Delete Event — request body — body
createdAtstringRequired within parentTimestamp when created
Format: date-time
currencystringRequired within parentCurrency code
deletedbooleanRequired within parentIndicates if deleted
discountJSONRequired within parentDiscount details for the estimate template
discount (allOf 1)ModelAll variants applyExpand Send Estimate — response body — discount / type: percentage, fixed
estimateActionHistoryarrayRequired within parentHistory of actions taken on the estimate
estimateActionHistory[]stringEach item
estimateNumberPrefixstringOptionalEstimate number prefix
expiryDatestringRequired within parentDate when the estimate expires
Format: date-time
frequencySettingsJSONRequired within parentFrequency settings for recurring estimates
frequencySettings (allOf 1)ModelAll variants applyExpand Send Estimate — response body — frequency Settings enabled, schedule
issueDatestringRequired within parentDate when the estimate was issued
Format: date-time
itemsarrayRequired within parentAn array of items
items[]arrayEach item
lastVisitedAtstringRequired within parentTimestamp when the estimate was last visited
Format: date-time
liveModebooleanRequired within parentIndicates if it is in live mode
metaobjectRequired within parentAdditional metadata associated with the estimate
namestringRequired within parentName
sentBystringOptionalUser who sent the estimate
sentToJSONRequired within parentRecipient details for the estimate
sentTo (allOf 1)ModelAll variants applyExpand Delete Event — request body — body
termsNotesstringOptionalTerms and conditions for the estimate, supports HTML markup
titlestringOptionalTitle
totalJSONRequired within parent
total (anyOf 1)numberAlternativeTotal amount
total (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
totalamountInUSDJSONRequired within parent
totalamountInUSD (anyOf 1)numberAlternativeTotal amount in USD
totalamountInUSD (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
traceIdstringRequired within parentTrace ID for logging and debugging
updatedAtstringRequired within parentTimestamp when last updated
Format: date-time
updatedBystringOptionalUser Id of who last updated

Referenced models: Delete Event — request body — body, Send Estimate — response body — attachments item, Send Estimate — response body — frequency Settings enabled, schedule, Send Estimate — response body — discount / type: percentage, fixed

Delete Event — request body — body
FieldTypePresenceDescription and constraints
$objectRoot
Send Estimate — response body — frequency Settings enabled, schedule
FieldTypePresenceDescription and constraints
$objectRoot
enabledbooleanRequired within parentenabled for the frequency settings
scheduleJSONRequired within parentschedule setting for the estimate
schedule (allOf 1)ModelAll variants applyExpand Get an schedule — response body — schedule

Referenced models: Get an schedule — response body — schedule

SDK function policy ID: gohighlevel.create_invoice_from_estimate. Catalog operation: create-invoice-from-estimate. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.

Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.

Required provider scopes: ["invoices/estimate.write"]

Pinned headers: {"Version": "v3"}

Official provider source

Report an issue with this page

Necessary

Required for sign-in, security, authorization, and remembering your choices.

Always active

Analytics

Helps us understand which product and documentation features are useful.

Performance diagnostics

Uses performance tracing and privacy-masked session replay to diagnose problems.

You can change these choices at any time from Cookie settings.