Summary:
-
To read all entries use GET
-
To read one specific entry use GET(id)
-
To create a new entry use POST + body with (all) properties
-
To update an existing entry use PATCH(id) + eTag + body with properties to update
-
To delete an existing entry use DELETE(id)
Reading data (GET)
Request all entries
Data is retrieved with a GET request where the URL is is combined as follows:
GET
[server]/api/wisefish/base/v1.0/companies([CompanyGUID])/[endpoint]
Response
The data should be read from the value property of the returned object. It will be an array of JSON objects, where each object has all the properties in this particular API page.
{
"@odata.context": "https://containers.wisefish.com/BC/api/wisefish/base/v1.0/$metadata#companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/items",
"value": [the array of objects]
}
Example:
To get all the items exposed by the API from the environment BC24BjarteyW1CU1rest on the containers.wisefish.com:
https://containers.wisefish.com/BC24BjarteyW1CU1rest/api/wisefish/base/v1.0/companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/items
The data is returned as JSON.
{
"@odata.context": "https://containers.wisefish.com/BC/api/wisefish/base/v1.0/$metadata#companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/items",
"value": [
{
"@odata.etag": "W/\"JzIwOzEwNTMxOTAxNzk1NTEwMjk4MDc4MTswMDsn\"",
"id": "00684ed0-9ea1-ef11-b017-aa2d6f3d6955",
"no": "0900",
"description": "Þorskflök",
"packageDescriptionType": "Trade Item",
"packageDescription": "1 x 10",
"tradeItemType": "Product",
"itemCategoryCode": "FISH-PROD",
"rawMaterialReportingCode": "001",
"inventoryPostingGroup": "FINISHED",
"blocked": false,
"status": " ",
"baseUnitOfMeasure": "KG",
"tradeItemUnitOfMeasure": "BOX",
"palletUnitOfMeasure": "PALLET",
"weightUnitOfMeasure": "KG",
"unitPrice": 7.5,
"priceIncludesTax": false,
"unitCost": 5,
"lastModifiedDateTime": "2025-11-12T17:32:20.743Z"
},
{
"@odata.etag": "W/\"JzIwOzE0MTEzNjQxMTU1MTg5MDQ5MTAzMTswMDsn\"",
"id": "234fffc2-dd11-ef11-9f8b-6045bde9cc61",
"no": "1000",
"description": "Bicycle",
"packageDescriptionType": " ",
"packageDescription": "",
"tradeItemType": " ",
"itemCategoryCode": "",
"rawMaterialReportingCode": "",
"inventoryPostingGroup": "FINISHED",
"blocked": false,
"status": " ",
"baseUnitOfMeasure": "PCS",
"tradeItemUnitOfMeasure": "",
"palletUnitOfMeasure": "",
"weightUnitOfMeasure": "",
"unitPrice": 4000,
"priceIncludesTax": false,
"unitCost": 350.594,
"lastModifiedDateTime": "2025-07-21T11:19:01.34Z"
}
]
}
Request a single entry
To request a specific entry, the user must know the record ID of that particular entry. The documentation for each endpoint should say which field is used as a record id.
In this case, it can be read from the property id when entries are retrieved with GET.
GET
[server]/api/wisefish/base/v1.0/companies([CompanyGUID])/[endpoint]([recordID])
Response
The response will be a JSON object, with all the properties of this particular API object, looking like this
{
"@odata.context": "https://containers.wisefish.com/BC/api/wisefish/base/v1.0/$metadata#companies([companyId])/[endpoint]/$entity",
"@odata.etag": [etag],
"id" : the requested id,
property 1,
property 2,
etc....
}
Example:
To get the item with system ID = 00684ed0-9ea1-ef11-b017-aa2d6f3d6955:
https://containers.wisefish.com/BC24BjarteyW1CU1rest/api/wisefish/base/v1.0/companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/items(00684ed0-9ea1-ef11-b017-aa2d6f3d6955)
Response:
{
"@odata.context": "https://containers.wisefish.com/BC/api/wisefish/base/v1.0/$metadata#companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/items/$entity",
"@odata.etag": "W/\"JzIwOzEwNTMxOTAxNzk1NTEwMjk4MDc4MTswMDsn\"",
"id": "00684ed0-9ea1-ef11-b017-aa2d6f3d6955",
"no": "0900",
"description": "Þorskflök",
"packageDescriptionType": "Trade Item",
"packageDescription": "1 x 10",
"tradeItemType": "Product",
"itemCategoryCode": "FISH-PROD",
"rawMaterialReportingCode": "001",
"inventoryPostingGroup": "FINISHED",
"blocked": false,
"status": " ",
"baseUnitOfMeasure": "KG",
"tradeItemUnitOfMeasure": "BOX",
"palletUnitOfMeasure": "PALLET",
"weightUnitOfMeasure": "KG",
"unitPrice": 7.5,
"priceIncludesTax": false,
"unitCost": 5,
"lastModifiedDateTime": "2025-11-12T17:32:20.743Z"
}
Show child entries
For some APIs there are child entries. To make them visible in the response, the expand URL parameter must be used:
GET
[server]/api/wisefish/wiFiEP/v1.0/companies([CompanyGUID])/[endpoint]([recordID])?$expand=[detailsAPI]
See example:
Navigation (Get child entries of a specific entry)
When there are child entries on an endpoint, the childentry endpoint can also be called directly by adding it to the URL:
GET
[server]/api/wisefish/base/v1.0/companies([CompanyGUID])/[endpoint]([id])/[childEntryEndpoint]
This will only return the child entries array for that particular parent, but not show the properties of the parent.
Example:
GET
https://containers.wisefish.com/BC24BjarteyW1CU1rest/api/wisefish/base/v1.0/
companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/itemDetails(00684ed0-9ea1-ef11-b017-aa2d6f3d6955)/itemUnits
Response:
Filtering
A filter is added with $filter. An example of how a filter is added:
GET
[server]/api/wisefish/base/v1.0/companies([CompanyGUID])/[endpoint]?$filter=[property] eq '[value]'
Example:
GET
https://containers.wisefish.com/BC24BjarteyW1CU1rest/api/wisefish/base/v1.0/
companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/itemUnitOfMeasures?$filter=itemNo eq '70070'
Supported OData Query Parameters
|
Parameter |
Description |
Example |
|---|---|---|
|
|
Filtering the result rows
|
|
|
|
Limit returned fields (huge performance win) |
|
|
|
Expand related entities |
|
|
|
Sort results |
|
|
|
Limit number of records |
|
|
|
|
|
|
|
Return total count. Response will include:
|
|
|
|
Server-driven paging (best for large result sets) You don’t set this manually — BC returns it: "@odata.nextLink": "...?$skiptoken=abc123" Then you call the ✅ This is the recommended way to page in BC. |
|
Modifying data
Create an entry (POST)
Data is created with a POST request where the body contains the properties for all entry fields to be populated:
POST
[server]/api/wisefish/wiFiEP/v1.0/companies([CompanyGUID])/[endpoint]
Body:
{[The input is a JSON object of the format the API expects. The names of the properties must match exactly the API.]}
Response
The response of a create request is a JSON object will all the properties of the object that was created. Same as when getting one entry.
Update an entry (PATCH)
Modifying entries with API requires the use of eTags. This is done to make sure user has the latest update of the data.
The updating process must be like this:
-
Use GET to find out the current etag for the entry to updated: This is kept in property
@odata.etagwhich is the second one on the response object. -
Use a PATCH request and
-
set the value of
@odata.etagon the key If-Match on the header -
set the properties to be updated in the body
-
GET the id and etag
{
"@odata.etag": "W/\"JzExOzE7MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA=\"", // Example of an etag
"id": "0c9e...", // Example of an id
"property1": "",
"property2": "",
...
}
PATCH
[server]/api/wisefish/wiFiEP/v1.0/companies([CompanyGUID])/[endpoint]([recordID])
If-Match: W/"JzExOzE7MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA="
Body:
{
properties to update
}
Response
The response of a patch request is a JSON object will all the properties of the object, not only the updated ones.
If PATCH fails, it is because one of the below:
✔ missing ETag
✔ invalid ETag
✔ trying to update a non-editable field
Note: POST can sometimes be used to update an existing entry, if the primary key is given, but this is not correct usage and not recommended because empty properties in the body will erase the current values of the entry.
Delete an entry (DELETE)
To delete an entry, use the record ID of the and do a DELETE request:
DELETE
[server]/api/wisefish/wiFiEP/v1.0/companies([CompanyGUID])/[endpoint]([recordID])
Response
This request does not have a response object or text. If it runs without error, the delete was a success.
Example:
To delete the item with record ID = 00684ed0-9ea1-ef11-b017-aa2d6f3d6955:
DELETE
https://containers.wisefish.com/BC24BjarteyW1CU1rest/api/wisefish/base/v1.0/companies(cf9f7b85-dd11-ef11-9f8b-6045bde9cc61)/items(00684ed0-9ea1-ef11-b017-aa2d6f3d6955)
Using procedures
For some endpoints, procedures have been added that are “service enabled”. This means that an additional endpoint will exist on the following URL format:
[server]/api/wisefish/base/v1.0/companies([CompanyGUID])/[endpoint]([recordID])/Microsoft.NAV.[procedureName]
-
These endpoints are only used with POST requests.
-
If the procedure has defined parameters, all of them must exist in the body.
-
They can be blank, if the procedure allows blank values.
Request
Request is like this:
POST
https:/[server]/api/wisefish/base/v1.0/companies([CompanyGUID])/[endpoint]([recordID])/Microsoft.NAV.[procedureName]
Body:
{
...the parameters in the body, if the procedure has parameters
}
Response
If the request is successful, the response is 200 OK and could also possibly contain something in the value property:
{
"@odata.context": "https://api.businesscentral.dynamics.com/v2.0/b33a6a3b-244c-4295-84b3-0ad90823c736/AB_Test_191125/api/wisefish/base/v1.0/$metadata#Edm.String",
"value": "Agreement was released successfully"
}