Inventories
The Inventory API enables retrieval of inventory items, combos, and categories.
Note: All requests require an
X-API-Key
header with your API key.
1. Get Categories
Service Call: InventoryService.GetCategories
Retrieve all active categories for a store. Each category includes items and combos.
Examples
- Java
- Python
- .NET
- PHP
import com.kodypay.grpc.ordering.v1.*;
import io.grpc.ManagedChannelBuilder;
import io.grpc.Metadata;
import static io.grpc.stub.MetadataUtils.newAttachHeadersInterceptor;
public class GetCategoriesExample {
public static void main(String[] args) {
Metadata metadata = new Metadata();
metadata.put(Metadata.Key.of("X-API-Key", Metadata.ASCII_STRING_MARSHALLER), "API_KEY");
var channel = ManagedChannelBuilder.forAddress("grpc-staging.kodypay.com", 443)
.useTransportSecurity().build();
var client = InventoryServiceGrpc.newBlockingStub(channel)
.withInterceptors(newAttachHeadersInterceptor(metadata));
GetCategoriesRequest request = GetCategoriesRequest.newBuilder()
.setStoreId("STORE_123")
.build();
var response = client.getCategories(request);
response.getCategoriesList().forEach(category -> {
System.out.println("Category: " + category.getName());
category.getItemsList().forEach(itemOrCombo -> {
if (itemOrCombo.hasItem()) {
InventoryItem item = itemOrCombo.getItem();
System.out.println(" Item: " + item.getName() + " - " + item.getGrossPrice());
} else if (itemOrCombo.hasCombo()) {
Combo combo = itemOrCombo.getCombo();
System.out.println(" Combo: " + combo.getName() + " - " + combo.getGrossPrice());
}
});
});
}
}
import grpc
import kody_clientsdk_python.ordering.v1.inventory_pb2 as kody_model
import kody_clientsdk_python.ordering.v1.inventory_pb2_grpc as kody_client
def get_categories():
address = "grpc-staging.kodypay.com"
store_id = "STORE_123"
api_key = "API_KEY"
with grpc.secure_channel(address, grpc.ssl_channel_credentials()) as channel:
client = kody_client.InventoryServiceStub(channel)
request = kody_model.GetCategoriesRequest(store_id=store_id)
response = client.GetCategories(request, metadata=[("x-api-key", api_key)])
for category in response.categories:
print(f"Category: {category.name}")
for item_or_combo in category.items:
if item_or_combo.HasField('item'):
item = item_or_combo.item
print(f" Item: {item.name} - {item.gross_price}")
elif item_or_combo.HasField('combo'):
combo = item_or_combo.combo
print(f" Combo: {combo.name} - {combo.gross_price}")
if __name__ == "__main__":
get_categories()
var client = new InventoryService.InventoryServiceClient(channel);
var request = new GetCategoriesRequest { StoreId = "STORE_123" };
var response = client.GetCategories(request, new Metadata { { "X-API-Key", "API_KEY" } });
foreach (var category in response.Categories) {
Console.WriteLine($"Category: {category.Name}");
foreach (var itemOrCombo in category.Items) {
if (itemOrCombo.Item != null) {
var item = itemOrCombo.Item;
Console.WriteLine($" Item: {item.Name} - {item.GrossPrice}");
}
else if (itemOrCombo.Combo != null) {
var combo = itemOrCombo.Combo;
Console.WriteLine($" Combo: {combo.Name} - {combo.GrossPrice}");
}
}
}
use Com\Kodypay\Grpc\Ordering\V1\InventoryServiceClient;
use Grpc\ChannelCredentials;
$client = new InventoryServiceClient('grpc-staging.kodypay.com:443', [
'credentials' => ChannelCredentials::createSsl()
]);
$request = new \Com\Kodypay\Grpc\Ordering\V1\GetCategoriesRequest();
$request->setStoreId('STORE_123');
list($response, $status) = $client->GetCategories($request, ['x-api-key' => ['API_KEY']])->wait();
foreach ($response->getCategories() as $category) {
echo "Category: " . $category->getName() . PHP_EOL;
foreach ($category->getItems() as $itemOrCombo) {
if ($itemOrCombo->hasItem()) {
$item = $itemOrCombo->getItem();
echo " Item: " . $item->getName() . " - " . $item->getGrossPrice() . PHP_EOL;
} elseif ($itemOrCombo->hasCombo()) {
$combo = $itemOrCombo->getCombo();
echo " Combo: " . $combo->getName() . " - " . $combo->getGrossPrice() . PHP_EOL;
}
}
}
2. Get Inventory
Service Call: InventoryService.GetInventory
Retrieve full inventory or filter items by category.
Examples
- Java
- Python
- .NET
- PHP
GetInventoryRequest request = GetInventoryRequest.newBuilder()
.setStoreId("STORE_123")
.setCategoryId("CATEGORY_456") // Optional filter
.build();
var response = client.getInventory(request);
response.getItemsList().forEach(itemOrCombo -> {
if (itemOrCombo.hasItem()) {
InventoryItem item = itemOrCombo.getItem();
System.out.println("Item: " + item.getName());
} else {
Combo combo = itemOrCombo.getCombo();
System.out.println("Combo: " + combo.getName());
}
});
request = kody_model.GetInventoryRequest(
store_id="STORE_123",
category_id="CATEGORY_456" # Optional
)
response = client.GetInventory(request, metadata=[("x-api-key", api_key)])
for item_or_combo in response.items:
if item_or_combo.HasField('item'):
print(f"Item: {item_or_combo.item.name}")
else:
print(f"Combo: {item_or_combo.combo.name}")
var request = new GetInventoryRequest {
StoreId = "STORE_123",
CategoryId = "CATEGORY_456" // Optional
};
var response = client.GetInventory(request, new Metadata { { "X-API-Key", "API_KEY" } });
foreach (var itemOrCombo in response.Items) {
if (itemOrCombo.Item != null) {
Console.WriteLine($"Item: {itemOrCombo.Item.Name}");
} else {
Console.WriteLine($"Combo: {itemOrCombo.Combo.Name}");
}
}
$request = new \Com\Kodypay\Grpc\Ordering\V1\GetInventoryRequest();
$request->setStoreId('STORE_123');
$request->setCategoryId('CATEGORY_456'); // Optional
list($response, $status) = $client->GetInventory($request, $metadata)->wait();
foreach ($response->getItems() as $itemOrCombo) {
if ($itemOrCombo->hasItem()) {
echo "Item: " . $itemOrCombo->getItem()->getName() . PHP_EOL;
} else {
echo "Combo: " . $itemOrCombo->getCombo()->getName() . PHP_EOL;
}
}
Field Notes:
- gross_price: String formatted as "0.00" (e.g., "9.99"). A value of "0.00" indicates a free item.
- integration_id: Custom identifier for third-party system integration.
- tags: User-defined labels (e.g., "Vegetarian") with no enforced structure.
- Categories only include active items and combos in responses.