Log in Start free
Middleware & Connector

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.

Scoped API keys Real-time sync Zero workflow change Legacy-system ready
IdealPos
Oracle ERP
Pood Sync
Odoo ERP
PWA / Legacy

Live two-way sync โ€” products, stock & orders โ€” no rip-and-replace.

Built to sit in front of the systems you already run

IdealPos Oracle ERP Odoo ERP Legacy on-premise POS PWA storefronts Any CRM via REST
Built for SMB retail

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.

How the Connector works

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.

Developer API reference

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.

POST /api/dev/token Authentication

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).

Request
curl -X POST https://yourdomain.com/api/dev/token \
  -H "X-Api-Key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxx"
Response 200
{
  "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.

SHAPE Every response Errors & response shape

Every response โ€” success or failure โ€” is shaped the same way:

{ "success": false, "message": "This key doesn't have the 'items:write' scope.", "data": null }
StatusMeaning
200Request processed. Check success โ€” a validation failure (e.g. missing field) still returns 200 with success: false.
401Missing/invalid API key, or an expired/invalid Bearer token.
403Valid token, but this key's scopes don't cover the action.
GET /api/dev/products items:read

Paginated, max 25 per page regardless of what you request.

ParamRequiredNotes
pageNoDefault 1
searchNoFilter by item name
Response 200
{
  "success": true,
  "data": {
    "items": [
      { "itemId": "b1f2...", "itemName": "Chicken Biryani", "mrp": 250, "sellingPrice": 220, "quantity": 50, "hasVariants": false }
    ],
    "totalCount": 42
  }
}
POST /api/dev/products items:write

Create or update a product. Include itemId to update; omit (or send an empty GUID) to create.

FieldRequiredType
itemNameYesstring
mrpYesdecimal
priceYesdecimal
sellingPriceYesdecimal
quantityYesint
itemCategoryIdNoguid
imageUrlNostring
GET /api/dev/categories items:read

Returns every category for your store (not paginated โ€” stores typically have a handful).

POST /api/dev/categories items:write
FieldRequired
categoryNameYes
itemCategoryIdNo โ€” omit to create, include to update
GET /api/dev/orders orders:read
ParamRequired
statusNo โ€” filter e.g. Placed, Completed
POST /api/dev/orders orders:write

Creates an order directly โ€” the storefront's usual email-verification step is skipped since the API key call is already authenticated.

FieldRequired
customerNameYes
emailYes
phoneNumberYes
pinCodeYes
deliveryAddressConditional โ€” required unless orderType is DineIn/TakeAway
orderTypeNo โ€” Delivery, DineIn, TakeAway, TableOrder, TokenQueue
cartLinesYes โ€” array of {itemId, variantId, quantity}
GET /api/dev/offers discounts:read

Active discounts/promo codes configured for your store.

GET /api/dev/stock items:read

Same data as Products (quantity is one of the returned fields), paginated identically.

POST /api/dev/stock/adjust inventory:write
FieldRequired
itemIdYes
adjustmentQtyYes โ€” positive to add, negative to deduct
reasonNo โ€” e.g. Restock, Correction, Sold, Damage
Try it now

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.

Pood API Console
Request
The base URL of your Pood-connected store.
Response
// Response will appear here โ€” including status, headers summary, and the exact { success, message, data } payload.
This console calls your real store domain directly from your browser. If the domain doesn't send CORS headers allowing this page's origin, the request will fail client-side โ€” that's expected browser behavior, not a Pood API error. Point it at your own store's domain to test for real.
Frequently asked

Answers for humans and AI assistants alike

Can Pood sync with my existing POS or ERP without changing my workflow?

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.

Which POS and ERP systems does Pood's Connector support?

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.

How does authentication work for the Pood Developer API?

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.

What does a Pood API error response look like?

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.