← Developers OpenAPI JSON Status
Partner API v1HMAC-SHA256Sandbox + Live

Mercantil Settlement™ Partner API

Integra depósitos on-chain, conversiones, settlements y transferencias fiat. Un endpoint de eventos, webhooks firmados, sandbox aislado y paso a producción sin intervención manual.

Base URL

https://settlement.mercantil.com.do/api/v1

Auth

Authorization: Bearer sk_live_… + firma HMAC

Quick Start

Envía tu primer evento en 3 pasos:

1 · Genera una API key de test

Desde el Partner Dashboard genera una sk_test_… y tu signing_secret (se muestran una sola vez).

2 · Firma la petición

Calcula signature = HMAC_SHA256(timestamp + "." + nonce + "." + body, signing_secret) en hex.

3 · POST del evento

En sandbox usa sk_test_; en producción sk_live_. Los datos de test nunca tocan settlements reales.

Authentication

Cada petición requiere una API key (Bearer) y una firma HMAC. Cabeceras:

HeaderDescripción
AuthorizationBearer sk_live_… / sk_test_…
X-Mercantil-TimestampUnix epoch (segundos). Ventana ±300s.
X-Mercantil-NonceÚnico por petición (replay protection).
X-Mercantil-Signaturehex de HMAC_SHA256(ts.nonce.body, signing_secret)
Idempotency-KeyOpcional; refuerza la idempotencia.

Requisitos de seguridad: TLS obligatorio, IP allow-list opcional, scopes por key, rate limit por partner. Los secretos jamás se guardan en claro.

API Keys

Prefijos: sk_test_ (sandbox) y sk_live_ (producción). Se muestran una sola vez; solo se almacena su SHA-256. Cada key tiene scopes, último uso, IP, fecha de creación y expiración. Soporta rotación y revocación inmediata.

ScopePermite
events:writeEnviar eventos a /partners/events
events:readListar eventos y timelines

Sandbox

Ambiente aislado con base separada por mode=test. Nunca contiene datos reales.

  • Host dedicado: sandbox.settlement.mercantil.com.do (acepta solo sk_test_).
  • Mismo contrato de API que producción.
  • Eventos y webhooks simulados; replay disponible.
  • Logs completos por request.
Producción (settlement.mercantil.com.do) acepta únicamente sk_live_.

Events

POST /partners/events. El cuerpo mínimo:

Catálogo de estados

statusEstado interno
ON_CHAIN_DEPOSIT_RECEIVEDCRYPTO_RECEIVED · Depósito on-chain recibido
TRADE_COMPLETEDFX_CONVERTED · Conversión completada
FIAT_TRANSFER_COMPLETEDFIAT_SETTLED · Transferencia fiat completada
FIAT_TRANSFER_FAILEDFIAT_FAILED · Transferencia fiat fallida
ON_CHAIN_SENTCRYPTO_SENT · Envío on-chain emitido
ON_CHAIN_CONFIRMEDCRYPTO_CONFIRMED · Envío on-chain confirmado
SETTLEMENT_CREATEDPENDING · Settlement creado
SETTLEMENT_APPROVEDAPPROVED · Settlement aprobado
SETTLEMENT_EXECUTEDEXECUTED · Settlement ejecutado
SETTLEMENT_FAILEDFAILED · Settlement fallido
COMPLIANCE_HOLDCOMPLIANCE_HOLD · Retención de compliance
COMPLIANCE_RELEASEDCOMPLIANCE_RELEASED · Liberada por compliance

Respuesta 201 (nuevo) o 200 (duplicate:true):

Idempotency

Un evento nunca se procesa dos veces. La clave de idempotencia es eventId o la combinación transactionId + status. Un reenvío responde 200 con duplicate:true sin reprocesar ni reejecutar el workflow interno.

Webhooks

Registra un endpoint HTTPS y recibe eventos firmados. Cabecera:

X-Mercantil-Signature: t=<timestamp>,v1=<hmac> donde hmac = HMAC_SHA256(t + "." + body, whsec_…).

Reintentos automáticos con backoff (1m · 5m · 15m · 1h · 6h · 24h), replay manual e histórico completo (status HTTP, tiempo de respuesta, intentos, payload, headers).

Rate Limits

Límite por partner por minuto (configurable, default 120). Al exceder devuelve 429 rate_limited. Los reintentos deben respetar backoff exponencial.

Error Codes

HTTPerrorCausa
401unauthorizedFalta o formato inválido del Bearer
401invalid_api_keyKey desconocida
401api_key_revoked / api_key_expiredKey revocada/expirada
401invalid_signature / invalid_timestampFirma o ventana de tiempo inválida
403forbidden_scopeLa key no tiene el scope requerido
403ip_not_allowedIP fuera de la allow-list
403test_key_on_production / live_key_on_sandboxKey en el host equivocado
409nonce_reusedNonce repetido (replay)
422invalid_schemaCampos faltantes/ inválidos (ver fields)
429rate_limitedLímite por minuto excedido

API Explorer

Construye la petición y genera el curl firmado. (La firma se calcula localmente en tu servidor; aquí generamos el comando.)

— pulsa "Generar curl" —

SDK Examples

Ejemplos completos de firma + envío. Elige tu lenguaje:

Health

EndpointUso
GET /healthLiveness básico
GET /api/v1/statusEstado de componentes (db, webhooks, notif)
GET /api/v1/versionVersión y release

Changelog

VersiónCambios
v1.0.0Partner API inicial: eventos, idempotencia, webhooks firmados, sandbox, dashboard, OpenAPI.

FAQ

¿Cómo paso de sandbox a producción?

Genera una sk_live_, registra tu webhook de producción y apunta al host de producción. Mismo contrato.

¿Qué pasa si reenvío un evento?

Se responde duplicate:true sin reprocesar (idempotencia por eventId o transactionId+status).

¿Los secretos se pueden recuperar?

No. Las keys y secrets se muestran una sola vez; solo guardamos su hash cifrado. Usa rotación.

Mercantil Settlement™ · Partner API v1 · OpenAPI · Status