Marge API

Author profile photo
Équipe Quickex
1 décembre 2025
~5 lecture minimale

<h1>Pré-calcul du taux de change</h1>
<h2>Algorithme</h2>
Quickex utilise un système de taux dynamique pour générer des prévisions de taux de change, en s’appuyant sur l’analyse de la profondeur de marché des fournisseurs de liquidité. Alors que le flux par défaut analyse la profondeur du marché et renvoie un résultat calculé de manière réaliste, le paramètre <code>markup</code> peut influencer le taux renvoyé par l’algorithme de prédiction du taux.

Le paramètre <code>markup</code> influencera le pré-calcul du taux renvoyé par notre système de la manière suivante :
<div style=”font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,;”>A_final = A_calculated × (1 − (K_markup / 100))</div>
<div style=”margin-top: 10px;”>
<div style=”margin-top: 10px;”>
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<table style=”width: 100%; border-collapse: collapse; background: #111111; color: #f5f5f5;”>
<thead>
<tr>
<th style=”border: 1px solid #3a3a3a; padding: 10px 12px; text-align: left;”>Paramètre</th>
<th style=”border: 1px solid #3a3a3a; padding: 10px 12px; text-align: left;”>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>A_final</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Montant final à recevoir (prévisionnel)</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>A_calculated</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Montant avant application du markup</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>K_markup</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Pourcentage de markup</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
D’après la formule fournie, une valeur de <code>markup</code> de 0,3, appliquée à un échange de 1 BTC → USDT, donnera les résultats suivants et augmentera le prix prévisionnel final de 0,3&nbsp;% :
<div style=”font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,;”>Exemple : 49549.728053855135 * (1 – \dfrac{0.3}{100}) = 49401.07886969357</div>
<h2>API</h2>
Les données de taux peuvent être obtenues via un appel à l’API <code>v1</code> vers le point de terminaison <code>/api/v1/rates/public/one</code>. L’API <code>v1</code> ne nécessite ni autorisation par clé API ni liste blanche d’adresses IP.
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<table style=”width: 100%; border-collapse: collapse; background: #111111; color: #f5f5f5;”>
<thead>
<tr>
<th style=”border: 1px solid #3a3a3a; padding: 10px 12px; text-align: left;”>Paramètre</th>
<th style=”border: 1px solid #3a3a3a; padding: 10px 12px; text-align: left;”>Description</th>
<th style=”border: 1px solid #3a3a3a; padding: 10px 12px; text-align: left;”>Exemple</th>
</tr>
</thead>
<tbody>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>instrumentFromCurrencyTitle</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Devise source</td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”font-family: monospace;”>BTC</span></td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>instrumentFromNetworkTitle</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Réseau de la devise source</td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”font-family: monospace;”>BTC</span></td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>instrumentToCurrencyTitle</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Devise cible</td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”font-family: monospace;”>USDT</span></td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>instrumentToNetworkTitle</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Réseau de la devise cible</td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”font-family: monospace;”>TRC20</span></td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>rateMode</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>FLOATING / FIXED</td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”font-family: monospace;”>FLOATING</span></td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>claimedDepositAmount</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Montant du dépôt</td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”font-family: monospace;”>1</span></td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>markup</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”>Pourcentage de markup</td>
<td style=”border: 1px solid #3a3a3a; padding: 10px 12px;”><span style=”font-family: monospace;”>0.3</span></td>
</tr>
</tbody>
</table>
</div>
<div style=”background: #0d0d0d; border: 1px solid rgba(127,127,127,.3); border-radius: 14px; padding: 16px 18px; box-shadow: 0 1px 1px rgba(0,0,0,.2); margin-bottom: 16px; font-family: monospace; color: #dcdcdc;”>
<pre style=”margin: 0; line-height: 1.25; white-space: pre;”><span style=”color: #9cdcfe;”>GET</span> <span style=”color: #d1006c;”>/api/v1/rates/public/one
?instrumentFromCurrencyTitle=BTC
&amp;instrumentFromNetworkTitle=BTC
&amp;instrumentToCurrencyTitle=USDT
&amp;instrumentToNetworkTitle=TRC20
&amp;rateMode=FLOATING
&amp;claimedDepositAmount=1
&amp;markup=0.3</span>

