WebSocket es un protocolo de comunicación full-duplex basado en TCP. Full-duplex significa que ambas partes pueden enviarse mensajes de forma asíncrona usando el mismo canal de comunicación. Esta sección describe qué mensajes deben intercambiarse entre Exchange Plus y el cliente. Todos los mensajes deben ser objetos JSON válidos.
La API WebSocket se utiliza principalmente para obtener información o realizar acciones que no están disponibles o son difíciles de realizar mediante la API REST. Sin embargo, algunas solicitudes o acciones son posibles realizarlas tanto en la API REST como en la API WebSocket. Exchange Plus envía mensajes al cliente como respuesta a una solicitud enviada previamente por el cliente, o como notificación sobre algún evento (sin solicitud previa del cliente).
Llamadas a la API pública
El límite de velocidad de la API pública existe para proteger el sistema contra ataques DDoS y garantizar que todos los clientes tengan el mismo nivel de acceso estable a los endpoints de la API Exchange Plus. Las solicitudes públicas están limitadas por la dirección IP desde la que se realizan. Los límites de solicitud se determinan en función del coste asociado a cada llamada a la API pública. Por defecto, cada solicitud pública tiene un coste de 1 punto, aunque para algunas solicitudes específicas este coste puede ser mayor. Consulte la información actualizada sobre el coste del límite de velocidad en la especificación de cada método.
Exchange Plus limita las llamadas a la API pública a un máximo de 100 puntos por minuto, teniendo en cuenta que cada llamada a la API pública tiene su coste (véase a continuación). Si se alcanza el límite de tasa de solicitudes, Exchange Plus responde con un error, envía un evento de desconexión al cliente y cierra la conexión WS. Exchange Plus continuará atendiendo al cliente a partir del siguiente minuto del calendario. En el siguiente ejemplo, el contador de solicitudes se restablecerá a las 11:02:00.000.
| Método | Descripción |
| GetTicker | Este método está diseñado para obtener información actual sobre el Ticker, incluidos datos sobre precios actuales, variaciones de precio y volumen en 24h, último evento de operación, etc., de determinados activos. |
| GetOrderBook | Este método permite al cliente recibir la instantánea actual del libro de órdenes para un par de negociación específico. |
| GetCandles | Mediante el método Candles, el cliente puede recibir velas OHLCV históricas de diferentes resoluciones y tipos de datos. El cliente puede indicar filtros adicionales de marco de tiempo y límite para hacer la respuesta más precisa a sus requisitos. |
| GetTradeHistory | Este método permite al cliente obtener datos históricos sobre las operaciones realizadas en el par de trading solicitado. El cliente puede complementar la solicitud de historial de operaciones con parámetros de filtro adicionales, como el período de tiempo, el rango de tradeIds, el lado, etc., para recibir las operaciones que coincidan con los parámetros de la solicitud. |
| GetServerTime | Este método se utiliza para obtener la hora actual en el servidor Exchange Plus. Puede ser útil para aplicaciones que necesiten sincronizarse con la hora del servidor. |
| GetPairsInfo | El método Pair Info permite al cliente recibir los parámetros de todos los pares de negociación admitidos. |
| GetCurrenciesInfo | El método de información de divisas permite al cliente recibir los parámetros de todas las divisas configuradas en Exchange Plus, así como la disponibilidad de depósito y retiro entre Exchange Plus y CEX.IO Wallet. |
| GetProcessingInfo | Esta solicitud permite al cliente recibir información detallada sobre las opciones disponibles para realizar depósitos desde carteras externas y retiros a carteras externas de cada criptomoneda admitida, incluyendo el nombre de la criptomoneda y las cadenas de bloques disponibles para depósitos/retiros. Además, para cada cadena de bloques admitida se indica el tipo de criptomoneda en dicha cadena, la disponibilidad actual de depósito/retiro, los importes mínimos para depósitos/retiros y las comisiones de retiro externas. La información de procesamiento hace al cliente más flexible a la hora de elegir la cadena de bloques deseada para recibir la dirección de depósito e iniciar retiros externos a través de una cadena de bloques determinada, de modo que el cliente utilice la forma más conveniente de transferir sus criptoactivos hacia o desde el ecosistema de CEX.IO. |
| SubscribeOrderBook | El cliente, al suscribirse a través de WebSocket, puede suscribirse al feed del libro de órdenes del par de negociación solicitado. En respuesta a la solicitud de suscripción al Libro de Órdenes, el cliente recibirá una instantánea actual (inicial) del libro de órdenes para el par solicitado con el número seqId indicado. Para rastrear las actualizaciones posteriores del Libro de Órdenes, el cliente debe suscribirse a través de WebSocket a los mensajes "order_book_increment", que contendrán el nombre del par de negociación, el número seqId y los deltas de niveles de precio de Bids y Asks. |
| UnSubscribeOrderBook | Cancelar la suscripción al canal del libro de órdenes. |
| SubscribeTrade | Mediante el método Trade Subscribe, el cliente puede suscribirse vía WebSocket a un flujo en tiempo real de eventos de negociación que ocurren en el par de trading solicitado. En respuesta a la solicitud Trade Subscribe, el cliente recibirá un identificador único de suscripción de negociación que deberá utilizarse posteriormente para cancelar la suscripción cuando ya no sea necesaria. El cliente debe suscribirse vía WebSocket a los mensajes "tradeHistorySnapshot" y "tradeUpdate" para recibir instantáneas iniciales y periódicas del historial de negociación, así como eventos de negociación en tiempo real para el par de trading solicitado. |
| UnSubscribeTrade | Cancele la suscripción al canal de trading. |
Ejemplo: obtener el ticker más reciente del par BTC-USD
oClient := TsgcWebSocketClient.Create(nil);
oCexPlus := TsgcWSAPI_CexPlus.Create(nil);
oCexPlus.Client := oClient;
oCexPlus.OnCexPlusConnect := OnCexPlusConnectEvent;
oCexPlus.OnCexPlusMessage := OnCexPlusMessageEvent;
oClient.Active := True;
procedure OnCexPlusConnectEvent(Sender: TObject);
begin
oCexPlus.GetTicker('BTC-USD');
end;
procedure OnCexPlusMessageEvent(Sender: TObject; Event, Msg: string);
begin
ShowMessage('Ticker data: ' + Msg);
end;
Llamadas a la API privada
Exchange Plus utiliza claves de API para permitir el acceso a las APIs privadas.
El cliente puede generar, configurar y gestionar claves de API, establecer niveles de permisos, direcciones IP en lista blanca para claves de API, etc., a través del Terminal Web de Exchange Plus en la sección de Gestión de Claves de API del perfil.
Límite de claves API: De forma predeterminada, el cliente puede tener hasta 5 claves API.
Para restringir el acceso a determinadas funcionalidades al usar claves API, debe definirse un conjunto específico de permisos para cada clave API. El conjunto de permisos definido puede editarse posteriormente si es necesario.
Los siguientes niveles de permiso están disponibles para las claves de API:
| Método | Descripción |
| GetCurrentFee | Este método indica las comisiones actuales en un momento específico, teniendo en cuenta el volumen de 30 días actualizado del cliente y el día de la semana (las comisiones pueden variar, por ejemplo, los fines de semana). |
| GetFeeStrategy | La estrategia de comisiones devuelve todas las opciones de comisiones que podrían aplicarse para el cliente, considerando el volumen de negociación del cliente, el día de la semana, los pares, el grupo de pares, etc. Este método proporciona información sobre la estrategia de comisiones general, que incluye todos los posibles valores de comisiones de negociación que se pueden aplicar para el cliente. Para recibir las comisiones de negociación actuales, basadas en el volumen de negociación de 30 días actual del cliente, el cliente debe usar el método [Current Fee]. Para recibir el volumen de negociación actual de 30 días, el cliente debe usar el método [Volume]. |
| GetVolume | Esta solicitud permite al cliente recibir su volumen de negociación de los últimos 30 días en equivalente USD. |
| CreateAccount | Esta solicitud permite al cliente crear una nueva subcuenta. De forma predeterminada, el cliente puede tener hasta 5 subcuentas, incluida la cuenta principal. |
| GetAccountStatus | Usando el método Account Status V3, el cliente puede conocer el saldo actual y su equivalente indicativo en la moneda convertida (por defecto "USD"), los importes bloqueados en órdenes abiertas (activas) de cada subcuenta y moneda. Si el saldo de comisión de trading está disponible para el cliente, la respuesta también contendrá datos generales del saldo de comisión de trading, como el nombre de la promoción, el nombre de la moneda, el saldo total y la fecha de vencimiento de dicha promoción en el saldo de comisión de trading. Es responsabilidad del cliente realizar un seguimiento del saldo de trading disponible de su subcuenta, que es el saldo actual de la subcuenta reducido por el importe bloqueado en órdenes abiertas (activas) de la subcuenta. |
| GetOrders | Esta solicitud permite al cliente obtener información sobre sus órdenes. |
| NewOrder | El cliente puede colocar nuevas órdenes a través de la API WebSocket usando Do My New Order Request. Junto con la respuesta a esta solicitud, Exchange Plus envía mensajes de Evento de Cuenta e Informe de Ejecución al cliente si la solicitud es exitosa. El mensaje de respuesta indica el último estado actualizado de la orden disponible en el sistema en el momento de enviar la respuesta. Si el cliente no recibió un mensaje de respuesta a Do My New Order Request, puede consultar el estado actual de la orden usando Get My Orders Request con el parámetro clientOrderId. Al enviar una solicitud de nueva orden, se recomienda encarecidamente utilizar el parámetro clientOrderId, que corresponde a la solicitud de nueva orden específica del lado del cliente. Exchange Plus evita colocar múltiples órdenes con el mismo clientOrderId. Si se identifican más de una nueva orden con el mismo clientOrderId y los mismos parámetros de orden, Exchange Plus coloca solo la primera orden y devuelve el estado de dicha orden al cliente en respuesta a las solicitudes de nueva orden posteriores con los mismos parámetros. Si se identifican más de una nueva orden con el mismo clientOrderId pero con diferentes parámetros de orden, Exchange Plus procesa solo la primera orden y rechaza las solicitudes de nueva orden posteriores con el mismo clientOrderId pero con diferentes parámetros de orden. |
| NewMarketOrder | Coloca una nueva orden de mercado. |
| NewLimitOrder | Coloca una nueva orden límite. |
| CancelOrder | El cliente puede cancelar órdenes. Junto con la respuesta a esta solicitud, Exchange Plus envía al cliente mensajes de Evento de Cuenta e Informe de Ejecución si la solicitud es exitosa. Además, si la solicitud de cancelación de una orden es rechazada, Exchange Plus envía un mensaje de Rechazo de Cancelación de Orden. |
| CancelAllOrders | El cliente puede cancelar todas las órdenes abiertas mediante la API WebSocket. Junto con la respuesta a esta solicitud, Exchange Plus iniciará el proceso de cancelación de todas las órdenes abiertas y enviará al cliente los mensajes de Evento de cuenta e Informe de ejecución correspondientes. |
| GetTransactionHistory | Esta solicitud permite al cliente consultar sus transacciones financieras (depósitos, retiradas, transferencias internas, comisiones u operaciones). |
| GetFundingHistory | Esta solicitud permite al cliente encontrar sus transacciones de depósito y retirada. |
| InternalTransfer | El cliente puede solicitar transferir dinero entre sus subcuentas o entre su cuenta principal y una subcuenta. Exchange Plus no cobra al cliente ninguna comisión por transferir fondos entre sus cuentas. Junto con la respuesta a esta solicitud, Exchange Plus envía mensajes de eventos de cuenta al cliente si la solicitud se realiza correctamente. |
| GetDepositAddress | El cliente puede utilizar este método para recibir una dirección criptográfica donde depositar criptomonedas. La dirección de depósito puede generarse para cuentas principales y subcuentas. La lista de blockchains disponibles para generar una dirección de depósito puede obtenerse a través de la solicitud Get Processing Info. |
| FundsDepositFromWallet | El cliente puede depositar fondos desde la cartera de CEX.IO a la cuenta Exchange Plus. El sistema evita el procesamiento de múltiples solicitudes de depósito con el mismo clientTxId. Si se reciben múltiples solicitudes de depósito con el mismo clientTxId, el sistema procesa únicamente la primera solicitud de depósito y rechaza la segunda y las siguientes solicitudes de depósito con el mismo clientTxId. |
| FundsWithdrawalToWallet | El cliente puede retirar fondos de la cuenta Exchange Plus a la billetera CEX.IO. El sistema evita múltiples solicitudes de retiro con el mismo clientTxId. Si se reciben varias solicitudes de retiro con el mismo clientTxId, el sistema procesa únicamente la primera y rechaza las solicitudes siguientes con el mismo clientTxId. |
| GetWalletBalance | Recupera la información del saldo de la cartera de CEX.IO. |
| SubscribeAccountEvents | Se suscribe a notificaciones de eventos de cuenta en tiempo real (cambios de saldo, ejecuciones de órdenes). |
| UnSubscribeAccountEvents | Cancela la suscripción a las notificaciones de eventos de cuenta. |
Ejemplo: obtener los pedidos.
oClient := TsgcWebSocketClient.Create(nil);
oCexPlus := TsgcWSAPI_CexPlus.Create(nil);
oCexPlus.Client := oClient;
oCexPlus.CexPlus.ApiKey := 'your-api-key';
oCexPlus.CexPlus.ApiSecret := 'your-api-secret';
oCexPlus.OnCexPlusAuthenticated := OnCexPlusAuthenticatedEvent;
oCexPlus.OnCexPlusMessage := OnCexPlusMessageEvent;
oClient.Active := True;
procedure OnCexPlusAuthenticatedEvent(Sender: TObject);
begin
oCexPlus.GetOrders();
end;
procedure OnCexPlusMessageEvent(Sender: TObject; Event, Msg: string);
begin
ShowMessage('Orders: ' + Msg);
end;