The RFR Seller Portal API provides access to six endpoints for managing products, sales, inventory, and ledger data, plus an API consumption statistics endpoint. All data endpoints support advanced querying with pagination, sorting, and filtering capabilities.
Two ledger endpoints:
/ledger-detail for individual transactions and /ledger-summary for aggregated vendor balances. Document types SHCLL and NEWPR are excluded from ledger data.
Monitor API usage via the
/api-stats endpoint or the "API Consumption" tab. Tracks call counts, response times, and usage trends per endpoint with 90-day retention.
https://nprityok25.execute-api.eu-north-1.amazonaws.com/prod
All API requests require an API key to be included in the request headers. The API key authenticates your requests and ensures secure access to the data.
Header Format:
Your API Key:
Retrieve product catalog information including SKU, name, brand, category, pricing, and vendor details. The database contains approximately 15,739 products.
Query Parameters:
Page number for pagination (default: 1)
Number of records per page (default: 50, max: 500)
Field name to sort by (e.g., "price", "name", "brand", "category", "stock")
Sort direction: "asc" or "desc" (default: asc)
Filter by any field (e.g., brand=NIKE, category=BIKES, vendor_code=S1748)
Response Fields:
sku - Product SKU identifier
name - Product name/description
brand - Product brand
category - Product category
price - Product price
stock - Available stock quantity
vendor_code - Vendor identifier code
vendor_name - Vendor business name
curl Examples:
Basic Request:
Pagination Example:
Filtering Example:
Sorting Example:
Combined Parameters Example:
Sample Response:
Retrieve sales transaction data including quantities sold, selling prices, values, and site information. The database contains approximately 20,174 sales records.
Query Parameters:
Page number for pagination (default: 1)
Number of records per page (default: 50, max: 500)
Field name to sort by (e.g., "sale_value", "sold_qty", "sell_price")
Sort direction: "asc" or "desc" (default: asc)
Filter by any field (e.g., brand=NIKE, site_code=12004, vendor_code=S1350)
Filter by multiple values (comma-separated creates OR condition). Example: vendor_code=V1,V2,V3 returns records matching ANY of the values
Filter by SKU and vendor combination: "SKU#VENDOR_CODE" (e.g., "197057313464#S1748")
Response Fields:
sku - Product SKU identifier
sku_vendor - Composite key (SKU#VENDOR_CODE)
name - Product name/description
brand - Product brand
category - Product category
sold_qty - Quantity of units sold
sell_price - Unit selling price
sale_value - Total sales value (quantity × price)
site_code - Store/site code
site_description - Store/site name
vendor_code - Vendor identifier code
vendor_name - Vendor business name
curl Examples:
Basic Request:
Pagination Example:
Filtering by Composite Key:
Sorting by Sales Value:
Combined Parameters Example:
Multi-Value Filtering Example NEW:
Returns products matching ANY of the three vendor codes (OR condition)
Sample Response:
Retrieve inventory stock data including on-hand quantities, stock values, and location information. The database contains approximately 28,093 inventory records.
Query Parameters:
Page number for pagination (default: 1)
Number of records per page (default: 50, max: 500)
Field name to sort by (e.g., "stock_quantity", "stock_value", "site_code")
Sort direction: "asc" or "desc" (default: asc)
Filter by any field (e.g., brand=NIKE, site_code=12004, vendor_code=S1350)
Filter by multiple values (comma-separated creates OR condition). Example: vendor_code=V1,V2,V3 returns records matching ANY of the values
Filter by SKU and vendor combination: "SKU#VENDOR_CODE" (e.g., "197057313464#S1748")
Filter by site and vendor combination: "SITE_CODE#VENDOR_CODE" (e.g., "12004#S1350")
Response Fields:
sku - Product SKU identifier
sku_vendor - Composite key (SKU#VENDOR_CODE)
site_vendor - Composite key (SITE_CODE#VENDOR_CODE)
name - Product name/description
brand - Product brand
category - Product category
stock_quantity - On-hand stock quantity
stock_value - Total inventory value
site_code - Store/site code
site_description - Store/site name
vendor_code - Vendor identifier code
vendor_name - Vendor business name
curl Examples:
Basic Request:
Pagination Example:
Filtering by SKU and Vendor:
Filtering by Site and Vendor:
Sorting by Stock Value:
Combined Parameters Example:
Sample Response:
Retrieve detailed ledger transactions for a specific vendor within a date range. Returns individual accounting entries including document references, amounts, and due dates. Document types SHCLL and NEWPR are automatically excluded from results.
start_date and end_date are mandatory.
vendor_code and company_code are optional and both accept comma-separated lists (e.g. vendor_code=V001,V002,V003).
When both are provided the request uses a fast indexed lookup; when either is omitted the backend falls back to a broader scan across all vendors / companies in the date window.
vendor_code / company_code are now optional and support multi-value. Existing single-vendor calls continue to work unchanged.
Query Parameters:
Start date for ledger entries (format: YYYY-MM-DD, e.g., "2025-04-01")
End date for ledger entries (format: YYYY-MM-DD, e.g., "2026-03-31")
Vendor/Supplier code (e.g., "S1471"). Accepts comma-separated list: "V001,V002,V003". Omit to return all vendors in the date range.
Company code (e.g., "AEHQ"). Accepts comma-separated list. Omit to return all companies.
Page number for pagination (default: 1)
Number of records per page (default: 50, max: 500)
Field name to sort by (e.g., "acc_date", "amount", "due_date")
Sort direction: "asc" or "desc" (default: desc for date)
Response Fields:
company_code - Company identifier (e.g., "AEHQ")
company_name - Company name
vendor_code - Vendor/Supplier code
vendor_name - Vendor/Supplier name
sdg_ref_doc - Source document reference number
doc_type - Document type code
doc_ref - Business partner voucher reference
acc_date - Accounting date (YYYY-MM-DD)
due_date - Payment due date (YYYY-MM-DD)
amount - Transaction amount
status - Document status (e.g., "VALIDATED")
currency_code - Currency (e.g., "AED")
curl Examples:
Basic Request (All Required Parameters):
With Pagination and Sorting:
Multiple Vendors in a Single Call (v7):
All Vendors / All Companies in Date Range (v7):
Sample Response:
Retrieve aggregated ledger balances grouped by vendor. Calculates opening balance (before start date), period activity (within date range), and closing balance for each vendor.
start_date and end_date. Optional filters: vendor_code, company_code
Query Parameters:
Start date for period calculation (format: YYYY-MM-DD). Transactions before this date contribute to OPENING balance.
End date for period calculation (format: YYYY-MM-DD). Transactions within start-end range contribute to PERIOD amount.
Filter by specific vendor(s). Supports multi-value: vendor_code=S1471,S1650
Filter by specific company (e.g., "AEHQ")
Page number for pagination (default: 1)
Number of records per page (default: 50, max: 500)
Field to sort by (e.g., "closing_amount", "vendor_code", "opening_amount")
Sort direction: "asc" or "desc" (default: asc)
Response Fields:
company_code - Company identifier
company_name - Company name
vendor_code - Vendor/Supplier code
vendor_name - Vendor/Supplier name
opening_amount - Sum of all transactions BEFORE start_date
period_amount - Sum of transactions between start_date and end_date
closing_amount - opening_amount + period_amount
currency_code - Currency (e.g., "AED")
- Opening = Sum of all ledger entries with acc_date < start_date
- Period = Sum of all ledger entries with start_date ≤ acc_date ≤ end_date
- Closing = Opening + Period
curl Examples:
Get All Vendor Balances for Fiscal Year:
Filter by Specific Vendor:
Sort by Closing Balance (Highest First):
Multiple Vendors:
Sample Response:
Retrieve API usage statistics for monitoring consumption across all endpoints. Returns call counts, average response times, hourly distribution, daily trends, and recent requests. Data is retained for 90 days.
Query Parameters:
Start date for stats period (format: YYYY-MM-DD, defaults to 7 days ago)
End date for stats period (format: YYYY-MM-DD, defaults to today)
Response Fields:
total_calls - Total number of API calls in the period
calls_by_endpoint - Breakdown of calls per endpoint with average response times
daily_trend - Daily call counts across the date range
hourly_distribution - Call distribution by hour of day (UTC)
recent_requests - Most recent API requests with details
curl Example:
The API uses standard HTTP status codes to indicate the success or failure of requests.
Error Response Format:
-
1. Use Appropriate Page Sizes
Start with pageSize=50 for balanced performance. Increase up to 500 for bulk operations, but be mindful of timeout limits. Smaller page sizes (10-50) are ideal for real-time applications. -
2. Implement Pagination for Large Datasets
Always paginate when retrieving large result sets. Use the pagination metadata (totalRecords, totalPages) to build navigation and progress indicators. Avoid requesting all data in a single call. -
3. Use Filters to Reduce Data Transfer
Apply field filters (brand, category, vendor_code, etc.) to retrieve only relevant records. This improves performance and reduces bandwidth consumption. Combine multiple filters for precise queries. -
4. Leverage Composite Keys for Performance
Use sku_vendor (SKU#VENDOR_CODE) and site_vendor (SITE#VENDOR_CODE) composite keys for faster, vendor-specific queries. These are indexed and optimized for quick lookups. -
5. Cache Results When Appropriate
Since data syncs every 10 minutes, you can safely cache API responses for up to 10 minutes. This reduces API calls and improves application performance. Implement cache invalidation based on sync schedule. -
6. Handle Errors Gracefully
Implement proper error handling for all status codes. Retry 504 timeout errors with smaller page sizes. Display user-friendly messages for 401 authentication errors. -
7. Monitor Sync Schedule
Data syncs occur every 10 minutes from source systems. Check the Dashboard's "Sync Activity Monitor" to view real-time sync status and history. Plan data-intensive operations around sync intervals. -
8. Monitor API Consumption
Use the "API Consumption" tab or the/api-statsendpoint to track usage patterns, response times, and call volumes across all endpoints. Logs are retained for 90 days. All timestamps are in UTC (Dubai is UTC+4).
Common Use Cases:
Get all products for a specific brand:
GET /products?brand=NIKE&pageSize=100
Get top-selling products:
GET /sales?sortBy=sale_value&sortOrder=desc&pageSize=20
Get low stock inventory:
GET /inventory?sortBy=stock_in_hand&sortOrder=asc&pageSize=50
Get vendor-specific sales:
GET /sales?vendor_code=S1748&sortBy=sold_qty&sortOrder=desc
Get inventory at specific site:
GET /inventory?site_code=12004&pageSize=100
Get API usage stats for last 7 days:
GET /api-stats?start_date=2026-03-11&end_date=2026-03-18
When using composite keys with the # symbol in URLs, ensure proper encoding: # becomes %23. Most HTTP libraries handle this automatically.