Connect Retool to the eBay API using a REST API Resource with OAuth 2.0 client credentials. Configure eBay's developer credentials in Retool's Resources tab, obtain an application access token, and build seller operations dashboards that manage listings, track orders, monitor feedback, and handle returns across eBay's Browse, Sell, and Fulfillment APIs.
| Fact | Value |
|---|---|
| Tool | eBay API |
| Category | E-commerce |
| Method | REST API Resource |
| Difficulty | Intermediate |
| Time required | 35 minutes |
| Last updated | April 2026 |
Build an eBay Seller Command Center in Retool
eBay sellers managing high-volume stores need more operational visibility than eBay Seller Hub provides out of the box. Retool connected to eBay's API enables building a fully customized seller command center: viewing all active listings with performance metrics, tracking orders across multiple fulfillment states, monitoring buyer feedback, and processing returns — all from a single dashboard that can be combined with your warehouse system, shipping providers, and customer service tools.
eBay's REST API is organized into API families: the Sell API for inventory and offer management, the Fulfillment API for order processing and shipping, the Browse API for searching and retrieving item details, the Analytics API for performance metrics, and the Account API for seller account settings. Most seller operations require User-level OAuth tokens (authorization code grant), meaning the authenticated eBay seller must authorize your application. Application-level tokens (client credentials) are sufficient only for Browse API searches and public catalog lookups.
The most impactful Retool-eBay patterns are seller operations dashboards that surface order status, track sales velocity by listing, flag listings with low stock, process return requests in bulk, and display feedback scores with response queues. By combining eBay data with your internal inventory database in Retool, you can build dashboards that show real-time stock levels alongside eBay listing quantities — the kind of cross-system operational view that no individual platform provides natively.
Integration method
eBay integrates with Retool through eBay's REST API family, configured as a REST API Resource. eBay uses OAuth 2.0 with two distinct token types: Application tokens (client credentials grant) for public data like Browse API searches, and User tokens (authorization code grant) for Sell and Fulfillment APIs requiring seller account access. Retool proxies all requests server-side through the Resource, keeping OAuth tokens secure and eliminating CORS issues.
Prerequisites
- An eBay developer account at developer.ebay.com with a production application created
- eBay App ID (Client ID), Cert ID (Client Secret), and Developer ID from the developer portal
- A production eBay seller account with active listings (for Sell/Fulfillment API access)
- The seller's OAuth User token obtained through eBay's authorization flow (for seller-specific data)
- A Retool account with permission to create and configure Resources
Step-by-step guide
Create an eBay developer application and get credentials
Go to developer.ebay.com and sign in with your eBay account. Navigate to 'Application Access Keys'. If you don't have an application, click 'Create a Keyset' and fill in your application name and description. Choose 'Production' for live seller data (or 'Sandbox' for testing). After creating the application, eBay provides three credentials: App ID (also called Client ID), Cert ID (also called Client Secret), and Dev ID. You'll use the App ID and Cert ID for OAuth token generation. The Dev ID is used for specific legacy API features. For the Sell and Fulfillment APIs, your application needs a User access token — this requires a seller to authorize your application through eBay's OAuth flow. Navigate to the 'User Tokens' section in the developer portal and use eBay's 'OAuth Consent Flow' to authorize your seller account. This generates a refresh token that can be exchanged for access tokens lasting 2 hours. Copy the refresh token — you'll need it for your Retool Resource configuration. For the Browse API (public search/browse data only), you only need an Application token obtained via client credentials — no user authorization required. To get an application token, make a POST request to https://api.ebay.com/identity/v1/oauth2/token with Basic auth (App ID:Cert ID) and body grant_type=client_credentials&scope=https://api.ebay.com/oauth/api_scope.
Pro tip: eBay access tokens expire after 2 hours. Plan for token refresh in your Retool setup — store the refresh token and use a Retool Workflow to obtain new access tokens before they expire.
Expected result: You have eBay App ID (Client ID), Cert ID (Client Secret), and either a User refresh token (for seller operations) or can generate Application tokens (for Browse API). You know which APIs you need and which token type each requires.
Configure a Retool query to obtain eBay OAuth access tokens
eBay's access tokens expire after 2 hours, so you need a mechanism to obtain fresh tokens before making API calls. The recommended pattern in Retool is a dedicated 'token query' that runs before your data queries. In Retool, navigate to the Resources tab and create a REST API Resource named 'eBay OAuth'. Set the base URL to https://api.ebay.com/identity/v1. For authentication, select 'Basic Auth'. Set the username to your eBay App ID and the password to your Cert ID. Base64-encoded App ID:Cert ID will be sent as the Authorization header. Create a query named 'getEbayToken' using this resource. Set method to POST and path to /oauth2/token. In the Body tab, set Content-Type to application/x-www-form-urlencoded. The body should contain: grant_type=refresh_token&refresh_token={{ retoolContext.configVars.EBAY_REFRESH_TOKEN }}&scope=https://api.ebay.com/oauth/api_scope/sell.fulfillment https://api.ebay.com/oauth/api_scope/sell.inventory. Create a second REST API Resource named 'eBay API' with base URL https://api.ebay.com. For authentication, select 'Bearer Token' and set the value to {{ getEbayToken.data.access_token }}. This way, the access token from the first query is used in all subsequent API queries. Store your eBay refresh token in a Retool configuration variable: Settings → Configuration Variables → add EBAY_REFRESH_TOKEN as a secret. Never hardcode the refresh token in query bodies.
1// Body for POST /identity/v1/oauth2/token2// Use application/x-www-form-urlencoded content type3grant_type=refresh_token&refresh_token={{ retoolContext.configVars.EBAY_REFRESH_TOKEN }}&scope=https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.fulfillment+https%3A%2F%2Fapi.ebay.com%2Foauth%2Fapi_scope%2Fsell.inventoryPro tip: Add the getEbayToken query to the app's 'Queries that run on page load' list and configure the eBay API resource's Bearer Token to reference it — this ensures a fresh token is obtained before any data queries run.
Expected result: The getEbayToken query returns a valid access_token string. The eBay API resource is configured to use this token for all subsequent queries. You're ready to make authenticated eBay API calls.
Build queries for eBay listings and inventory
With OAuth working, build the queries that power your seller dashboard. Create a query named 'getListings' using the eBay API resource. Set method to GET and path to /sell/inventory/v1/offer. Add URL parameters: sku (maps to {{ skuSearchInput.value || '' }} for SKU filtering), limit (set to 50), and offset (set to {{ (listingsTable.pagination.current - 1) * 50 || 0 }} for pagination). The Sell Inventory API's /offer endpoint returns all offers (listings) with their current status, price, quantity, and marketplace details. For listing performance data, create a second query targeting eBay's Analytics API: GET /sell/analytics/v1/seller_standards_profile to get overall seller performance, and GET /sell/analytics/v1/traffic_report for impression and click data by listing. Create a third query 'getOrders' using the Fulfillment API: GET /sell/fulfillment/v1/order. Add parameters: filter (set to creationdate:[2025-01-01T00:00:00.000Z..] for date filtering), orderfulfillmentstatus (set to NOT_STARTED for unfulfilled orders), limit (50), and offset for pagination. Run each query to verify the response structure. eBay's responses follow a consistent pattern with a total count, a limit and offset, and an items/orders array.
1// JavaScript transformer for eBay orders response2const orders = data.orders || [];34return orders.map(order => ({5 orderId: order.orderId,6 buyerUsername: order.buyer?.username || 'N/A',7 createdDate: new Date(order.creationDate).toLocaleDateString(),8 status: order.orderFulfillmentStatus,9 paymentStatus: order.paymentSummary?.payments?.[0]?.paymentStatus || 'Unknown',10 itemCount: order.lineItems?.length || 0,11 items: order.lineItems?.map(li => li.title).join(', ') || '',12 orderTotal: `$${parseFloat(order.pricingSummary?.total?.value || 0).toFixed(2)}`,13 currency: order.pricingSummary?.total?.currency || 'USD',14 shippingDeadline: order.fulfillmentStartInstructions?.[0]?.maxEstimatedDeliveryDate15 ? new Date(order.fulfillmentStartInstructions[0].maxEstimatedDeliveryDate).toLocaleDateString()16 : 'N/A'17}));Pro tip: eBay's order filter parameter uses a specific syntax: filter=creationdate:[2025-01-01T00:00:00.000Z..2025-12-31T23:59:59.000Z] — use square brackets with two dots between date range values.
Expected result: The listings and orders queries return data from eBay's API. The transformer reshapes the order data into flat objects. You can see current listings, pending orders, and fulfillment status in the query preview.
Build the seller operations dashboard UI
Build the Retool seller command center. Start with a Tab component at the top of the canvas with three tabs: 'Listings', 'Orders', and 'Returns'. On the Listings tab: Add a summary row with Statistic components showing total active listings, total available quantity, and average price. Below, add a Table component bound to {{ getListings_transformed.value || [] }}. Configure columns: SKU, title, price, quantity, status (as a Tag), and an 'Edit Price' action button. The edit button opens a Modal containing a NumberInput for new price and a query that calls PATCH /sell/inventory/v1/offer/{offerId} to update the price. On the Orders tab: Add filter controls (date range, fulfillment status Select, payment status Select) connected to the getOrders query parameters. Add a Table showing the transformed order data. Configure columns: orderId, buyerUsername, items, orderTotal, status (as Tag), createdDate, and action buttons: 'Mark Shipped' (opens a Modal for tracking number entry) and 'View in eBay' (opens the eBay order URL in new tab). The 'Mark Shipped' action triggers a POST to /sell/fulfillment/v1/order/{orderId}/shipping_fulfillment with the carrier, tracking number, and line item IDs. On success, refresh the orders query and show a 'Marked as shipped' notification. For the Returns tab, query the Post-Order API at https://api.ebay.com/post-order/v2/return with filter=OPEN status. For complex multi-API eBay integrations with inventory sync, bulk listing management, and analytics dashboards, RapidDev's team can help architect the full solution.
1// Body for POST /sell/fulfillment/v1/order/{orderId}/shipping_fulfillment2// Mark an order as shipped with tracking information3{4 "lineItems": {{ getOrders_transformed.value5 .find(o => o.orderId === ordersTable.selectedRow?.orderId)6 ?.lineItems?.map(li => ({ lineItemId: li.lineItemId, quantity: li.quantity })) || [] }},7 "shippedDate": "{{ new Date().toISOString() }}",8 "shippingCarrierCode": "{{ carrierSelect.value }}",9 "trackingNumber": "{{ trackingNumberInput.value }}"10}Pro tip: eBay's marketplace ID (EBAY_US, EBAY_GB, EBAY_DE, etc.) is required in the X-EBAY-C-MARKETPLACE-ID header for many Sell API calls. Add this as a header in your eBay API resource or override it per-query for multi-marketplace seller accounts.
Expected result: The seller dashboard has three tabs showing listings, orders, and returns. The orders tab allows marking orders as shipped with tracking numbers. All data updates reflect in eBay's seller account immediately.
Common use cases
Active listing performance dashboard
Build a dashboard showing all active eBay listings with columns for item title, current price, quantity available, views in the last 7 days, watchers, and sales velocity. Filter by category and sort by performance metrics to identify top performers and slow-moving inventory at a glance.
Build a Retool app that queries eBay's Sell Inventory API for all active offers and the Analytics API for item impression/view data. Show a Table with Title, SKU, Price, Quantity, Views, Watchers, and 30-day Sales. Add a filter for listing category and sort controls. Highlight listings with quantity below 5 in yellow.
Copy this prompt to try it in Retool
Order fulfillment operations panel
Build an order management panel that shows all pending and processing orders, allows bulk printing of shipping labels, and updates order statuses. Combine eBay order data with your shipping provider's tracking to give fulfillment staff complete visibility into every order's journey.
Build a Retool dashboard showing eBay orders with AWAITING_SHIPMENT status. Display columns for order number, buyer username, items ordered, order total, payment status, and days since order. Include a 'Mark as Shipped' button that calls the Fulfillment API to update the order status with a tracking number entered in a text input.
Copy this prompt to try it in Retool
Return and dispute management panel
Build a returns management dashboard that shows all open return requests with their reason codes, deadlines for seller response, and return amounts. Allow operations staff to approve or dispute returns directly from Retool, tracking each case's progress and ensuring SLA compliance.
Build a Retool app showing all open eBay returns via the Post-Order API. Display buyer username, item title, return reason, requested amount, response deadline, and current status. Add an 'Approve Return' button and a 'Message Buyer' button. Show a countdown indicator for returns approaching their response deadline.
Copy this prompt to try it in Retool
Troubleshooting
eBay API returns 401 Unauthorized on every request even after obtaining an access token
Cause: The access token may have expired (eBay tokens expire after 2 hours), or the Bearer token value in the Resource is not updating when the token query refreshes.
Solution: Ensure the 'getEbayToken' query runs before data queries on page load. Check that the eBay API Resource's Bearer Token field references {{ getEbayToken.data.access_token }} — if the field contains the literal string rather than the template expression, the token won't refresh. Also verify the token query is using the correct endpoint (https://api.ebay.com/identity/v1/oauth2/token) and the correct grant_type.
eBay Sell API returns 403 with 'Insufficient permissions' for inventory or order endpoints
Cause: The access token was obtained with insufficient OAuth scopes, or the token was generated as an Application token (client credentials) rather than a User token. Application tokens only work for Browse API — Sell and Fulfillment APIs require User tokens.
Solution: Regenerate the access token using a User refresh token (obtained from the seller's authorization flow), not client credentials. Ensure the scope parameter in your token request includes all required Sell API scopes: https://api.ebay.com/oauth/api_scope/sell.inventory, https://api.ebay.com/oauth/api_scope/sell.fulfillment, and https://api.ebay.com/oauth/api_scope/sell.account.
eBay API returns 404 for the Sell API endpoints — error says 'The API call is made with an invalid call. Check endpoint URL'
Cause: eBay's REST API base URLs differ by API family. The Sell API uses api.ebay.com/sell/inventory/v1/..., the Fulfillment API uses api.ebay.com/sell/fulfillment/v1/..., and the Browse API uses api.ebay.com/buy/browse/v1/... — using the wrong path prefix returns 404.
Solution: Verify the full path for each endpoint in eBay's developer documentation. Set your Resource base URL to https://api.ebay.com and use the full path including the API family prefix in each query (e.g., /sell/inventory/v1/offer). Do not set the Resource base URL to include the API family path, as you'll need to access multiple API families.
eBay order filter parameter returns 'invalid filter syntax' error
Cause: eBay's filter parameter for the Orders endpoint uses a specific syntax that is different from standard query parameter formats — date ranges use square brackets with two dots.
Solution: Use eBay's exact filter syntax: filter=creationdate:[2025-01-01T00:00:00.000Z..] for open-ended date ranges or filter=creationdate:[2025-01-01T00:00:00.000Z..2025-12-31T23:59:59.000Z] for bounded ranges. URL-encode the brackets and colons if they're being added as URL parameters rather than query string values.
1// Correct eBay order filter syntax in Retool URL parameter2// Key: filter3// Value: creationdate:[{{ dateRangePicker.start }}..{{ dateRangePicker.end || '' }}]Best practices
- Store your eBay refresh token in a Retool configuration variable marked as secret — refresh tokens are long-lived credentials that should never appear in query bodies or be exposed to frontend components
- Implement token refresh logic with a Retool Workflow that runs on a schedule to pre-fetch new access tokens before they expire, storing them in a Retool Database table that your Resource queries reference
- Use eBay's Sandbox environment (api.sandbox.ebay.com) during development and testing — the Sandbox mirrors the production API with test data and prevents accidental modifications to live listings
- Add the X-EBAY-C-MARKETPLACE-ID header to queries for marketplace-specific data — different eBay marketplaces (US, UK, DE) have different category taxonomies and listing requirements
- Use eBay's native pagination parameters (limit and offset) and implement Retool Table pagination to avoid fetching thousands of listings at once — eBay limits most endpoints to 200 records per request
- For bulk operations (updating multiple listing prices, marking multiple orders shipped), use a Retool JavaScript query with Promise.all() to send parallel requests rather than sequential ones, staying within eBay's rate limits
- Monitor eBay's API rate limit headers in query responses (X-RateLimit-Limit, X-RateLimit-Remaining) and implement exponential backoff in Retool Workflows when the remaining count approaches zero
Alternatives
Choose Etsy API if you're managing a handmade goods or vintage shop — Etsy uses OAuth 2.0 PKCE and is better suited for artisan seller dashboards than eBay's auction and general marketplace.
Choose AliExpress API if you're operating a dropshipping business sourcing from AliExpress — its API focuses on product catalog access and order management for dropshippers.
Choose WooCommerce if you want to build on your own e-commerce platform rather than a marketplace — WooCommerce has a straightforward REST API for managing your own store's products and orders.
Frequently asked questions
What is the difference between eBay Application tokens and User tokens?
Application tokens (client credentials grant) are used for accessing public eBay data that doesn't require seller authentication — primarily the Browse API for searching listings and product catalog. User tokens (authorization code grant) represent an authenticated eBay seller and are required for all Sell and Fulfillment API operations like managing listings, processing orders, and handling returns. Most seller dashboards require User tokens.
How long do eBay access tokens last and how do I handle expiry in Retool?
eBay access tokens expire after 2 hours. Refresh tokens last 18 months (for User tokens). In Retool, handle expiry by running a token refresh query on each page load and storing the fresh token in a Retool state variable that your API Resource's Bearer Token field references. For production dashboards, use a Retool Workflow to pre-refresh tokens on a schedule and cache them in a Retool Database table.
Does eBay's REST API cover all the data I'd see in eBay Seller Hub?
eBay's REST API covers most Seller Hub data including active listings, orders, returns, feedback, seller performance metrics, and traffic analytics. Some Seller Hub features (advanced promotional tools, eBay-managed delivery) have limited or no API support. Check eBay's developer documentation for specific features — eBay has been gradually expanding REST API coverage while deprecating older XML-based Trading API endpoints.
Can I use Retool to list new items on eBay, not just view existing ones?
Yes, eBay's Sell Inventory API supports creating new inventory items and offers. POST to /sell/inventory/v1/inventory_item/{sku} to create or update an inventory item, then POST to /sell/inventory/v1/offer to create a listing offer on eBay. This two-step process (item creation + offer publication) is required for the REST API. Build a Retool form with all required eBay listing fields and connect it to both the inventory creation and offer publication queries.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation