API — External Inventory

OData v4 API for external vendors to submit inventory data to Business Central — endpoint details, authorization, supported operations, and request examples.

The N24I Ext. Inv. Entry API page allows external vendors and warehouses to submit inventory data to Business Central using the standard OData v4 interface.

🔗 Endpoint

https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{environment}/api/nav24/advancedInventory/v1.0/companies({companyId})/externalInventoryEntries
Parameter Value
Publisher nav24
Group advancedInventory
Version v1.0
Entity externalInventoryEntries
OData Key entryNo

⚡ Supported Operations

Operation HTTP Method Description
Read all entries GET Returns a list of entries
Read single entry GET .../({entryNo}) Returns one entry
Add entry POST Creates a new entry
Update entry PATCH .../({entryNo}) Updates an existing entry
Delete entry DELETE .../({entryNo}) Deletes an entry

📋 Fields

Field Type Description
entryNo Integer Entry number — assigned automatically, read-only
vendorNo Code[20] Vendor number (does not need to exist in BC)
vendorName Text[100] Vendor name
itemNo Code[20] Item number (does not need to exist in BC)
itemDescription Text[250] Item description
externalItemNo Code[50] Vendor's external item number
lotNo Code[50] Lot number
palletNo Code[50] Pallet number
quantity Decimal Quantity in vendor's warehouse
Note

Fields vendorNo and itemNo are not validated against BC master data — the vendor may use their own identifiers.

🔑 Authorization

The API requires OAuth2 authorization using Client Credentials (application-to-application).

Required Azure AD permission:

  • Dynamics 365 Business CentralFinancials.ReadWrite.All (application permission)
POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id={clientId}
&client_secret={clientSecret}
&scope=https://api.businesscentral.dynamics.com/.default

💡 Examples

GET — Read all entries

GET .../externalInventoryEntries
Authorization: Bearer {token}
Accept: application/json

POST — Add a new entry

POST .../externalInventoryEntries
Authorization: Bearer {token}
Content-Type: application/json

{
  "vendorNo": "VENDOR-001",
  "itemNo": "ITEM-001",
  "externalItemNo": "EXT-001",
  "lotNo": "LOT-2026-001",
  "palletNo": "PAL-001",
  "quantity": 100
}

The response includes the assigned entryNo and @odata.etag required for subsequent PATCH and DELETE operations.

PATCH — Update quantity

PATCH .../externalInventoryEntries(42)
Authorization: Bearer {token}
Content-Type: application/json
If-Match: {etag}

{
  "quantity": 250
}

DELETE — Remove entry

DELETE .../externalInventoryEntries(42)
Authorization: Bearer {token}
If-Match: {etag}

📝 Technical Notes

  • Fields vendorNo and itemNo are not validated against BC master data — vendors may use their own identifiers.
  • Field entryNo is assigned automatically and is read-only.
  • The If-Match header with the @odata.etag value is required for PATCH and DELETE operations — it prevents concurrent edit conflicts.
  • On POST, fields vendorName and itemDescription are populated automatically if vendorNo / itemNo exists in BC.