Shopping — entry 009 of 15

Mercadolibre

Verified Sep 2026

Mercado Libre exposes a large REST surface across its Latin American marketplace sites, covering listings, orders, ads, and shipping. Two read-only lookups work without a token: a category by ID, such as `/categories/MLA1051`, and `/sites/{site}/domain_discovery/search`. Everything else, including site lists, currencies, item listings and search, needs an OAuth2 access token from the authorization-code flow. The API itself carries no direct usage fee. Mercado Libre monetizes through marketplace and payment commissions instead.

Mercado Libre runs the largest online marketplace in Latin America. Most of the API needs an OAuth token tied to a seller account. Two read-only paths do not: category lookup and domain discovery. A live GET this run on /categories/MLA1051 returned real category data with no token sent.

e-commercemarketplaceoauthlatin-americaproduct-data
AuthenticationOAuthRequires an OAuth flow; expect app registration.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score57out of 100
Authentication8/25OAuth flow required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 57 on greatapis.com
<a href="https://greatapis.com/api/mercadolibre/"><img src="https://greatapis.com/badge/mercadolibre.svg" alt="Scored 57 on greatapis.com"></a>

Auth quickstart

  1. Category lookup needs no key. A live GET /categories/MLA1051 this run returned HTTP 200 with the category name, item count, and child categories. GET /categories/MLA1051/attributes also returned HTTP 200, with the item attributes for that category.
  2. Domain discovery needs no key either. A live GET /sites/MLA/domain_discovery/search?q=celular&limit=1 this run returned HTTP 200 with a matching category for the search term.
  3. Most other paths need a token. Live calls this run to /sites, /currencies, /sites/MLA, /sites/MLA/categories, and /items/<id> all returned HTTP 403 with {"code":"PA_UNAUTHORIZED_RESULT_FROM_POLICIES"}. /sites/MLA/search also returned HTTP 403, with {"message":"forbidden"}.
  4. To get a token, create an application at Mercado Libre's developer site (the "My Applications" page) to get an APP ID and a secret key. Send the user to https://auth.mercadolibre.com.ar/authorization?response_type=code&client_id=<APP_ID>&redirect_uri=<YOUR_URL> (swap .com.ar for the domain of your target country). After the user logs in and approves the app, Mercado Libre redirects to your redirect_uri with a code parameter.
  5. Exchange the code for a token with POST /oauth/token, sent as form data: grant_type=authorization_code, client_id, client_secret, code, and redirect_uri. Per the vendor docs, the response looks like {"access_token":"APP_USR-...","token_type":"bearer","expires_in":10800,"refresh_token":"TG-..."}. Send the token back as a Bearer header on private calls.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Keyless category lookup

GEThttps://api.mercadolibre.com/categories/MLA1051

200 application/json; charset=utf-8

{"id":"MLA1051","name":"Celulares y Teléfonos","permalink":"https://www.mercadolibre.com.ar/c/celulares-y-telefonos","total_items_in_this_category":3355197,"path_from_root":[{"id":"MLA1051","name":"Celulares y Teléfonos"}],"children_categories":[{"id":"MLA3502","name":"Accesorios para Celulares","total_items_in_this_category":2439427},{"id":"MLA1055","name":"Celulares y Smartphones","total_items_in_this_category":129011},{"id":"MLA1058","name":"Handies y Radiofrecuencia","total_items_in_this_category":42603}]}

MLA is the site prefix for Argentina. Mercado Libre runs a separate category tree per country: MLB1051 returns the same slot for Brazil, with names in Portuguese. A live GET /categories/MLA99999999 this run returned HTTP 404 with {"message":"Category not found: MLA99999999","error":"not_found"}, so an unknown ID fails loud instead of returning an empty body.

Developer reference

Gotchas & limits

  • CORS is open on the keyless paths. A live OPTIONS preflight against /categories/MLA1051 this run returned HTTP 200 with access-control-allow-origin set to the request's Origin header. A plain GET with no Origin header returned access-control-allow-origin: *. A browser page can call these two paths with no server proxy.
  • The 403 on gated paths comes from a policy layer, not a plain auth check. Live calls this run to /sites, /currencies, /sites/MLA, /sites/MLA/categories, and /items/<id> all returned the same body shape: {"blocked_by":"PolicyAgent","code":"PA_UNAUTHORIZED_RESULT_FROM_POLICIES"}. Even reference data like the currency list needs a token now.
  • Keyless responses are cached. A live /categories/MLA1051 call this run returned cache-control: max-age=600, so a category edit at Mercado Libre can take up to 10 minutes to show up in the API.
  • An access token lasts a few hours, not indefinitely. The vendor docs' own token response sets expires_in to 10800 (seconds). Save the refresh_token from that same response and use it to get a new access token before the old one expires; the vendor docs note each refresh token works only once.