openapi: 3.1.0 info: title: DFlow Aggregator admin order API description: DFlow Aggregator API license: name: BUSL-1.1 version: 0.1.0 servers: - url: https://quote-api.dflow.net security: - api_key: [] tags: - name: order description: Order API endpoints paths: /order: get: tags: - order summary: Returns a quote and optionally a transaction operationId: order_handler parameters: - name: userPublicKey in: query description: 'Base58-encoded address of the swapper''s wallet. If specified, the response will include a transaction allowing the user to submit the order.' required: false schema: type: string - name: inputMint in: query description: Base58-encoded input mint address required: true schema: type: string - name: outputMint in: query description: Base58-encoded output mint address required: true schema: type: string - name: amount in: query description: Input amount as a scaled integer. For example, 1 SOL is 1000000000. required: true schema: type: integer format: int64 minimum: 0 - name: slippageBps in: query description: "Max allowed slippage for the swap. Default is \"auto\". Allowed values are:\n- a u16 which specifies the maximum allowed slippage in basis points\n- the string value \"auto\", where the server determines the maximum allowed slippage\n automatically" required: false schema: $ref: '#/components/schemas/SlippageTolerance' - name: perLegSlippage in: query description: 'If true or unspecified, per-leg slippage checks are enabled. If false, per-leg slippage checks are disabled.' required: false schema: type: boolean - name: predictionMarketSlippageBps in: query description: "Max allowed slippage for prediction market orders. Allowed values are:\n- a u16 which specifies the maximum allowed slippage in basis points\n- the string value \"auto\", where the server determines the maximum allowed slippage\n automatically\n\nIf specified as a u16:\n - must be greater than or equal to `slippage_bps`\n - this value will be used as the slippage for prediction market orders\n\nIf unspecified or \"auto\":\n - the server determines the maximum allowed slippage for prediction market orders\n\nThis will be the slippage value included in the created Prediction Order. This parameter is\nnot used in routing, but only affects the minimum amount of Outcome mint that a prediction\norder must produce to fill successfully." required: false schema: $ref: '#/components/schemas/SlippageTolerance' - name: priceImpactTolerancePct in: query description: 'If specified, the API will return an error if the price impact of the route is greater than the specified percentage. If unspecified, the server will determine the threshold. For example, 10 is 10% and 100 is 100%.' required: false schema: type: integer format: int32 minimum: 0 - name: dexes in: query description: Comma-separated list of DEXes to include. If not specified, all DEXes will be included. required: false schema: type: string - name: excludeDexes in: query description: Comma-separated list of DEXes to exclude. If not specified, all DEXes will be included. required: false schema: type: string - name: onlyDirectRoutes in: query description: If true, only use single-leg routes required: false schema: type: boolean - name: maxRouteLength in: query description: 'If specified, the route will be limited to the specified number of legs. Ignored if `only_direct_routes` is true.' required: false schema: type: integer format: int32 minimum: 0 - name: onlyJitRoutes in: query description: If true, only use JIT routes. Every leg in the route will use the JIT router. required: false schema: type: boolean - name: forJitoBundle in: query description: 'If true, only use routes that are compatible with Jito bundles. This should only be specified as true if the swap will be executed in a Jito bundle. Default is false.' required: false schema: type: boolean - name: allowSyncExec in: query description: If true, allow synchronous execution. Default is true. required: false schema: type: boolean - name: allowAsyncExec in: query description: If true, allow asynchronous execution. Default is true. required: false schema: type: boolean - name: restrictRevertMint in: query description: 'If true, enforces that the input mint must be the revert mint for orders that use asynchronous execution. Default is false.' required: false schema: type: boolean - name: platformFeeMode in: query description: 'Optional platform fee mode. If not specified, the default is `outputMint`. For async prediction market swaps, this is ignored, and the platform fee is paid in the stablecoin mint.' required: false schema: $ref: '#/components/schemas/PlatformFeeMode' - name: platformFeeBps in: query description: 'Optional platform fee in basis points. This should only be nonzero if the swap will collect the platform fee. The fee account must be able to collect the fee mint at execution time.' required: false schema: type: integer format: int32 minimum: 0 - name: platformFeeScale in: query description: 'Optional platform fee scale for native prediction market swaps and async prediction market swaps, with 3 decimals. This should only be nonzero if the swap will collect the platform fee. The fee account must be able to collect the fee mint at fill time. Must be >= 0 and < 1000. For example, a value of 50 means 0.050.' required: false schema: type: integer format: int32 minimum: 0 - name: feeAccount in: query description: 'Base58-encoded address of the token account that will receive the platform fee if a platform fee applies to the swap. If specified, this account''s mint must match the fee mint for the swap. This must be specified if the platform fee is nonzero.' required: false schema: type: string - name: positiveSlippageFeeAccount in: query description: 'Base58-encoded address of the token account that will receive the positive slippage fee. This must be a token account for the output mint, regardless of the platform fee mode. If at swap execution time this account can''t receive the positive slippage fee, then the positive slippage fee transfer is skipped. If the platform fee mode is `outputMint` and the platform fee account is specified, then this must be unspecified (in which case the platform fee account will be used) or match the platform fee account. Otherwise, this must be specified.' required: false schema: type: string - name: positiveSlippageLimitPct in: query description: 'Limit on the positive slippage fee in percent. The positive slippage fee is limited to the lesser of (1) the excess actual out amount above the quoted amount and (2) this percentage of the actual out amount after platform fee.' required: false schema: type: integer format: int32 minimum: 0 - name: sponsor in: query description: 'Base58-encoded address of the sponsor''s wallet. If specified, the sponsor will pay the transaction fee and for token account creation, and both the user and the sponsor must sign the swap transaction. This can be used to implement gasless swaps. Cannot be specified alongside `predictionMarketInitPayer` parameter.' required: false schema: type: string - name: sponsorExec in: query description: 'If true, the sponsor will be the executor of the swap for sponsored swaps. If false, the user will be the executor of the swap for sponsored swaps. Default is true.' required: false schema: type: boolean - name: destinationTokenAccount in: query description: 'Base58-encoded address of the account that will receive the output token. This is either the address of the destination token account, or, if the output is native SOL, the address of the destination wallet. If both `destinationTokenAccount` and `destinationWallet` are unspecified, the user''s associated token account for the output mint will be used if the output isn''t native SOL, and the user''s wallet will be used if the output is native SOL. If the output isn''t native SOL, the specified account must exist before the swap executes, or else the swap will fail. Mutually exclusive with `destinationWallet`.' required: false schema: type: string - name: destinationWallet in: query description: "Base58-encoded address of the wallet that will receive the output token. Mutually exclusive\nwith `destinationTokenAccount`. If specified:\n1. If the swap outputs native SOL, the transaction will output native SOL to the specified\n wallet.\n2. If the swap outputs wrapped SOL or an SPL token, the transaction will send output to the\n specified wallet's associated token account for the output mint, creating the associated\n token account if it doesn't exist at execution time." required: false schema: type: string - name: outputCloseAuthority in: query description: 'Base58-encoded address of the close authority to assign to the output token account. If specified, the swap instruction will idempotently initialize the output token account and set its close authority to the specified address. The action is a no-op if the output token account already exists at execution time. Cannot be used when the output mint is SOL (wrapped or native). Cannot be used with `destinationTokenAccount` or `destinationWallet`.' required: false schema: type: string - name: revertWallet in: query description: 'Base58-encoded address of the wallet that will receive the revert mint if the order is an asynchronous order and it reverts.' required: false schema: type: string - name: wrapAndUnwrapSol in: query description: If false, the order will use wrapped SOL required: false schema: type: boolean - name: prioritizationFeeLamports in: query description: 'Prioritization fee in lamports. Mutually exclusive with `computeUnitPriceMicroLamports`. If both `prioritizationFeeLamports` and `computeUnitPriceMicroLamports` are unspecified, the default of `prioritizationFeeLamports="auto"` will be used. Allowed values are: - an unsigned 32-bit integer which specifies the prioritization fee in lamports - the string value "auto", where the server determines the fee automatically - the string value "medium", where the server determines the fee automatically - the string value "high", where the server determines the fee automatically - the string value "veryHigh", where the server determines the fee automatically - the string value "disabled", where the server leaves the prioritization fee unspecified' required: false schema: $ref: '#/components/schemas/OrderPrioritizationFeeLamports' - name: prioritizationFeeMaxLamports in: query description: Maximum lamports to cap the prioritization fee determined by the server required: false schema: type: integer format: int32 minimum: 0 - name: computeUnitPriceMicroLamports in: query description: Compute unit price in micro-lamports. Mutually exclusive with `prioritizationFeeLamports`. required: false schema: type: integer format: int64 minimum: 0 - name: dynamicComputeUnitLimit in: query description: 'If true, the server will simulate the transaction to determine its compute unit limit. If unspecified or false, the transaction will use the default compute unit limit.' required: false schema: type: boolean - name: includeJitoSandwichMitigationAccount in: query description: 'If specified, the transaction will include a Jito sandwich mitigation account in the swap instruction. Allowed values are: - `true` - uses the default Jito sandwich mitigation account - `false` - does not include the account - A base58-encoded account address - uses the specified account If unspecified, the account is not included. See https://docs.jito.wtf/lowlatencytxnsend/#sandwich-mitigation for more details.' required: false schema: $ref: '#/components/schemas/IncludeJitoSandwichMitigationAccount' - name: predictionMarketInitPayer in: query description: 'Base58-encoded address of the account that will pay for market initialization if the market is uninitialized. If specified and the market is uninitialized, this account must sign the transaction, and the transaction will initialize the market if it is uninitialized at execution time. If this account differs from `userPublicKey`, the transaction will have two signers. Cannot be specified alongside `sponsor` parameter.' required: false schema: type: string - name: outcomeAccountRentRecipient in: query description: 'Base58-encoded address of the account that will receive the rent from closing the outcome token account if it is empty after sale/redemption. If unspecified, the user''s public key will be used.' required: false schema: type: string - name: skipPumpfunCashbackClaim in: query description: 'If true, Pump.fun cashback will not be claimed for cashback-eligible coins. When set, sell quotes include the full creator fee, and execution skips Pump.fun cashback claiming. Default is false. Cannot be used with sponsor-executed swaps (`sponsorExec` is true or defaulted to true).' required: false schema: type: boolean - name: allowBondingCurveUnderconsumption in: query description: 'If true, allow buys on bonding curves to succeed even when the bonding curve cannot fully consume the input (for example, when the curve is near completion). Default is false. Cannot be used with sponsor-executed swaps (`sponsorExec` is true or defaulted to true).' required: false schema: type: boolean - name: includeAddressLookupTables in: query description: 'If true, the response will include the address lookup tables used in the transaction, with only the entries referenced by the transaction, enabling clients to deserialize and recompile the transaction with additional instructions without fetching ALTs from RPC. Default is false.' required: false schema: type: boolean - name: maxAccounts in: query description: 'Maximum allowed number of accounts that the transaction can use. Mutually exclusive with `reserveAccounts`.' required: false schema: type: integer format: int32 minimum: 0 - name: maxTransactionSize in: query description: 'Maximum allowed size of the transaction in bytes. Mutually exclusive with `reserveTransactionSize`.' required: false schema: type: integer format: int32 minimum: 0 - name: reserveAccounts in: query description: 'Number of accounts to leave unused in the transaction. The server will ensure that the transaction uses at most `TRANSACTION_MAX_ACCOUNTS - reserveAccounts` accounts. Mutually exclusive with `maxAccounts`. If you add instructions to the transaction, use this parameter to specify the number of unique accounts that you will add to the transaction. Note that you should not count accounts that are already included in the transaction.' required: false schema: type: integer format: int32 minimum: 0 - name: reserveTransactionSize in: query description: 'Number of bytes to leave unused in the transaction. The server will ensure that the transaction size is at most `TRANSACTION_MAX_SIZE - reserveTransactionSize` bytes. Mutually exclusive with `maxTransactionSize`. If you add instructions to the transaction, use this parameter to specify the number of bytes that your modifications will add to the transaction.' required: false schema: type: integer format: int32 minimum: 0 responses: '200': description: Order response content: application/json: schema: $ref: '#/components/schemas/OrderResponse' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/OrderBadRequestResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/OrderInternalServerErrorResponse' '503': description: Service unavailable content: application/json: schema: $ref: '#/components/schemas/OrderServiceUnavailableResponse' /order-status: get: tags: - order summary: Returns the status of an order. Only prediction market orders are supported. operationId: order_status_handler parameters: - name: signature in: query description: 'Base58-encoded transaction signature of the transaction received from the order endpoint. Only prediction market order signatures are supported.' required: true schema: type: string - name: lastValidBlockHeight in: query description: Last block height at which the transaction is valid required: false schema: type: - integer - 'null' format: int64 minimum: 0 responses: '200': description: Order status content: application/json: schema: $ref: '#/components/schemas/OrderStatusResponse' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/OrderStatusBadRequestResponse' '404': description: Order not found content: application/json: schema: $ref: '#/components/schemas/OrderStatusNotFoundResponse' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/OrderStatusInternalServerErrorResponse' components: schemas: DynamicRoutePlanLeg: type: object required: - venue - marketKey - data - inputMint - outputMint - inAmount - outAmount - inputMintDecimals - outputMintDecimals properties: data: type: string description: Data for the leg inAmount: type: string description: Maximum input amount for the leg as a scaled integer. For example, 1 SOL is 1000000000. inputMint: type: string description: Base58-encoded input mint address inputMintDecimals: type: integer format: int32 description: Decimals for the input mint minimum: 0 marketKey: type: string description: Key identifying the market on the venue outAmount: type: string description: Expected output amount for the leg as a scaled integer. For example, 1 SOL is 1000000000. outputMint: type: string description: Base58-encoded output mint address outputMintDecimals: type: integer format: int32 description: Decimals for the output mint minimum: 0 venue: type: string description: Venue for the leg Revert: type: object required: - signature - mint - amount properties: amount: type: string description: Amount returned to the user, as a scaled integer. For example, 1 SOL is 1000000000. mint: type: string description: Mint returned to the user signature: type: string description: Base58-encoded signature of the revert transaction OrderStatusInternalServerErrorCode: type: string enum: - internal_server_error OrderStatusBadRequestCode: type: string enum: - invalid_signature IncludeJitoSandwichMitigationAccount: oneOf: - type: boolean - type: string PrioritizationType: oneOf: - type: object description: Prioritization fee specified via the compute budget program required: - computeBudget properties: computeBudget: type: object description: Prioritization fee specified via the compute budget program required: - microLamports properties: estimatedMicroLamports: type: - integer - 'null' format: int64 description: Compute unit price estimated by the server for the transaction minimum: 0 microLamports: type: integer format: int64 description: Compute unit price assigned to the transaction minimum: 0 ExecutionMode: type: string enum: - sync - async OrderBadRequestCode: type: string enum: - invalid_user_public_key - invalid_sponsor - invalid_revert_wallet - invalid_prediction_market_init_payer - requested_input_amount_is_zero - invalid_input_mint - invalid_output_mint - same_input_and_output_mint - invalid_slippage_bps - prediction_slippage_bps_above_max - prediction_slippage_bps_below_routing_slippage - invalid_platform_fee_bps - invalid_platform_fee_scale - invalid_fee_account - platform_fee_account_not_specified - platform_fee_account_not_specified_for_platform_fee_scale - invalid_positive_slippage_fee_account - cannot_disable_sync_and_async_execution - invalid_dex - invalid_max_route_length_for_jit_route - cannot_exclude_jit_router_for_jit_route - route_not_found - zero_out_amount - price_impact_too_high - both_priority_fee_params_specified - both_destination_params_specified - both_sponsor_and_prediction_market_init_payer_specified - invalid_destination_token_account - invalid_destination_wallet - destination_token_account_not_supported - invalid_output_close_authority - output_close_authority_with_native_sol_output - output_close_authority_with_destination_token_account - invalid_input_mint_for_restrict_revert_mint - invalid_jito_sandwich_mitigation_account - invalid_outcome_account_rent_recipient - unverified_wallet_not_allowed - unsupported_prediction_market_sponsor_mode - invalid_price_impact_tolerance_pct - skip_pumpfun_cashback_claim_with_sponsor_executor - allow_bonding_curve_underconsumption_with_sponsor_executor - both_max_accounts_and_reserve_accounts_specified - both_max_transaction_size_and_reserve_transaction_size_specified - max_accounts_too_small - max_transaction_size_too_small - reserve_accounts_too_large - reserve_transaction_size_too_large OrderStatusResponse: type: object required: - status - inAmount - outAmount properties: fills: type: array items: $ref: '#/components/schemas/Fill' description: Fills for the order. Specified if and only if the order has at least one fill. inAmount: type: string description: Total input amount filled, as a scaled integer. For example, 1 SOL is 1000000000. outAmount: type: string description: Total output amount filled, as a scaled integer. For example, 1 SOL is 1000000000. reverts: type: array items: $ref: '#/components/schemas/Revert' description: Reverts for the order. Specified if and only if the order has at least one revert. status: $ref: '#/components/schemas/OrderStatus' description: Status of the order OrderServiceUnavailableResponse: type: object required: - msg - code properties: code: $ref: '#/components/schemas/OrderServiceUnavailableCode' msg: type: string example: code: > msg: AddressLookupTableResponse: type: object required: - address - addresses properties: address: type: string description: Base58-encoded address of the lookup table account addresses: type: object description: 'Map of index to base58-encoded address for each entry in the lookup table that is used by the transaction. Key is the index of the address in the lookup table and value is the address.' additionalProperties: type: string propertyNames: type: integer minimum: 0 SlippageTolerance: oneOf: - type: integer format: int32 description: Slippage tolerance specified in basis points minimum: 0 - type: string description: Slippage tolerance will be determined by the server enum: - auto OrderBadRequestResponse: type: object required: - msg - code properties: code: $ref: '#/components/schemas/OrderBadRequestCode' msg: type: string example: code: > msg: OrderInternalServerErrorCode: type: string enum: - failed_to_compute_route - failed_to_construct_order RoutePlanLeg: oneOf: - $ref: '#/components/schemas/DynamicRoutePlanLeg' - $ref: '#/components/schemas/SingleMarketRoutePlanLeg' OrderStatusNotFoundResponse: type: object required: - msg - code properties: code: $ref: '#/components/schemas/OrderStatusNotFoundCode' msg: type: string example: code: > msg: Fill: type: object required: - signature - inputMint - inAmount - outputMint - outAmount properties: inAmount: type: string description: Input amount including fees, as a scaled integer. For example, 1 SOL is 1000000000. inputMint: type: string description: Input mint for the fill outAmount: type: string description: Output amount including fees, as a scaled integer. For example, 1 SOL is 1000000000. outputMint: type: string description: Output mint for the fill signature: type: string description: Base58-encoded signature of the fill transaction OrderPrioritizationFeeLamports: oneOf: - type: string enum: - auto - medium - high - veryHigh - disabled - type: integer format: int32 minimum: 0 OrderStatusInternalServerErrorResponse: type: object required: - msg - code properties: code: $ref: '#/components/schemas/OrderStatusInternalServerErrorCode' msg: type: string example: code: > msg: OrderServiceUnavailableCode: type: string enum: - amm_map_not_initialized - amm_map_lagging OrderStatusNotFoundCode: type: string enum: - not_found PlatformFeeMode: type: string enum: - outputMint - inputMint OrderInternalServerErrorResponse: type: object required: - msg - code properties: code: $ref: '#/components/schemas/OrderInternalServerErrorCode' msg: type: string example: code: > msg: OrderResponse: type: object required: - inputMint - inAmount - outputMint - outAmount - otherAmountThreshold - minOutAmount - slippageBps - priceImpactPct - contextSlot - executionMode properties: addressLookupTables: type: array items: $ref: '#/components/schemas/AddressLookupTableResponse' description: 'Address lookup tables used in the transaction. Each entry contains the table''s address and a map of index to address for each entry in the table that is used by the transaction. Specified if and only if the request included `includeAddressLookupTables=true` and the request included the user''s public key.' computeUnitLimit: type: integer format: int32 description: 'Compute unit limit assigned to the transaction. Specified if and only if the request included the user''s public key.' minimum: 0 contextSlot: type: integer format: int64 description: Slot at which the request was evaluated minimum: 0 executionMode: $ref: '#/components/schemas/ExecutionMode' description: Order execution mode inAmount: type: string description: Maximum input amount as a scaled integer. For example, 1 SOL is 1000000000. initPredictionMarketCost: type: integer format: int32 description: 'Cost in lamports to initialize a prediction market. Specified if and only if the transaction will initialize the prediction market.' minimum: 0 inputMint: type: string description: Base58-encoded input mint address isNativePredictionMarketOutput: type: boolean description: True if and only if the output mint is a native prediction market outcome mint. lastValidBlockHeight: type: integer format: int64 description: 'The last block height at which the blockhash assigned to the transaction is valid. Useful to determine whether the transaction has expired. Specified if and only if the request included the user''s public key.' minimum: 0 minOutAmount: type: string description: Same as `other_amount_threshold` otherAmountThreshold: type: string description: 'Minimum output amount after all fees as a scaled integer. If the swap transaction doesn''t produce at least this amount of the output token, the transaction will fail.' outAmount: type: string description: Expected output amount after all fees as a scaled integer. For example, 1 SOL is 1000000000. outputMint: type: string description: Base58-encoded output mint address platformFee: oneOf: - type: 'null' - $ref: '#/components/schemas/PlatformFee' description: Platform fee that was applied to the quote, if any predictionMarketInitPayerMustSign: type: boolean description: 'Whether the `predictionMarketInitPayer` must sign the transaction. Specified if and only if the request included `predictionMarketInitPayer` and the market is uninitialized.' predictionMarketSlippageBps: type: integer format: int32 description: 'Max allowed slippage for prediction market orders in basis points. Only specified for prediction market orders.' minimum: 0 priceImpactPct: type: string description: 'Price impact of the swap. This is an estimate of the percentage difference between the expected price for the swap and the price for the same swap with the smallest input amount possible. For example, "0.01" means 1% price impact.' prioritizationFeeLamports: type: integer format: int64 description: 'Prioritization fee in lamports. Specified if and only if the request included the user''s public key.' minimum: 0 prioritizationType: $ref: '#/components/schemas/PrioritizationType' description: 'Prioritization fee type for the transaction. Specified if and only if the request included the user''s public key.' revertMint: type: string description: 'Base58-encoded mint address of the token that will be returned to the user if the order is an asynchronous order and the order reverts after it is successfully opened. Specified if and only if the order is an asynchronous order.' routePlan: type: array items: $ref: '#/components/schemas/RoutePlanLeg' description: 'Route that the swap will take. Specified if and only if the route plan is known at order opening time. This will be specified for all synchronous orders.' slippageBps: type: integer format: int32 description: Max allowed slippage % in basis points minimum: 0 transaction: type: string description: 'Base64-encoded transaction. The user must sign before sending it to Solana. Specified if and only if the request included the user''s public key.' OrderStatus: type: string enum: - pending - expired - failed - open - pendingClose - closed SingleMarketRoutePlanLeg: type: object required: - venue - marketKey - inputMint - outputMint - inAmount - outAmount - inputMintDecimals - outputMintDecimals properties: inAmount: type: string description: Maximum input amount for the leg as a scaled integer. For example, 1 SOL is 1000000000. inputMint: type: string description: Base58-encoded input mint address inputMintDecimals: type: integer format: int32 description: Decimals for the input mint minimum: 0 marketKey: type: string description: Key identifying the market on the venue outAmount: type: string description: Expected output amount for the leg as a scaled integer. For example, 1 SOL is 1000000000. outputMint: type: string description: Base58-encoded output mint address outputMintDecimals: type: integer format: int32 description: Decimals for the output mint minimum: 0 venue: type: string description: Venue for the leg OrderStatusBadRequestResponse: type: object required: - msg - code properties: code: $ref: '#/components/schemas/OrderStatusBadRequestCode' msg: type: string example: code: > msg: PlatformFee: type: object required: - amount - feeBps - mode properties: amount: type: string description: 'Platform fee as a scaled integer. For example, 1 SOL is 1000000000. For output mint fees, this is the expected amount that will be paid, but the exact amount will vary depending on how much output the swap produces. For input mint fees, this is the exact amount that will be paid.' feeBps: type: integer format: int32 description: Platform fee in basis points minimum: 0 mode: $ref: '#/components/schemas/PlatformFeeMode' description: Mode for the platform fee securitySchemes: api_key: type: apiKey in: header name: x-api-key description: API key for authentication. Contact hello@dflow.net to obtain an API key.