Aller au contenu

Développeurs

Guides de l'API

Achetez et vendez, exécutez des stratégies et lancez un token avec l'API Ora.

Les exemples de cette page utilisent le client ora() de la page API Ora.

Un trade s'exécute sur les wallets de l'un de vos tokens. Le trade de chaque wallet est une transaction à part, espacée des autres pour que deux d'entre elles n'arrivent jamais dans le même bloc.

GET /engine/token/{address}/positions liste chaque wallet avec son solde en tokens (unités brutes), son SOL et son PnL. Choisissez les wallets avec lesquels agir, ou laissez Ora choisir.

POST /engine/token/{address}/position/sell

const sale = await ora('POST', `/engine/token/${mint}/position/sell`, {
amountToken: '250000000000', // raw units, string; 250,000 tokens at 6 decimals
distribution: 'split', // split | each | concentrate (default)
slippage: 10, // percent, optional
// walletAddresses: ['…'], // optional; default: every holding wallet of the final layer
// maxDelay: 4000, // ms of jitter between wallets; must be > 0 with several named wallets
});
// sale.results → [{ walletAddress, status: 'submitted' | 'failed', signature?, error? }]
// sale.summary → { requested, filled, shortfall } (raw token units, strings)

split répartit le montant en proportion des avoirs de chaque wallet, each prélève le même montant sur chaque wallet, concentrate utilise le moins de wallets possible, en prenant les plus gros. Si vous demandez plus que ce que vous détenez, l'appel vend ce qu'il y a et signale le reste dans shortfall.

POST /engine/token/{address}/position/buy

const buy = await ora('POST', `/engine/token/${mint}/position/buy`, {
amountSol: 0.5, // total to spend, in SOL (the chain's gas asset)
distribution: 'each',
slippage: 10,
});
// buy.summary is in lamports: { requested, filled, shortfall }

Les deux acceptent priorityFee et bribeFee (en SOL) pour remplacer les frais par défaut. Pour une sortie totale en urgence, POST /engine/token/{address}/position/nuke vend tout d'un coup.

Les stratégies tradent pour vous pendant que votre script est hors ligne. Une vente Limit se déclenche quand la market cap du token atteint une cible :

POST /engine/strategies/limit-sells

await ora('POST', '/engine/strategies/limit-sells', {
mint,
strategies: [{
triggerMarketCapUsd: 250000,
sellTokens: '100000000000', // raw token units to sell when it fires
wallets: [walletA, walletB], // which of the token's wallets sell
durationSeconds: 86400, // optional expiry; omit to keep it until it fires
}],
});

La même structure existe pour les ventes Mirror (/engine/strategies/mirror-sells, qui vendent quand d'autres wallets achètent) et les ventes TWAP (/engine/strategies/twap-sells, étalées dans le temps). Chaque stratégie peut être listée, modifiée avec PATCH, activée, désactivée et supprimée ; GET /engine/strategies?mint=… liste toutes les stratégies d'un token. La page Stratégies explique le comportement de chaque type.

Chaque stratégie fonctionne aussi dans l'autre sens : ce sont les Mirror Buy, TWAP Buy et Limit Buy de l'app. Passez side: 'buy' à la création et la stratégie achète le token avec l'actif appairé des wallets : SOL ou ETH, ou le token appairé du lancement s'il en a un. Le côté est fixé à la création et ne peut pas être changé. Sans ce champ, une stratégie vend.

await ora('POST', '/engine/strategies/limit-sells', {
mint,
strategies: [{
side: 'buy',
triggerMarketCapUsd: 80000, // buys once the market cap drops to this
sellTokens: '500000000', // quote to spend, in base units (here 0.5 SOL)
wallets: [walletA],
}],
});

Les champs gardent leur nom, mais pour un achat tous les montants sont en unités de base de l'actif appairé :

Stratégie Ce que fait side: 'buy'
Mirror Répond aux ventes des autres wallets par des achats. sellTokens est le budget en actif appairé, tokensPerSellMin le minimum d'actif appairé par achat.
TWAP Dépense targetTokens d'actif appairé sur la durée.
Limit Se déclenche quand la market cap descend jusqu'à triggerMarketCapUsd et dépense sellTokens d'actif appairé.

Chaque stratégie que vous relisez porte side et executedAmount : les tokens vendus, ou l'actif appairé dépensé, jusqu'ici. Une stratégie active réserve ce qu'elle peut encore dépenser. GET /engine/token/{address}/positions l'indique par wallet dans lockedTokens (ventes) et lockedQuote (achats), et un achat ou une vente manuels ne dépensent que le reste.

Un lancement suit la même séquence d'appels que le formulaire de déploiement de l'app :

  1. POST /upload/{protocol} : envoyez le nom, le symbole, l'image et les liens. Renvoie l'ID des infos du token.
  2. POST /engine/deploy/plan : obtenez une organisation des wallets et l'estimation complète du coût pour vos réglages.
  3. POST /engine/prepare : créez le token et ses wallets à partir du plan. Renvoie le mint.
  4. POST /engine/fund : renvoie les transactions de financement que votre wallet signe (voir Transactions que vous signez). Envoyez-les, puis appelez POST /engine/fund/confirm.
  5. POST /engine/launch avec { "mint": "…" }. Le lancement s'exécute côté Ora.
  6. GET /engine/tokens/{mint}/stream : suivez-le en direct.

Le corps de prepare porte toutes les options du formulaire de déploiement (launchpad, actif appairé, layers, réglages propres au launchpad), il est donc long. Le plus simple pour en obtenir un correct est de configurer d'abord un lancement dans l'app, puis de le reproduire. Demandez au support Ora le schéma à jour de n'importe quelle route.