{
‘<span style=”color: #9cdcfe;”>instrumentFrom</span>’: {
‘<span style=”color: #9cdcfe;”>currencyTitle</span>’: ‘BTC’,
‘<span style=”color: #9cdcfe;”>networkTitle</span>’: ‘BTC’,
‘<span style=”color: #9cdcfe;”>precisionDecimals</span>’: 11
},
‘<span style=”color: #9cdcfe;”>instrumentTo</span>’: {
‘<span style=”color: #9cdcfe;”>currencyTitle</span>’: ‘USDT’,
‘<span style=”color: #9cdcfe;”>networkTitle</span>’: ‘TRC20’,
‘<span style=”color: #9cdcfe;”>precisionDecimals</span>’: 1
},
‘<span style=”color: #9cdcfe;”>depositRules</span>’: {
‘<span style=”color: #9cdcfe;”>minAmount</span>’: ‘0.0010202831699481001984’,
‘<span style=”color: #9cdcfe;”>maxAmount</span>’: ‘0’
},
‘<span style=”color: #9cdcfe;”>withdrawalRules</span>’: {
‘<span style=”color: #9cdcfe;”>minAmount</span>’: ‘51.324600057525118367’,
‘<span style=”color: #9cdcfe;”>maxAmount</span>’: ‘0’,
‘<span style=”color: #9cdcfe;”>withdrawalFeeRules</span>’: {
‘<span style=”color: #9cdcfe;”>maxAmount</span>’: ‘1’,
‘<span style=”color: #9cdcfe;”>minAmount</span>’: ‘1’
}
},
‘<span style=”color: #9cdcfe;”>minConfirmationsToWithdraw</span>’: 2,
‘<span style=”color: #9cdcfe;”>minConfirmationsToTrade</span>’: 2,
‘<span style=”color: #9cdcfe;”>updatedAt</span>’: ‘2024-08-05T13:31:44.315Z’,
‘<span style=”color: #9cdcfe;”>liquidityProviderPublicCode</span>’: ‘radio’,
‘<span style=”color: #9cdcfe;”>amountToGet</span>’: ‘50201.90689595’,
‘<span style=”color: #9cdcfe;”>amountToGive</span>’: ‘1’,
‘<span style=”color: #9cdcfe;”>marketMinAmount</span>’: ‘0.1’,
‘<span style=”color: #9cdcfe;”>enableFixedRate</span>’: <span style=”color: #569cd6;”>true</span>,
‘<span style=”color: #9cdcfe;”>amountToGiveCurrencyTitle</span>’: ‘BTC’,
‘<span style=”color: #9cdcfe;”>rateMode</span>’: ‘FLOATING’,
‘<span style=”color: #9cdcfe;”>finalNetworkFeeAmount</span>’: ‘0’,
‘<span style=”color: #9cdcfe;”>platformFee_Absolute</span>’: <span style=”color: #569cd6;”>null</span>,
‘<span style=”color: #9cdcfe;”>liquidityProviderQuotes</span>’: {
‘<span style=”color: #9cdcfe;”>sellQuote</span>’: {
‘<span style=”color: #9cdcfe;”>baseValue</span>’: ‘1’,
‘<span style=”color: #9cdcfe;”>quoteValue</span>’: ‘50304.27’
},
‘<span style=”color: #9cdcfe;”>buyQuote</span>’: {
‘<span style=”color: #9cdcfe;”>baseValue</span>’: ‘50294.99’,
‘<span style=”color: #9cdcfe;”>quoteValue</span>’: ‘1’
}
},
‘<span style=”color: #9cdcfe;”>price</span>’: ‘50201.90689595’,
‘<span style=”color: #9cdcfe;”>marketLeftPrice</span>’: ‘50304.27’,
‘<span style=”color: #9cdcfe;”>marketRightPrice</span>’: ‘0.000019882696069727819809’,
‘<span style=”color: #9cdcfe;”>marketAmountToGet</span>’: ‘50243.798064469251204’,
‘<span style=”color: #9cdcfe;”>marketAmountToGetUSDT</span>’: ‘50243.798064469251204’,
‘<span style=”color: #9cdcfe;”>quotesWithoutNetworkFee</span>’: {
‘<span style=”color: #9cdcfe;”>sellQuote</span>’: {
‘<span style=”color: #9cdcfe;”>baseValue</span>’: ‘1’,
‘<span style=”color: #9cdcfe;”>quoteValue</span>’: ‘50202.90689595’
},
‘<span style=”color: #9cdcfe;”>buyQuote</span>’: {
‘<span style=”color: #9cdcfe;”>baseValue</span>’: ‘50294.99’,
‘<span style=”color: #9cdcfe;”>quoteValue</span>’: ‘0.997985’
}
},
‘<span style=”color: #9cdcfe;”>quotes</span>’: {
‘<span style=”color: #9cdcfe;”>sellQuote</span>’: {
‘<span style=”color: #9cdcfe;”>baseValue</span>’: ‘1’,
‘<span style=”color: #9cdcfe;”>quoteValue</span>’: ‘50201.90689595’
},
‘<span style=”color: #9cdcfe;”>buyQuote</span>’: {
‘<span style=”color: #9cdcfe;”>baseValue</span>’: ‘50294.99’,
‘<span style=”color: #9cdcfe;”>quoteValue</span>’: ‘0.99796512097183797717’
}
},
‘<span style=”color: #d1006c;”>markup</span>’: ‘0.3’
}
</pre>
</div>

