API — Zewnętrzne zapasy (External Inventory)
Interfejs OData v4 dla zewnętrznych dostawców do przesyłania danych o zapasach do Business Central — endpoint, autoryzacja i przykłady zapytań.
Strona API N24I Ext. Inv. Entry API umożliwia zewnętrznym dostawcom i magazynom przesyłanie danych o stanach magazynowych do Business Central za pomocą standardowego interfejsu OData v4.
🔗 Endpoint
https://api.businesscentral.dynamics.com/v2.0/{tenantId}/{środowisko}/api/nav24/advancedInventory/v1.0/companies({companyId})/externalInventoryEntries
| Parametr | Wartość |
|---|---|
| Publisher | nav24 |
| Group | advancedInventory |
| Version | v1.0 |
| Entity | externalInventoryEntries |
| Klucz OData | entryNo |
⚡ Obsługiwane operacje
| Operacja | Metoda HTTP | Opis |
|---|---|---|
| Odczyt wszystkich wpisów | GET |
Zwraca listę wpisów |
| Odczyt pojedynczego wpisu | GET .../({entryNo}) |
Zwraca jeden wpis |
| Dodanie wpisu | POST |
Tworzy nowy wpis |
| Aktualizacja wpisu | PATCH .../({entryNo}) |
Aktualizuje istniejący wpis |
| Usunięcie wpisu | DELETE .../({entryNo}) |
Usuwa wpis |
🔑 Autoryzacja
API wymaga autoryzacji OAuth2 z typem Client Credentials (aplikacja do aplikacji).
Wymagane uprawnienie Azure AD:
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
💡 Przykłady
GET — odczyt wszystkich wpisów
GET .../externalInventoryEntries
Authorization: Bearer {token}
Accept: application/json
POST — dodanie nowego wpisu
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
}
Odpowiedź zawiera nadany entryNo oraz @odata.etag wymagany przy kolejnych operacjach PATCH i DELETE.
PATCH — aktualizacja ilości
PATCH .../externalInventoryEntries(42)
Authorization: Bearer {token}
Content-Type: application/json
If-Match: {etag}
{
"quantity": 250
}
DELETE — usunięcie wpisu
DELETE .../externalInventoryEntries(42)
Authorization: Bearer {token}
If-Match: {etag}
📝 Uwagi techniczne
- Pole
vendorNoiitemNonie są walidowane względem słowników BC — dostawca może podać własne identyfikatory. - Pole
entryNojest nadawane automatycznie i jest tylko do odczytu. - Nagłówek
If-Matchz wartością@odata.etagjest wymagany przy operacjach PATCH i DELETE — zabezpiecza przed równoczesną edycją. - Przy operacji POST pola
vendorNameiitemDescriptionsą uzupełniane automatycznie, jeślivendorNo/itemNoistnieje w BC.