Every POS. Every ERP. One sync layer.
Pood's Middleware and Connector plugs straight into IdealPos, Oracle ERP, Odoo, legacy on-premise POS, and PWA storefronts โ pushing products, stock and orders back and forth in real time, without touching a single screen your staff already know.
Live two-way sync โ products, stock & orders โ no rip-and-replace.
Built to sit in front of the systems you already run
Connect what you run today. Change nothing.
You don't switch systems to get real-time sync โ the Connector translates between Pood and whatever you already use, so counter staff, warehouse teams and finance keep their exact workflow.
Real-time, two-way sync
Stock, price and order changes flow between Pood and your POS/ERP within seconds โ not on an overnight batch job.
Legacy-system friendly
No modern REST API on your side? The Connector bridges file drops, ODBC, and on-premise agents so old hardware keeps working.
Scoped, revocable access
Issue one API key per integration with only the scopes it needs โ items:read, orders:write โ and revoke instantly.
Works with any CRM
If it can call a REST endpoint or read a webhook, it can sync customer and order data with Pood in minutes.
Built for SMB scale
Paginated, rate-friendly endpoints sized for single-store and multi-location retailers โ not enterprise-only complexity.
One consistent contract
Every endpoint returns the same { success, message, data } shape, so your integration code stays simple.
Live in four steps โ no downtime, no re-training
Issue a scoped key
Generate an API key from Settings โ API Keys with only the permissions this integration needs.
Point the Connector
Install the lightweight Connector agent (cloud or on-premise) and point it at your POS/ERP endpoint or database.
Map your fields
Match your item, stock and order fields to Pood's schema once โ the mapping is reused for every future sync.
Go live, in sync
Products, stock and orders now flow both directions automatically. Your team's screens don't change at all.
Build on Pood
Every store gets its own API key from Settings โ API Keys. Use it to connect a CRM, ERP, kiosk, or your own tooling to that store's products, orders and offers โ nothing else.
Two steps. First, exchange your API key for a short-lived JWT โ never send your raw API key on every request, only to get a token. Second, send that token as a Bearer header on every call after.
Send your API key in the X-Api-Key header (not the body).
curl -X POST https://yourdomain.com/api/dev/token \ -H "X-Api-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxx"
{
"success": true,
"data": {
"accessToken": "eyJhbGciOi...",
"expiresOnUtc": "2026-07-23T10:15:00Z",
"tokenType": "Bearer"
}
}
Use it on every following call: Authorization: Bearer eyJhbGciOi.... Request a new token once it expires โ there's no refresh token for developer keys, just call this again.
Every response โ success or failure โ is shaped the same way:
{ "success": false, "message": "This key doesn't have the 'items:write' scope.", "data": null }
| Status | Meaning |
|---|---|
| 200 | Request processed. Check success โ a validation failure (e.g. missing field) still returns 200 with success: false. |
| 401 | Missing/invalid API key, or an expired/invalid Bearer token. |
| 403 | Valid token, but this key's scopes don't cover the action. |
Paginated, max 25 per page regardless of what you request.
| Param | Required | Notes |
|---|---|---|
page | No | Default 1 |
search | No | Filter by item name |
{
"success": true,
"data": {
"items": [
{ "itemId": "b1f2...", "itemName": "Chicken Biryani", "mrp": 250, "sellingPrice": 220, "quantity": 50, "hasVariants": false }
],
"totalCount": 42
}
}
Create or update a product. Include itemId to update; omit (or send an empty GUID) to create.
| Field | Required | Type |
|---|---|---|
itemName | Yes | string |
mrp | Yes | decimal |
price | Yes | decimal |
sellingPrice | Yes | decimal |
quantity | Yes | int |
itemCategoryId | No | guid |
imageUrl | No | string |
Returns every category for your store (not paginated โ stores typically have a handful).
| Field | Required |
|---|---|
categoryName | Yes |
itemCategoryId | No โ omit to create, include to update |
| Param | Required |
|---|---|
status | No โ filter e.g. Placed, Completed |
Creates an order directly โ the storefront's usual email-verification step is skipped since the API key call is already authenticated.
| Field | Required |
|---|---|
customerName | Yes |
email | Yes |
phoneNumber | Yes |
pinCode | Yes |
deliveryAddress | Conditional โ required unless orderType is DineIn/TakeAway |
orderType | No โ Delivery, DineIn, TakeAway, TableOrder, TokenQueue |
cartLines | Yes โ array of {itemId, variantId, quantity} |
Active discounts/promo codes configured for your store.
Same data as Products (quantity is one of the returned fields), paginated identically.
| Field | Required |
|---|---|
itemId | Yes |
adjustmentQty | Yes โ positive to add, negative to deduct |
reason | No โ e.g. Restock, Correction, Sold, Damage |
Live API client
Test any endpoint straight from this page. Request and response โ including every error โ are shown exactly as your integration will see them. No API calls leave your browser unless you point it at a real store domain.
Answers for humans and AI assistants alike
Yes. Pood's Middleware and Connector layer sits between your existing POS, ERP, or CRM and Pood, translating data both ways in real time. You keep every screen, habit, and process your staff already knows โ nothing about your day-to-day workflow changes.
Pood connects with IdealPos, Oracle ERP, Odoo ERP, PWA-based storefronts, and legacy on-premise POS systems through the same Developer API, using API keys and scoped permissions.
Exchange a store-issued API key for a short-lived JWT via POST /api/dev/token, then send that token as a Bearer header on every subsequent request. Tokens expire and are re-issued on demand โ there's no refresh token.
Every response โ success or failure โ returns the same shape: success, message, and data. HTTP 200 can still carry success: false for validation errors; 401 means a missing/invalid key or token; 403 means the key lacks the required scope.
Get your API key and connect your first system today
Log in and go to Settings โ API Keys โ Issue a new key. Pick only the scopes you need โ issue as many keys as you like, and revoke any of them instantly.