<h1>Paramètre de markup dans le flux de commande</h1>
<h2>Algorithme</h2>
Le paramètre de markup doit également être transmis lors de la création de la commande afin de garantir une commission de commande correcte. Lorsque le paramètre de markup est transmis, Quickex applique la formule suivante à l’algorithme de calcul de la commission de la commande :
<div style=”font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,;”>A_{withdrawal} = A_{exchange} * (1 – \dfrac {(C_{platform\ (\%)} + K_{markup})}{100})</div>
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<table style=”width: 100%; border-collapse: collapse; background: #111111; color: #f5f5f5;”>
<tbody>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>A<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>withdrawal</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Montant de devise envoyé au client en résultat de l’échange</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>A<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>exchange</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Montant de devise dont Quickex disposait après l’exécution de notre stratégie de trading</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>C<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>platform (%)</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Pourcentage de commission défini par Quickex</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>K<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>markup</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Valeur du paramètre de markup</td>
</tr>
</tbody>
</table>
</div>
D’après la formule fournie, une valeur de <code>markup</code> de 0,3, transmise lors de la création de la commande, augmentera le pourcentage de commission de Quickex de 0,3. Dans l’exemple suivant, la commission de Quickex est fixée à 1&nbsp;% :
<div style=”font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,;”>A_{withdrawal} = A_{exchange} * (1 – \dfrac {1 + 0.3}{100})</div>
En reprenant l’exemple précédent, un échange de 1 BTC vers USDT basé sur le prix du marché de <span class=”notion-enable-hover” spellcheck=”false” data-token-index=”1″>50243.798064469251204 </span>BTC : USDT donnera le montant de retrait suivant pour le client :
<div style=”font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,;”>50243.798064469251204 * (1 – \dfrac{1 + 0.3}{100}) = 49590.62868963115</div>
D’après la formule fournie, une valeur de <code>markup</code> de 0,3, transmise lors de la création de la commande, augmentera le pourcentage de commission de Quickex de 0,3.
Après qu’un échange avec un paramètre de markup est passé à l’état <code>COMPLETED</code>, le paramètre de markup sera utilisé dans la formule de calcul de la marge du partenaire :
<div style=”font-family: ui-monospace,SFMono-Regular,Menlo,Consolas,;”>C_{affiliate} = (C_{platform} * \dfrac{C_{affiliate\ (\%)}}{100}) + (C_{platform} * \dfrac{K_{markup}}{100})</div>
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<table style=”width: 100%; border-collapse: collapse; background: #111111; color: #f5f5f5;”>
<tbody>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>C<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>affiliate</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Montant de devise envoyé au portefeuille de l’affilié par échange (marge de l’affilié)</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>C<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>platform</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Montant de devise que Quickex a gagné grâce à l’échange (marge de la plateforme)</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>C<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>affiliate (%)</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Pourcentage de commission défini pour l’affilié</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px; width: 30%; font-size: 1.05rem;”>K<sub style=”font-style: normal; font-size: 0.75em; margin-left: 2px;”>markup</sub></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Valeur du paramètre de markup</td>
</tr>
</tbody>
</table>
</div>
<h2>Transmission du paramètre <code>markup</code></h2>
Lors de la création de la commande, l’API Quickex accepte le paramètre <code>markup</code> en plus des autres paramètres de création de commande :
<div style=”background: #0d0d0d; border: 1px solid rgba(127,127,127,.3); border-radius: 14px; padding: 16px 18px; box-shadow: 0 1px 1px rgba(0,0,0,.2); margin-bottom: 16px; font-family: monospace; color: #dcdcdc; line-height: 1.5; white-space: pre;”><span style=”color: #9cdcfe;”>{</span>
<span style=”color: #9cdcfe;”>’rateMode'</span>: <span style=”color: #ce9178;”>’FLOATING'</span>,
<span style=”color: #9cdcfe;”>’instrumentFrom'</span>: {
<span style=”color: #9cdcfe;”>’currencyTitle'</span>: <span style=”color: #ce9178;”>’USDT'</span>,
<span style=”color: #9cdcfe;”>’networkTitle'</span>: <span style=”color: #ce9178;”>’TRC20′</span>
},
<span style=”color: #9cdcfe;”>’instrumentTo'</span>: {
<span style=”color: #9cdcfe;”>’currencyTitle'</span>: <span style=”color: #ce9178;”>’BTC'</span>,
<span style=”color: #9cdcfe;”>’networkTitle'</span>: <span style=”color: #ce9178;”>’BTC'</span>
},
<span style=”color: #9cdcfe;”>’destinationAddress'</span>: <span style=”color: #ce9178;”>’bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh'</span>,
<span style=”color: #9cdcfe;”>’destinationAddressMemo'</span>: <span style=”color: #569cd6;”>null</span>,
<span style=”color: #9cdcfe;”>’refundAddress'</span>: <span style=”color: #569cd6;”>null</span>,
<span style=”color: #9cdcfe;”>’refundAddressMemo'</span>: <span style=”color: #569cd6;”>null</span>,
<span style=”color: #9cdcfe;”>’claimedNetworkFee'</span>: <span style=”color: #569cd6;”>null</span>,
<span style=”color: #9cdcfe;”>’legacyOrderId'</span>: <span style=”color: #569cd6;”>null</span>,
<span style=”color: #9cdcfe;”>’referrerId'</span>: <span style=”color: #ce9178;”>’aff_616′</span>,
<span style=”color: #9cdcfe;”>’claimedDepositAmount'</span>: <span style=”color: #ce9178;”>’125000′</span>,
<span style=”color: #9cdcfe;”>’utmData'</span>: [],
<span style=”color: #9cdcfe;”>’browserFingerprint'</span>: <span style=”color: #ce9178;”>’6b3add86bec11616427d069556a33548′</span>,
<span style=”color: #9cdcfe;”>’markup'</span>: <span style=”color: #d1006c;”>’0.2′</span> <span style=”color: #6a9955;”>// &lt;— here</span>
<span style=”color: #9cdcfe;”>}</span></div>
La valeur multiplicatrice de <code>markup</code> est transmise avec les autres paramètres.
<h1>Utilisation de l’API v2</h1>
L’utilisation des points de terminaison de l’API <code>v2</code> nécessite une configuration d’autorisation supplémentaire. Sans les paramètres d’autorisation nécessaires, les points de terminaison <code>v2</code> renverront des erreurs <code>403 Forbidden</code>.
L’intégration se compose de deux étapes : la création d’une clé d’API et l’intégration de son utilisation dans les requêtes d’API. En créant une clé d’API, nos clients B2B reçoivent une paire de clés pour signer leurs requêtes, ainsi qu’une liste d’adresses IP en liste blanche pouvant accéder aux points de terminaison de l’API.
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<div style=”display: flex; align-items: center; gap: 12px; padding: 10px 18px; border-radius: 9999px; background: #242424; color: #f5f5f5;”>
<div style=”width: 26px; height: 26px; border-radius: 50%; background: #facc15; color: #111111; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 18px; flex-shrink: 0;”>!</div>
<div style=”font-size: 0.95rem;”><strong>Remarque&nbsp;:</strong>
vous devez disposer d’un cookie d’autorisation actif pour effectuer des requêtes
sur
<span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em; margin: 0 2px;”>/api/v1/users/*</span>
.</div>
</div>
</div>
<h2>Création d’une clé d’API</h2>
Lors de la création de la clé d’API, un tableau d’adresses IP en liste blanche doit être transmis :
<div style=”background: #0d0d0d; border: 1px solid rgba(127,127,127,.3); border-radius: 14px; padding: 16px 18px; box-shadow: 0 1px 1px rgba(0,0,0,.2); margin-bottom: 16px; font-family: monospace; color: #dcdcdc;”>
<pre style=”margin: 0; line-height: 1.2; white-space: pre;”><span style=”color: #9cdcfe;”>POST</span> <span style=”color: #d1006c;”>/api/v1/users/generate-api-key</span>
<span style=”color: #9cdcfe;”>Request:</span>
{
  <span style=”color: #9cdcfe;”>’name'</span>: <span style=”color: #ce9178;”>’test'</span>,
  <span style=”color: #9cdcfe;”>’whiteListIp'</span>: [<span style=”color: #ce9178;”>’127.0.0.1′</span>],
  <span style=”color: #9cdcfe;”>’isActive'</span>: <span style=”color: #569cd6;”>true</span>
}
<span style=”color: #9cdcfe;”>Response:</span>
{
  <span style=”color: #9cdcfe;”>’apiId'</span>: 40,
  <span style=”color: #9cdcfe;”>’name'</span>: <span style=”color: #ce9178;”>’test'</span>,
  <span style=”color: #9cdcfe;”>’isActive'</span>: <span style=”color: #569cd6;”>true</span>,
  <span style=”color: #9cdcfe;”>’publicKey'</span>: <span style=”color: #ce9178;”>’ZgzycV6Sf78BZKuyIAiz+0Bor002+0/rx1gLKsmYCsY='</span>,
  <span style=”color: #9cdcfe;”>’secretKey'</span>: <span style=”color: #ce9178;”>’a482a8e3a3ff9aeadefb11d3d8c11253e7e8412e05ef2b8599016cc87a64b7d6′</span>,
  <span style=”color: #9cdcfe;”>’whiteListIp'</span>: [
    <span style=”color: #ce9178;”>’127.0.0.1′</span>
  ],
  <span style=”color: #9cdcfe;”>’createdAt'</span>: <span style=”color: #ce9178;”>’2024-08-05T13:54:18.427Z'</span>
}
</pre>
</div>
La réponse contiendra la paire de clés nécessaire pour l’autorisation de l’API <span class=”notion-enable-hover” spellcheck=”false” data-token-index=”1″>v2 </span>.
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<div style=”display: flex; align-items: center; gap: 12px; padding: 10px 18px; border-radius: 9999px; background: #242424; color: #f5f5f5;”>
<div style=”width: 26px; height: 26px; border-radius: 50%; background: #facc15; color: #111111; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 18px; flex-shrink: 0;”>!</div>
<div style=”font-size: 0.95rem;”><strong>Remarque&nbsp;:</strong>
Le champ
<span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em; margin: 0 2px;”>secretKey</span>
ne sera affiché qu’une seule fois, lors de la création de la clé d’API. Nous vous conseillons de le sauvegarder immédiatement après la création de la clé d’API.</div>
</div>
</div>
<h2>Lister vos clés d’API</h2>
Si votre intégration nécessite l’utilisation de plus d’une clé d’API, vous pouvez facilement les lister via le point de terminaison <code>list</code> :
<div style=”background: #0d0d0d; border: 1px solid rgba(127,127,127,.3); border-radius: 14px; padding: 16px 18px; box-shadow: 0 1px 1px rgba(0,0,0,.2); margin-bottom: 16px; font-family: monospace; color: #dcdcdc;”>
<pre style=”margin: 0; line-height: 1.2; white-space: pre;”><span style=”color: #9cdcfe;”>GET</span> <span style=”color: #d1006c;”>/api/v1/users/list-api-key</span>
[
  {
    <span style=”color: #9cdcfe;”>’apiId'</span>: 40,
    <span style=”color: #9cdcfe;”>’name'</span>: <span style=”color: #ce9178;”>’test'</span>,
    <span style=”color: #9cdcfe;”>’isActive'</span>: <span style=”color: #569cd6;”>true</span>,
    <span style=”color: #9cdcfe;”>’settings'</span>: {},
    <span style=”color: #9cdcfe;”>’publicKey'</span>: <span style=”color: #ce9178;”>’ZgzycV6Sf78BZKuyIAiz+0Bor002+0/rx1gLKsmYCsY='</span>,
    <span style=”color: #9cdcfe;”>’whiteListIp'</span>: [
      <span style=”color: #ce9178;”>’127.0.0.1′</span>
    ],
    <span style=”color: #9cdcfe;”>’createdAt'</span>: <span style=”color: #ce9178;”>’2024-08-05T13:54:18.427Z'</span>
  }
]
</pre>
</div>
<h2>Gestion de vos clés d’API</h2>
La gestion des clés d’API existantes peut être effectuée via notre ligne de support client B2B. Cela inclut&nbsp;:
<ul>
  <li>Suppression de clés d’API</li>
  <li>Ajout de nouvelles adresses IP en liste blanche à une clé d’API existante</li>
  <li>Mise à jour et ajout de paramètres pour une clé d’API (par ex.&nbsp;: valeurs min/max pour la valeur de markup)</li>
  <li>Désactivation de clés d’API</li>
</ul>
<h2>Utilisation de la clé d’API</h2>
L’API <code>v2</code> requiert 3 en-têtes à définir pour chaque requête&nbsp;:
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<table style=”width: 100%; border-collapse: collapse; background: #111111; color: #f5f5f5;”>
<tbody>
<tr>
<th style=”border: 1px solid #3a3a3a; padding: 12px 16px; text-align: left;”>En-tête</th>
<th style=”border: 1px solid #3a3a3a; padding: 12px 16px; text-align: left;”>Valeur</th>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>x-api-public-key</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Votre clé publique obtenue lors de la création de la clé d’API</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>x-api-timestamp</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Horodatage UNIX</td>
</tr>
<tr>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”><span style=”display: inline-block; padding: 2px 8px; border-radius: 4px; background: #333333; color: #f97373; font-family: monospace; font-size: 0.9em;”>x-api-signature</span></td>
<td style=”border: 1px solid #3a3a3a; padding: 12px 16px;”>Une signature de la requête</td>
</tr>
</tbody>
</table>
</div>
La valeur de la signature est générée à l’aide de <span class=”notion-enable-hover” spellcheck=”false” data-token-index=”1″>hmac sha256</span>. Les données transmises sont la concaténation, sous forme de chaîne, de l’horodatage, de la représentation sous forme de chaîne du corps de la requête et de la clé publique, tandis que la clé privée est utilisée comme clé pour la fonction <span class=”notion-enable-hover” spellcheck=”false” data-token-index=”3″>hmac</span> :
<div style=”background: #0d0d0d; border: 1px solid rgba(127,127,127,.3); border-radius: 14px; padding: 16px 18px; box-shadow: 0 1px 1px rgba(0,0,0,.2); margin-bottom: 16px; font-family: monospace; color: #dcdcdc; line-height: 1.5; white-space: pre;”>

<span style=”color: #569cd6;”>function</span> signRequest(requestBody) {
<span style=”color: #569cd6;”>const</span> timestamp = <span style=”color: #569cd6;”>new</span> Date().getTime();
<span style=”color: #569cd6;”>const</span> publicKey = <span style=”color: #ce9178;”>’ZgzycV6Sf78BZKuyIAiz+0Bor002+0/rx1gLKsmYCsY='</span>;
<span style=”color: #569cd6;”>const</span> privateKey = <span style=”color: #ce9178;”>’a482a8e3a3ff9aeadefb11d3d8c11253e7e8412e05ef2b8599016cc87a64b7d6′</span>;

<span style=”color: #569cd6;”>const</span> encoder = <span style=”color: #569cd6;”>new</span> TextEncoder();
<span style=”color: #569cd6;”>const</span> data = encoder.encode(
timestamp + JSON.stringify(requestBody) + publicKey,
);

<span style=”color: #569cd6;”>const</span> hmac = createHmac(<span style=”color: #ce9178;”>’sha256′</span>, privateKey);
<span style=”color: #569cd6;”>const</span> dataSign = hmac.update(data);
<span style=”color: #569cd6;”>const</span> signature = dataSign.digest(<span style=”color: #ce9178;”>’base64′</span>);

<span style=”color: #569cd6;”>return</span> signature;
}

signRequest({ myKey: <span style=”color: #ce9178;”>’myValue'</span> })

</div>
<h2>Exemple de code d’intégration</h2>
<div style=”margin: 16px 0; font-family: system-ui, -apple-system, BlinkMacSystemFont,;”>
<div style=”display: flex; align-items: center; gap: 12px; padding: 10px 18px; border-radius: 9999px; background: #242424; color: #e5e5e5;”>
<div style=”width: 24px; height: 24px; border-radius: 6px; background: #3b82f6; display: flex; align-items: center; justify-content: center; color: #ffffff; font-weight: bold; font-size: 16px; flex-shrink: 0;”>i</div>
<div style=”font-size: 0.95rem;”>Pour la version Python, consultez notre
<a style=”color: #e5e5e5; text-decoration: underline;” href=”https://pypi.org/project/quickex-sdk/”>
SDK sur PyPi
</a></div>
<div></div>
</div>
</div>
<div style=”background: #0d0d0d; border: 1px solid rgba(127,127,127,.3); border-radius: 14px; padding: 16px 18px; box-shadow: 0 1px 1px rgba(0,0,0,.2); margin-bottom: 16px; font-family: monospace; color: #dcdcdc; line-height: 1.5; white-space: pre;”>

<span style=”color: #569cd6;”>const</span> { createHmac } = require(<span style=”color: #ce9178;”>’crypto'</span>);

<span style=”color: #569cd6;”>const</span> API_PREFIX = <span style=”color: #ce9178;”>’https://quickex.io/api/'</span>;
<span style=”color: #569cd6;”>const</span> PUBKEY = <span style=”color: #ce9178;”>’public_key'</span>; <span style=”color: #6a9955;”>// changeme</span>
<span style=”color: #569cd6;”>const</span> PRIVKEY = <span style=”color: #ce9178;”>’private_key'</span>; <span style=”color: #6a9955;”>// changeme</span>

<span style=”color: #569cd6;”>function</span> signRequest(requestBody, timestamp) {
<span style=”color: #569cd6;”>const</span> encoder = <span style=”color: #569cd6;”>new</span> TextEncoder();
<span style=”color: #569cd6;”>const</span> data = encoder.encode(timestamp + JSON.stringify(requestBody) + PUBKEY);

<span style=”color: #569cd6;”>const</span> hmac = createHmac(<span style=”color: #ce9178;”>’sha256′</span>, PRIVKEY);
<span style=”color: #569cd6;”>const</span> dataSign = hmac.update(data);
<span style=”color: #569cd6;”>const</span> signature = dataSign.digest(<span style=”color: #ce9178;”>’base64′</span>);

<span style=”color: #569cd6;”>return</span> signature;
}

<span style=”color: #569cd6;”>async function</span> createOrder() {
<span style=”color: #569cd6;”>const</span> clientBrowserFingerprint = <span style=”color: #ce9178;”>’6b3add86bec11616427d069556a33548′</span>;
<span style=”color: #569cd6;”>const</span> orderRateMode = <span style=”color: #ce9178;”>’FLOATING'</span>;
<span style=”color: #569cd6;”>const</span> depositAmount = <span style=”color: #ce9178;”>’1′</span>;
<span style=”color: #569cd6;”>const</span> clientDestinationAddress = <span style=”color: #ce9178;”>’TUhw6S1HyXDhycKvTec3x7HNGQfNn3Vhpc'</span>;
<span style=”color: #569cd6;”>const</span> clientDestinationAddressMemo = <span style=”color: #569cd6;”>null</span>;
<span style=”color: #569cd6;”>const</span> markup = <span style=”color: #ce9178;”>’0.3′</span>;
<span style=”color: #569cd6;”>const</span> instrumentFromCurrencyTitle = <span style=”color: #ce9178;”>’BTC'</span>;
<span style=”color: #569cd6;”>const</span> instrumentFromNetworkTitle = <span style=”color: #ce9178;”>’BTC'</span>;

<span style=”color: #569cd6;”>const</span> instrumentToCurrencyTitle = <span style=”color: #ce9178;”>’USDT'</span>;
<span style=”color: #569cd6;”>const</span> instrumentToNetworkTitle = <span style=”color: #ce9178;”>’TRC20′</span>;

<span style=”color: #6a9955;”>// Étape 1. Préparer le corps de la requête createOrder en utilisant les données de taux obtenues</span>

<span style=”color: #569cd6;”>const</span> createOrderRequestBody = {
rateMode: orderRateMode,
instrumentFrom: {
currencyTitle: instrumentFromCurrencyTitle,
networkTitle: instrumentFromNetworkTitle,
},
instrumentTo: {
currencyTitle: instrumentToCurrencyTitle,
networkTitle: instrumentToNetworkTitle,
},
destinationAddress: clientDestinationAddress,
destinationAddressMemo: clientDestinationAddressMemo,
refundAddress: <span style=”color: #569cd6;”>null</span>,
refundAddressMemo: <span style=”color: #569cd6;”>null</span>,
markup: markup,
claimedNetworkFee: <span style=”color: #569cd6;”>null</span>,
legacyOrderId: <span style=”color: #569cd6;”>null</span>,
referrerId: <span style=”color: #569cd6;”>null</span>,
claimedDepositAmount: depositAmount,
utmData: [],
browserFingerprint: clientBrowserFingerprint,
};

<span style=”color: #6a9955;”>// Étape 2. Préparer la signature à partir de la paire de clés et des données de la requête createOrder</span>

<span style=”color: #569cd6;”>const</span> timestamp = <span style=”color: #569cd6;”>new</span> Date().getTime();
<span style=”color: #569cd6;”>const</span> signature = signRequest(createOrderRequestBody, timestamp);

<span style=”color: #6a9955;”>// Étape 3. Appeler le point de terminaison API v2 create-order</span>

<span style=”color: #569cd6;”>const</span> order = JSON.parse(
<span style=”color: #569cd6;”>await</span> (
<span style=”color: #569cd6;”>await</span> fetch(<span style=”color: #ce9178;”>`${API_PREFIX}v2/orders/public/create`</span>, {
method: <span style=”color: #ce9178;”>’POST'</span>,
headers: {
<span style=”color: #ce9178;”>’x-api-public-key'</span>: PUBKEY,
<span style=”color: #ce9178;”>’x-api-timestamp'</span>: timestamp,
<span style=”color: #ce9178;”>’x-api-signature'</span>: signature,
<span style=”color: #ce9178;”>’content-type'</span>: <span style=”color: #ce9178;”>’application/json; charset=utf-8′</span>,
},
body: JSON.stringify(createOrderRequestBody),
})
).text(),
);

console.log(<span style=”color: #ce9178;”>’order'</span>, order);
}

<span style=”color: #569cd6;”>void</span> createOrder();

</div>

Partagez cet article :