Skip to main content
Creates one AP bill (APBILL) in Sage Intacct from direct input: a vendor ID and one or more lines. Display name follows the registry name. Off by default. This tool writes to the customer’s ERP; put it after any human review step. For bills raised against a purchase order, use sage_intacct_create_bill_by_po.

Authentication and enablement

Requires a workspace Sage Intacct integration. company_id, user_id, and user_password are injected and not shown as per-run inputs. With several Intacct connections in one workspace, wrap the tool as a configured tool bound to the right connection; unbound, it uses the first active one.

Inputs

  • vendor_id (required) — the Intacct vendor ID (upper-cased before sending). The tool does not resolve names; look the vendor up first.
  • line_items (required) — one or more lines, each with amount and optionally gl_account_no, description, location_id, department_id. Pass "none" for location_id or department_id to send no such dimension.
  • bill_date — WHENCREATED, YYYY-MM-DD or MM/DD/YYYY. Default: today.
  • due_date — WHENDUE. Some companies require it.
  • when_posted — the GL posting date (WHENPOSTED), to post into a chosen accounting period. When omitted, Intacct applies its own default.
  • record_id — the bill number (RECORDID), e.g. the vendor’s invoice number. When omitted, a unique VI<MMDDYY><unix seconds> number is generated.
  • custom_fields — header custom fields as [{field_id, value}]. field_id is the field’s ID (integration name) on APBILL, not its label: letters, digits and underscore, starting with a letter. Blank values are not sent.
  • description, currency — optional bill-level values.
  • entity_id — see Entity scoping below.
  • strict — configured-tool binding only (hidden from the model). See Defaults.

Defaults

Without strict, a line that omits a value gets GL account 60310, department 300, and location 100 (or entity_id when set). These are real postings: a missing account books the amount to 60310. With strict bound to true, none of the three defaults apply, a line without gl_account_no rejects the whole bill before anything is sent, and a line’s location comes only from location_id or entity_id.

Entity scoping

In a multi-entity company, Intacct decides where a bill belongs from the entity the API session logs into. Set entity_id to post the bill into that entity (lines without location_id then use it as their location). Leave it empty to post at the top level.

Output

A confirmation with the vendor, total and Intacct record number, plus structured vendor_id, bill_number (the RECORDID sent), bill_date, when_posted (as sent), record_no, total_amount and entity_id.

Limits and side effects

  • Creates a record in the customer’s Sage Intacct company. It does not check for an existing bill with the same number; use sage_intacct_get_bills first when duplicates matter.
  • No business retry: a rejected bill (for example a closed period) is returned as an error for the agent to handle.
  • Only header custom fields; line-level custom fields and other line dimensions (class, project) are not sent.

Expected errors

  • Integration credentials missing.
  • vendor_id or line_items missing.
  • A date not in YYYY-MM-DD or MM/DD/YYYY (bill_date, due_date, when_posted).
  • Invalid, duplicate or standard-field custom_fields ids.
  • Strict mode: lines without gl_account_no (the message lists them).
  • Sage Intacct API errors, e.g. an unknown vendor or account, a required due date, a closed period, or a custom field the company does not define.