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 Central→Financials.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
vendorNoanditemNoare not validated against BC master data — vendors may use their own identifiers. - Field
entryNois assigned automatically and is read-only. - The
If-Matchheader with the@odata.etagvalue is required for PATCH and DELETE operations — it prevents concurrent edit conflicts. - On POST, fields
vendorNameanditemDescriptionare populated automatically ifvendorNo/itemNoexists in BC.