Primeros Pasos
Configura la autenticación, sincroniza tu reloj y realiza tu primera solicitud a la API C2C de Binance en menos de 5 minutos.
1. Requisitos Previos
Crea una API Key de Binance con estos permisos:
- Read — requerido para todos los endpoints
- Trade P2P — requerido para gestión de anuncios y órdenes
- Sin retiros — nunca habilites permisos de retiro
Restringe tu API key a la dirección IP de tu servidor para mayor seguridad.
2. Sincronización de Tiempo
Todas las solicitudes firmadas incluyen un parámetro timestamp. Si el reloj de tu servidor se desvía más de recvWindow (por defecto 60.000ms) respecto al servidor de Binance, las solicitudes fallan con el error -1021.
3. Firma HMAC-SHA256
Proceso de Firma
- Recopila los parámetros del query string:
timestamp=X&recvWindow=Y - Ordénalos alfabéticamente por nombre de clave
- Concaténalos en un único query string
- Calcula
HMAC-SHA256(secret_key, query_string) - Añade
&signature=RESULTADOa la URL - Establece el header:
X-MBX-APIKEY: api_key - Establece el header:
clientType: web - Envía la solicitud — el body JSON NO se incluye en la firma
Cambio Crítico 2026: Percent-Encoding
A partir de 2026, Binance requiere percent-encoding de caracteres especiales en los valores del query string antes del cálculo HMAC. Los valores que contienen =,& o espacios deben estar URL-encoded antes de firmar. Anteriormente se aceptaban valores sin codificar.
import hmac, hashlib, time
from urllib.parse import urlencode
def sign_request(api_secret: str, params: dict) -> str:
"""Generate HMAC-SHA256 signature for Binance SAPI."""
params["timestamp"] = int(time.time() * 1000)
params["recvWindow"] = 60000
# Sort alphabetically and encode
query_string = urlencode(sorted(params.items()))
signature = hmac.new(
api_secret.encode(), query_string.encode(), hashlib.sha256
).hexdigest()
return f"{query_string}&signature={signature}"4. Alcance de la Firma
Importante: La firma HMAC cubre únicamente los parámetros del query string. El body JSON de la solicitud NO se incluye en el cálculo de la firma. Este comportamiento es consistente en todos los endpoints SAPI pero está pobremente documentado.
5. Headers Comunes
| Header | Valor | Requerido |
|---|---|---|
| X-MBX-APIKEY | Tu API key | Sí (firmado) |
| clientType | web | Sí (toda SAPI) |
| Content-Type | application/json | Para POST con body |
6. Primera Solicitud (Sin Auth)
Comienza con un endpoint sin autenticación para verificar la conectividad:
Get Available Ads Categories
/sapi/v1/c2c/ads/getAvailableAdsCategory7. Primera Solicitud Firmada
Ahora prueba una solicitud firmada para verificar tu implementación HMAC:
Get Ad Detail By Number
/sapi/v1/c2c/ads/getDetailByNoPróximos Pasos
- → Market Data — Busca en el order book P2P (público, sin auth)
- → Referencia de Ads — Gestiona tus anuncios P2P
- → Códigos de Error — Maneja cada código de error correctamente