API Newsletter
To receive important updates and announcements regarding the API, sign up for our API Newsletter. This is the most effective way to stay informed about the Aligni API and keep your integration working smoothly.
To subscribe to the API Newsletter go to Account Settings > Newsletter Subscription and click the API Updates box.
2026-10-08
- Fix: return the unit at the destination from
inventoryUnitMove.inventoryUnit. When part of a unit is reserved, the move splits it and moves the available quantity as a new unit. The field returned the original unit, left at the source with the reserved quantity. A client that reads that unit frominventoryUnitafter a split should readremainingInventoryUnitinstead. - Add
remainingInventoryUnitfield toinventoryUnitMove. When the move splits a partly reserved unit, it returns the unit left at the source. That unit keeps the ID sent ininventoryUnitId. The field is null when the whole unit moves.
2026-10-07
- Fix: mark the inventory log entries that
inventoryConsumewrites as API-generated. Eventdataand webhooks showed them withapi_generatedfalse. An integration that ignores API-generated changes by checkingapi_generatednow ignores these consumptions too. - Fix: mark the inventory log entries that
inventoryUnitUpdateandvendorManagedInventoryUnitUpdatewrite as API-generated. Eventdataand webhooks showed them withapi_generatednull. An integration that ignores API-generated changes by checkingapi_generatednow ignores these updates too. - Fix: save the
inventoryLogEntry.apiOriginsent tovendorManagedInventoryUnitCreateon the new unit’s inventory log entry, and mark it API-generated. Eventdataand webhooks showed these entries withapi_originempty andapi_generatedfalse. An integration that ignores API-generated changes, by checkingapi_generatedorapi_origin, now ignores these creates too. - Fix: refuse
inventoryUnitCreateinto a vendor-managed zone, with the error “Warehouse zone is vendor managed. Use vendorManagedInventoryUnitCreate instead.” RefuseinventoryUnitUpdateon a vendor-managed unit, with the error “Inventory unit is vendor managed. Use vendorManagedInventoryUnitUpdate instead.” Use the vendor-managed mutations for these units. They takeavailableInStock, which the generic ones can’t set. They have nodisplayUnitId, sovendorManagedInventoryUnitCreatetakescostPerUnitin the part’s unit of measure.
2026-10-06
- Fix: refuse
inventoryUnitMoveandinventoryUnitSplitinto a zone in a warehouse where the account may not manage inventory, or in a deactivated warehouse, with the error “Couldn’t findZonewithid=…”. They looked the zone up across the whole organization. - Fix: return
nullfromBuild.partRevisionwhen the part revision was deleted. It returned a copy of the deleted revision. Some fields on that copy, such asactive, failed the query with a 500 error. - Fix: save the
inventoryLogEntry.apiOriginsent toinventoryUnitMoveon the move’s inventory log entries, and mark them API-generated. Eventdataand webhooks showed them withapi_originnull andapi_generatedfalse. An integration that ignores API-generated changes, by checkingapi_generatedorapi_origin, now ignores these moves too.
2026-10-01
- Fix: refuse
inventoryUnitMoveandinventoryUnitSplitinto a quarantine zone, with the error “Inventory can’t be moved into a quarantine zone.” They moved the stock in with no QCR, so it stayed available to builds. - Fix:
Part.creatoris now nullable. A part can have no creator. The non-null declaration failed any query that selected the field on such a part.
2026-09-28
- Require
view_suppliersto readPurchaseItem.vendor, asPurchaseOrder.vendoralready does. Without it, the field returnsnullwith the error “You do not have permission to perform the selected action.” - Fix: return
nullwith the error “You do not have permission to perform the selected action.” fromQualityControlRecord.buildwhen the account may not view the build, and fromQualityControlRecord.purchaseItemandQuote.purchaseItemswhen it may not view purchases. Viewing a build needs the view builds permission in its warehouse. These fields returned the build and the purchase items in full. - Fix: refuse access to builds for accounts that don’t have access to builds in any warehouse, with the error “You do not have permission to perform the selected action.” It returned the builds that have no warehouse.
- Fix:
Build.warehouseandBuild.partRevisionare now nullable. Deleting a warehouse or a part revision clears it from its finalized builds. The non-null declaration failed any query that selected the field on such a build.
2026-09-24
- Fix: in
qualityControlRecords, list only the QCRs in warehouses where the account may view QCRs.totalCountandmetadata‘stotalRecords,totalQueriesandtotalComplexitynow count the same QCRs. - Fix: refuse
qualityControlRecordsto an account that may not view QCRs in any warehouse, with the error “You do not have permission to perform the selected action.” - Fix: leave QCRs in warehouses where the account may not view QCRs out of
QualityControlRecord.ancestorsandQualityControlRecord.derivedQualityControlRecords, and leave their bins out ofRootCause.assignedQualityDispositionBins. These lists returned them in full. - Fix: return
nullwith the error “You do not have permission to perform the selected action.” fromQualityControlRecord.originQualityControlRecord,QualityControlRecord.originQualityDispositionBinandQualityDispositionBin.derivedQualityControlRecordwhen the QCR is in such a warehouse. They returned it in full. An account permitted in every warehouse sees no change.
2026-09-23
- Fix: return the matching ancestors from
QualityControlRecord.ancestorswhen givenfilters, instead of a 500 error. They come nearest first, the same order as without filters.
2026-09-20
- Require
view_coststo read a cost field. Fifteen fields are now gated:standardCost,standardCostMin,standardCostMult,standardCostCommentandstandardCostCurrencyonPart;costPerUnitandcostPerUnitBaseonInventoryUnitand onDenormalizedInventoryUnit;unitCost,finalizedComputedUnitCost,finalizedEstimatedUnitCostandfinalizedManualUnitCostonBuild;priceonPurchaseItemand onQuote.PurchaseItem.quotenow asks for the same permission, asPart.quotesalready did. Without the permission, these fields returnnullwith the error “You do not have permission to perform the selected action.”Part.standardLeadTimeandBuild.finalizedUnitCostSelectionare not costs and are unchanged. - Refuse a filter that names a gated field to an account without the permission. A filter built its condition without asking, so
parts(filters: [{field: "standardCost", value: {gte: 100}}])answered a cost question the same account could not ask directly. That query now fails with the same error and returns no data.
2026-09-18
- Fix:
Vendor.portalEnablednow returnsfalsefor vendors that had no value stored. The field is non-null, so selecting it on those vendors failed the query. - Fix:
vendorCreateandvendorUpdatenow rejectportalEnabled: nullwith the error “Vendor portal must be true or false.” Anullwas saved and failed every later query that selected the field. - Fix:
partUpdateno longer clearsmanufacturedHerewhen the input leaves it out. The argument carried a default offalse, so any update that omitted it turned the flag off. An omitted field now leaves the stored value alone. - Default
partCreate‘smanufacturedHeretotruewhen the input leaves it out. It wasfalsebefore.trueis the column default and matches the part form, which starts checked. - Record changes to
manufacturedHereinPart.activityRecords. The field was never recorded before, so changes made earlier are not listed.
2026-09-17
- Fix: return
falseforPart.qualityControlRequiredon parts that had no value stored. The field is non-null, so selecting it on those parts failed the query. - Fix: reject
qualityControlRequired: nullinpartCreateandpartUpdate. Anullwas saved and failed every later query that selected the field.partUpdatereturns “Quality Control Required must be true or false.” inerrors.partCreatefails with the top-level error “Validation failed: Quality control required Quality Control Required must be true or false.”, the same way it reports its other validation errors. - Fix: return
falseforPart.hiddenon parts that had no value stored, and include those parts when filtering onhidden. The field is non-null, so selecting it on those parts failed the query. - Fix: reject
hidden: nullinpartCreateandpartUpdate. Anullwas saved, failed every later query that selected the field, and left the part out ofhiddenfilters.partUpdatereturns “Hidden must be true or false.” inerrors.partCreatefails with the top-level error “Validation failed: Hidden Hidden must be true or false.”, the same way it reports its other validation errors.
2026-09-16
- Fix:
PurchaseItem.partandPurchaseItem.unitare now nullable. Unmanaged purchase items have neither, so the non-null declaration failed any query that selected them on a purchase order with an unmanaged item. - Add
useAsUnitsfield toPurchaseItem, the free-text unit of measure of an unmanaged item.
2026-08-26
- Fix: creating a part from an existing part with “Copy Quotes” now copies only the source part’s own quotes. Quotes that belong to a vendor’s RFQ response are no longer copied — an unanswered one produced a quote with no price that the model rejects.
2026-08-25
- Fix: BOM items and quotes copied into a new part (creating a part from an existing part with “Copy Part List” or “Copy Quotes”) now get an
id. They were saved without one, so they were missing fromidfilters and could not be read, updated, or deleted through the API. Records already saved without anidare backfilled.
2026-08-03
- Fix: return
400 Bad Request(was500 Internal Server Error) whenvariablesis sent as a number or a boolean instead of an object, with the message “Integer is not supported format for sending variables.” Arrays already returned400and are unchanged.
2026-07-10
- Fix:
bomItemUpdate/bomItemDeleteandsubpartUpdate/subpartDeletenow reject changes to BOM items whose parent part revision is released, failing with an authorization error. Released revisions are immutable; these mutations previously bypassed that rule, which the web UI and create mutations already enforced.
2026-07-09
- Rename
SubparttoBomItemacross the API. Add theBomItemtype, thePartRevision.bomItemsconnection, thebomItemCreate/bomItemUpdate/bomItemDeletemutations, and theBomItemInput/BomItemUpdateInputinputs.BomItemInputusesparentPartRevisionIdandchildPartRevisionId(replacingpartRevisionIdandsubpartPartRevisionId). - Deprecate the
Subparttype, thePartRevision.subpartsconnection, and thesubpartCreate/subpartUpdate/subpartDeletemutations. They still work but will be removed in a future version after October 20th 2026.; use theBomItemequivalents. - Change
PartRevision.parentBomItemsto returnBomItem(wasSubpart).
2026-07-07
- Add
parentBomItemsconnection toPartRevision, listing the BOM line items in which the revision is used as a component (“where used”). - Add
parentPartRevisionfield toSubpart, resolving the assembly revision that owns the BOM line item. Together these enable traversal from a part revision up to the assemblies that consume it:partRevision → parentBomItems → parentPartRevision → part.
2026-07-02
- Fix: paginated connections now return rows in a stable order (by ascending id) so cursor pagination is deterministic. Previously connections without an explicit sort (such as
inventoryUnits) had an undefined order, which could duplicate or drop edges and end a traversal early when pages were fetched with a delay between requests while records changed.
2026-07-01
- Return
403 Forbidden(was400 Bad Request) when creating, updating, or deleting a subpart on a released part revision. The error message is now “You do not have permission to perform the selected action.” (was “Updates are not allowed on released part revisions.”).
2026-06-06
- Fix:
EngineeringChangeOrder.partRevisionsnow resolves the related part revisions. The field previously returned the join records and errored when selecting fields such asrevisionName.
2026-06-04
Attachment.textis now empty for newly created file attachments. File attachments use an internal storage key that is not exposed; read the file name fromtitle. Existing file attachments are unaffected.
2026-05-07
- Fix:
Attachment.positionis now nullable. The underlying column is nullable, so the field was incorrectly declared non-null and caused query failures for attachments without a position.
2026-05-06
QualityControlRecord.warehouseis now non-null. Quality control records always reference a live warehouse and are destroyed alongside the warehouse.- Deprecate
QualityControlRecord.denormalizedWarehouseandQualityControlRecord.denormalizedWarehouseZone. UsewarehouseandwarehouseZoneinstead. The deprecated fields still resolve to the live records for backward compatibility. Deprecated fields will be removed after October 20th 2026.
2026-04-23
- Add
recordIdfield toPurchaseOrder. - Add
account,approvedAt,billToAddress,committedAt, andtitlefields toPurchaseOrder. PurchaseOrder.activityRecordsnow returns a more complete set of activity records for the purchase order.- Deprecate the
purchasefield onPurchaseOrderandPurchaseItem. ThePurchasetype is being removed from the API after October 20th 2026. - Fix:
partParameterFieldsquery no longer errors for non-option-type fields.optionsresolves to an empty connection for String, Boolean, Number, and SI Number parameter types.
2026-04-08
- Add
standardCostUpdatemutation to update standard cost attributes on a part.
2026-03-16
- Add filter support on association fields for:
Account(attachments)Build(attachments)EngineeringChangeOrder(participants,affectedParts,reasons,partRevisions)EngineeringChangeRequest(participants,affectedParts,reasons)Part(customParameters,images,partAlternatives)PartRevision(customParameters)PartType(children)QualityControlRecord(derivedQualityControlRecords,ancestors,bins)
2025-10-28
- Fix: Change
Subpart.quantitytype toFloat(wasInteger).
2025-10-19
- Fix: Rename
parttypeIdtopartTypeIdonpartUpdatemutation.
2025-10-13
- Deprecate
discussionCommentsfield for several object types. - Add
categoryfield toActivityRecord. - Include comments in the unified
activityRecordsfield. - Implement
activityRecordsupport for:- Build
- Contact
- Customer
- Manufacturer
- Part
- PartRevision
- PurchaseOrder
- Purchase
- QuoteRequest
- Unit
- Vendor