B2B enquiry operations with 3-layer architecture: API Gateway -> Order Management Orchestrator -> Core Microservices
View Postman DocumentationAdd, update, or remove items from the enquiry basket (5 steps)
{
"operations": [
{ "op": "SET", "product_id": "prod_123", "variant_id": "var_456", "quantity": 100, "notes": "Bulk order" },
{ "op": "ADD", "product_id": "prod_789", "quantity": 50 },
{ "op": "UPDATE", "item_id": "item_001", "quantity": 200 },
{ "op": "DELETE", "item_id": "item_002" }
]
}
POST /enquiry-basket/items
POST /enquiry-basket/items
Orchestrates 5 service calls
POST /api/enquiry-baskets/find-or-create
Get existing basket or create new one
POST /api/products/search
Validate products exist and are available for enquiry
POST /api/enquiry-baskets/:basket_id/items/batch
Apply all item operations
POST /api/enquiry-baskets/:basket_id/compute
Calculate estimated totals
POST /api/caching/set
Key: enquiry_basket:{basket_id}:computed | TTL: 1800s
{
"success": true,
"operations_applied": 4,
"results": [
{ "operation": "SET", "status": "SUCCESS", "action_taken": "ADDED", "item": {...} },
{ "operation": "ADD", "status": "SUCCESS", "item": {...} },
{ "operation": "UPDATE", "status": "SUCCESS", "item_id": "item_001" },
{ "operation": "DELETE", "status": "SUCCESS", "item_id": "item_002" }
],
"basket": {
"basket_id": "enq_basket_123",
"items": [...],
"item_count": 3,
"total_quantity": 350,
"estimated_total": 25000,
"currency": "INR"
}
}
Retrieve the current enquiry basket with computed values (5 steps)
?compute=true
(optional, default: true)
GET /enquiry-basket
GET /enquiry-basket
Orchestrates 5 service calls
GET /api/enquiry-baskets/:basket_id
Get customer's active basket
POST /api/caching/get
Check for cached basket (if compute=false)
POST /api/products/search
Fetch current product info, prices, images
POST /api/enquiry-baskets/:basket_id/compute
Calculate with current prices
POST /api/caching/set
Key: enquiry_basket:{basket_id}:computed | TTL: 1800s
{
"success": true,
"basket": {
"basket_id": "enq_basket_123",
"customer_id": "cust_456",
"status": "ACTIVE",
"items": [
{
"item_id": "item_001",
"product_id": "prod_123",
"product_name": "Industrial Widget",
"variant_id": "var_456",
"variant_name": "Large",
"quantity": 100,
"unit_price": 150,
"estimated_total": 15000,
"notes": "Bulk order",
"in_stock": true,
"available_quantity": 500
}
],
"summary": {
"item_count": 3,
"total_quantity": 350,
"estimated_subtotal": 45000,
"currency": "INR",
"note": "Final prices subject to quote approval"
},
"created_at": "2025-01-15T10:00:00Z",
"updated_at": "2025-01-15T12:30:00Z"
}
}
Submit basket as formal quote request, notify seller (6 steps)
{
"contact_info": {
"name": "John Doe",
"email": "john@company.com",
"phone": "+91-9876543210",
"company": "ABC Industries"
},
"delivery_address": { "address_id": "addr_123" },
"expected_delivery_date": "2025-02-15",
"notes": "Urgent requirement. Please provide best price.",
"attachments": [
{ "file_id": "file_001", "name": "specifications.pdf" }
]
}
POST /enquiry-basket/submit
POST /enquiry-basket/submit
Orchestrates 6 service calls (with parallel notifications)
GET /api/enquiry-baskets/:basket_id
Validate basket exists and has items
POST /api/enquiries
Create formal enquiry record
PUT /api/enquiry-baskets/:basket_id/status
Mark basket as SUBMITTED
DELETE /api/caching/delete
Clear basket cache
POST /api/notifications/send
Notify seller
POST /api/notifications/send
Confirm to customer
POST /api/events/publish
ENQUIRY_SUBMITTED
{
"success": true,
"enquiry": {
"enquiry_id": "enq_789",
"enquiry_number": "ENQ-2025-0001",
"status": "SUBMITTED",
"items_count": 3,
"total_quantity": 350,
"estimated_total": 45000,
"currency": "INR",
"expected_response_by": "2025-01-18T10:00:00Z",
"created_at": "2025-01-15T14:30:00Z"
},
"message": "Your enquiry has been submitted successfully. You will receive a quote within 3 business days."
}
Delete/clear the entire enquiry basket (2 steps)
DELETE /enquiry-basket
DELETE /enquiry-basket
Orchestrates 2 sequential calls
DELETE /api/enquiry-baskets/:basket_id
Soft delete the basket
DELETE /api/caching/delete
Clear basket cache
{
"success": true,
"message": "Enquiry basket deleted successfully",
"basket_id": "enq_basket_123"
}
List all enquiries with filtering and pagination (2 steps)
{
"filters": {
"status": ["SUBMITTED", "QUOTED", "ACCEPTED"],
"date_from": "2025-01-01",
"date_to": "2025-01-31",
"search": "widget"
},
"pagination": { "page": 1, "limit": 20 },
"sort": { "field": "created_at", "order": "DESC" }
}
POST /enquiries
POST /enquiries
POST /api/enquiries/search
Search with filters, pagination
POST /api/enquiries/stats
Get counts by status
{
"success": true,
"enquiries": [
{
"enquiry_id": "enq_789",
"enquiry_number": "ENQ-2025-0001",
"status": "QUOTED",
"items_count": 3,
"total_quantity": 350,
"estimated_total": 45000,
"quoted_total": 42000,
"currency": "INR",
"invoices_count": 1,
"created_at": "2025-01-15T14:30:00Z"
}
],
"pagination": { "page": 1, "limit": 20, "total_count": 45, "total_pages": 3 },
"stats": { "SUBMITTED": 5, "QUOTED": 12, "ACCEPTED": 20, "REJECTED": 3, "EXPIRED": 5 }
}
Get detailed information about a specific enquiry (3 steps)
GET /enquiries/:enquiry_id
GET /enquiries/:enquiry_id
GET /api/enquiries/:enquiry_id
Get enquiry with all items
GET /api/enquiries/:enquiry_id/invoices/summary
Returns count and status of invoices
GET /api/enquiries/:enquiry_id/activity
Status change history
{
"success": true,
"enquiry": {
"enquiry_id": "enq_789",
"enquiry_number": "ENQ-2025-0001",
"status": "QUOTED",
"customer": { "customer_id": "cust_456", "name": "John Doe", "company": "ABC Industries" },
"items": [
{ "product_name": "Industrial Widget", "quantity": 100, "requested_unit_price": 150, "quoted_unit_price": 140 }
],
"summary": { "estimated_total": 45000, "quoted_total": 42000, "discount_percentage": 6.67, "currency": "INR" },
"invoices": { "count": 1, "latest_status": "SENT" },
"activity": [
{ "action": "SUBMITTED", "timestamp": "2025-01-15T14:30:00Z" },
{ "action": "QUOTED", "timestamp": "2025-01-16T10:00:00Z" }
],
"valid_until": "2025-01-23T10:00:00Z"
}
}
List all invoices/quotes for an enquiry (2 steps)
POST /enquiries/:enquiry_id/invoices
POST /enquiries/:enquiry_id/invoices
GET /api/enquiries/:enquiry_id
Validate customer access
POST /api/enquiries/:enquiry_id/invoices/search
Search invoices with pagination
{
"success": true,
"enquiry_id": "enq_789",
"enquiry_number": "ENQ-2025-0001",
"invoices": [
{
"invoice_id": "inv_001",
"invoice_number": "QUO-2025-0001",
"type": "QUOTATION",
"status": "SENT",
"total_amount": 42000,
"currency": "INR",
"valid_until": "2025-01-23T10:00:00Z",
"created_at": "2025-01-16T10:00:00Z",
"pdf_url": "https://..."
}
],
"pagination": { "page": 1, "limit": 10, "total_count": 1, "total_pages": 1 }
}
Get detailed invoice/quotation for an enquiry (3 steps)
GET /enquiries/:enquiry_id/invoices/:invoice_id
GET /enquiries/:enquiry_id/invoices/:invoice_id
GET /api/enquiries/:enquiry_id
Validate customer access
GET /api/enquiries/:enquiry_id/invoices/:invoice_id
Get full invoice with line items
PUT /api/enquiries/:enquiry_id/invoices/:invoice_id/viewed
Update status to VIEWED (if first view)
{
"success": true,
"invoice": {
"invoice_id": "inv_001",
"invoice_number": "QUO-2025-0001",
"type": "QUOTATION",
"status": "VIEWED",
"enquiry": { "enquiry_id": "enq_789", "enquiry_number": "ENQ-2025-0001" },
"customer": { "name": "John Doe", "company": "ABC Industries" },
"seller": { "store_name": "Industrial Supplies Co.", "email": "sales@industrial.com" },
"items": [
{ "product_name": "Industrial Widget", "quantity": 100, "unit_price": 140, "total": 14000 }
],
"summary": { "subtotal": 42000, "discount": 3000, "tax": 7560, "grand_total": 46560, "currency": "INR" },
"terms": ["Payment: 50% advance, 50% on delivery", "Delivery: Within 7 business days"],
"valid_until": "2025-01-23T10:00:00Z",
"pdf_url": "https://...",
"actions": { "can_accept": true, "can_reject": true, "can_negotiate": true }
}
}
Baskets, enquiries, invoices, quotes
Product validation, details
Stock availability checks
Customer addresses
Email/SMS notifications
Redis basket caching
Event publishing
Orchestration layer
Enquiry Module - Orchestra Internal API Mapping | 8 APIs | 28 Total Steps