# Merchant API - cURL Examples ## Base URL ```bash BASE_URL="http://localhost:8001/api/v1" ``` ## 1. Create Merchant (Draft) ```bash curl -X POST "$BASE_URL/merchants" \ -H "Content-Type: application/json" \ -d '{ "merchant_type": "retail", "parent_merchant_id": "mch_parent_001", "merchant_code": "retail-MUM-001", "merchant_name": "Glamour retail Mumbai", "contact": { "phone": "+919876543210", "email": "contact@glamourretail.com", "address_line1": "123 Main Street", "city": "Mumbai", "state": "Maharashtra", "pincode": "400001", "country": "India" }, "geo_location": { "lat": 19.0760, "lng": 72.8777 }, "status": "draft", "created_by": "admin_001" }' ``` ## 2. View Merchant ```bash curl -X GET "$BASE_URL/merchants/{merchant_id}" ``` ## 3. Update Merchant ```bash curl -X PUT "$BASE_URL/merchants/{merchant_id}" \ -H "Content-Type: application/json" \ -d '{ "merchant_name": "Updated retail Name", "status": "draft" }' ``` ## 4. List Merchants (with projection) ```bash curl -X POST "$BASE_URL/merchants/list" \ -H "Content-Type: application/json" \ -d '{ "merchant_type": "retail", "status": "active", "skip": 0, "limit": 100, "projection_list": ["merchant_id", "merchant_name", "merchant_type", "status"] }' ``` ## 5. Upload KYC ```bash curl -X POST "$BASE_URL/merchants/{merchant_id}/kyc" \ -H "Content-Type: application/json" \ -d '{ "pan_number": "AAPFU0939F", "business_certificate_url": "https://storage.example.com/cert123.pdf" }' ``` ## 6. Update KYC ```bash curl -X PUT "$BASE_URL/merchants/{merchant_id}/kyc" \ -H "Content-Type: application/json" \ -d '{ "gst_number": "27AAPFU0939F1ZV", "bank_account_number": "1234567890123", "bank_ifsc": "HDFC0001234", "cancelled_cheque_url": "https://storage.example.com/cheque123.jpg" }' ``` ## 7. Submit for Verification ```bash curl -X POST "$BASE_URL/merchants/{merchant_id}/submit" ``` ## 8. Approve Merchant ```bash curl -X POST "$BASE_URL/merchants/{merchant_id}/approve" \ -H "Content-Type: application/json" \ -d '{ "approved_by": "admin_001", "reason": "All documents verified successfully" }' ``` ## 9. Reject Merchant ```bash curl -X POST "$BASE_URL/merchants/{merchant_id}/reject" \ -H "Content-Type: application/json" \ -d '{ "rejected_by": "admin_001", "reason": "Incomplete documentation" }' ``` ## 10. Bulk Upload Merchants ```bash curl -X POST "$BASE_URL/merchants/bulk-upload" \ -H "Content-Type: application/json" \ -d '{ "merchants": [ { "merchant_type": "retail", "parent_merchant_id": "mch_parent_001", "merchant_code": "retail-MUM-001", "merchant_name": "retail 1", "contact": { "phone": "+919876543210", "email": "retail1@example.com", "address_line1": "123 Street", "city": "Mumbai", "state": "Maharashtra", "pincode": "400001", "country": "India" }, "geo_location": { "lat": 19.0760, "lng": 72.8777 }, "kyc": { "pan_number": "AAPFU0939F" }, "created_by": "admin_001" }, { "merchant_type": "retail", "parent_merchant_id": "mch_parent_001", "merchant_code": "retail-MUM-002", "merchant_name": "retail 2", "contact": { "phone": "+919876543211", "email": "retail2@example.com", "address_line1": "456 Street", "city": "Mumbai", "state": "Maharashtra", "pincode": "400001", "country": "India" }, "geo_location": { "lat": 19.0760, "lng": 72.8777 }, "kyc": { "pan_number": "BBBFU0939F" }, "created_by": "admin_001" } ], "skip_errors": true }' ``` ## 11. Get Merchant Children ```bash curl -X GET "$BASE_URL/merchants/{merchant_id}/children?status=active&skip=0&limit=100" ``` ## 12. Get Merchant Hierarchy ```bash curl -X GET "$BASE_URL/merchants/{merchant_id}/hierarchy" ``` ## 13. Delete Merchant (Soft Delete) ```bash curl -X DELETE "$BASE_URL/merchants/{merchant_id}" ``` ## Complete Workflow Example ```bash # Step 1: Create merchant MERCHANT_ID=$(curl -s -X POST "$BASE_URL/merchants" \ -H "Content-Type: application/json" \ -d '{ "merchant_type": "retail", "parent_merchant_id": "mch_parent_001", "merchant_code": "WORKFLOW-TEST-001", "merchant_name": "Workflow Test retail", "contact": { "phone": "+919876543210", "email": "workflow@test.com", "address_line1": "123 Test Street", "city": "Mumbai", "state": "Maharashtra", "pincode": "400001", "country": "India" }, "geo_location": { "lat": 19.0760, "lng": 72.8777 }, "status": "draft", "created_by": "admin_001" }' | jq -r '.merchant_id') echo "Created merchant: $MERCHANT_ID" # Step 2: Upload KYC curl -s -X POST "$BASE_URL/merchants/$MERCHANT_ID/kyc" \ -H "Content-Type: application/json" \ -d '{ "pan_number": "AAPFU0939F" }' | jq '.kyc' # Step 3: Submit for verification curl -s -X POST "$BASE_URL/merchants/$MERCHANT_ID/submit" | jq '.status' # Step 4: Approve curl -s -X POST "$BASE_URL/merchants/$MERCHANT_ID/approve" \ -H "Content-Type: application/json" \ -d '{ "approved_by": "admin_001", "reason": "Verified successfully" }' | jq '{merchant_id, status, metadata}' ``` ## Using jq for Pretty Output All examples can be piped through `jq` for formatted JSON output: ```bash curl -X GET "$BASE_URL/merchants/{merchant_id}" | jq '.' ``` ## Error Handling Examples ### Missing Required KYC ```bash # This will fail if PAN is not provided for retail curl -X POST "$BASE_URL/merchants/{merchant_id}/submit" # Response: {"detail": "Missing required KYC field for retail: pan_number"} ``` ### Invalid Status Transition ```bash # This will fail if merchant is not in submitted status curl -X POST "$BASE_URL/merchants/{merchant_id}/approve" # Response: {"detail": "Can only approve merchants in submitted status. Current status: draft"} ``` ### Duplicate Merchant Code ```bash # This will fail if merchant_code already exists curl -X POST "$BASE_URL/merchants" -d '{"merchant_code": "EXISTING-CODE", ...}' # Response: {"detail": "merchant_code already exists within the parent scope"} ```