All notable changes to this project are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.2.1
Audited against MercadoPago's official MCP server
(https://mcp.mercadopago.com/mcp), walking the SDK's routes against the live
API documentation. Every finding was re-verified against the code before being
acted on; those that could not be confirmed were not acted on. See
DIVERGENCES.md for every intentional departure from the
reference Ruby SDK.
No public function was removed or changed arity in this release.
Fixed
- Webhook signatures for Orders notifications.
Mercadopago.Webhook.Validatornow lowercasesdata.idbefore building the HMAC manifest, as MercadoPago specifies:id:[data.id_lowercase];request-id:[x-request-id];ts:[ts];. Numeric payment ids have no case and were unaffected, which is why this went unnoticed — but the Orders API sends ULID-style ids such asORD01JQ4S4KY8HWQ6NA5PXB65B3D3, and every one of those notifications was being rejected as an invalid signature. Callers passdata.idthrough untouched; the lowercasing is internal to the manifest. Anyone who worked around this by lowercasing the id themselves is unaffected. The reference Ruby SDK 3.2.1 has the same defect. - The
mix cialias could never fail on formatting. It ranformatbeforeformat --check-formatted, so the first task rewrote the files and the check always passed. It also mutated the working tree. Only the check remains. Mercadopago.Order.create_online/3no longer mixes atom and string keys when injecting defaults into a string-keyed payload.
Added
Mercadopago.Order.create_online/3, replacing the misnamedcreate_checkout_pro/3(see Deprecated).Mercadopago.HTTP.patch/4, unblocking endpoints that take a partial update.- Multipart request bodies via
{:multipart, parts}onpost/4,put/4andpatch/4, for uploads such as chargeback documentation. Part content may be a stream, so large files need not be read into memory. Mercadopago.OAuth.generate_code_verifier/0andMercadopago.OAuth.code_challenge/1(PKCE, RFC 7636 S256), plus:code_challenge/:code_challenge_methodoptions onget_authorization_url/4.- Tokenless clients:
Mercadopago.new(nil)omits theAuthorizationheader instead of sending an emptyBearer. Previously the only way to bootstrap the OAuth authorization-code flow wasMercadopago.new(""). Mercadopago.OAuth.create/3andrefresh/3default their owngrant_type; an explicitly supplied one is never overwritten.Mercadopago.Errorand the opt-inMercadopago.HTTP.unwrap/1, for callers who prefer{:ok, body}/{:error, exception}over inspecting status codes. The default contract is unchanged: resource functions still return{:ok, %{status: _, response: _}}for every completed request.
Deprecated
Mercadopago.Order.create_checkout_pro/3— usecreate_online/3. The name is a misnomer inherited from the Ruby SDK:POST /v1/orderswithtype: "online"is the Checkout API via Orders, not Checkout Pro. Checkout Pro is the hosted flow built onPOST /checkout/preferences, available asMercadopago.Preference. The old name still works and delegates to the new one.
Security
- Updated all dependencies to close five transport-layer CVEs.
- Bounded
reqto the0.6line: it is pre-1.0 and breaks API across minors, and the SDK matches on%Req.TransportError{}and callsReq.Response.get_header/2andReq.Test.transport_error/2.
Changed
- Hardened the HTTP transport and restructured the integration suite into one
module per resource, so
async: trueactually parallelises the network round-trips.
0.2.0
- Synced with the official Ruby SDK 3.2.0.
0.1.0
- Initial release.