SEP-6 Transfer Service

Getting Started

This SEP-6 transfer service enables you to tokenize (deposit) and detokenize (withdraw) Bitcoin and Litecoin on the Stellar Network. Access it programmatically or make deposits and withdrawals using our web interface.

COINQVEST's Assets

Assets on the Stellar Network are digital (tokenized) representations of anything of value.
COINQVEST issues assets for Bitcoin and Litecoin as listed below. Show more.

Transparency

COINQVEST's SEP-6 transfer server is transparent and all transactions are auditable. We publish circulating supply, hot wallet addresses, cold wallet addresses, accounts, blockchain transaction ids, and balances so you can always have peace of mind about the whereabouts of the underlying assets. Custodial funds never leave our hot or cold wallets for any purpose other than SEP-6 transfers.

Developers

Stellar SEP-6 defines a standard way for wallets, exchanges, end-users, or any type of Stellar application to programmatically interact with asset issuers (a.k.a. anchors, bridges, or ramps). The developer documentation for COINQVEST's SEP-6 implementation is located here.

Market Makers and Arbitrageurs

COINQVEST's assets are built into the COINQVEST payment processing platform and provide an organic way to drive traffic to liquidity pools and generate conversion fees and create arbitrage opportunities. Read our liquidity pool documentation or contact us to get started.

Prerequisites

In order to interact with the SEP-6 transfer server you will need a funded Stellar account with established trustlines to the asset you want to operate with. This SEP-6 implementation is permission-less and you do not need authentication (or a COINQVEST account) to use it.

COINQVEST Assets

Assets are digital (tokenized) representations of anything of value on the Stellar Network. They are typically backed by fiat or cryptocurrencies. COINQVEST issues assets for Bitcoin and Litecoin as listed below. Please note that COINQVEST's only official and valid issuer domain is coinqvest.com.

Bitcoin on Stellar Create Trustline Circulating Supply: 0.0000000 BTC
BTC:GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT (copied)
Deposit Info Withdrawal Info
Min Amount: 0.0005 BTC
Max Amount: 100 BTC
Fee Fixed: 0 BTC
Fee Percent: 0 %
Min Amount: 0.0005 BTC
Max Amount: 100 BTC
Fee Fixed: 0 BTC
Fee Percent: 0 %

Trustlines

When using a SEP-6 asset, you are trusting the service provider (e.g. COINQVEST) to store your deposit and to honor your withdrawals. This idea of trust is made explicit on Stellar through trustlines. Trustlines are added to your Stellar account and let you hold a token as well as specify the amount of that token you’re willing to hold. Trustlines also keep you from receiving unwanted assets.

In order to trade, receive, or hold any asset on the Stellar network you must first establish a trustline with the issuing account. An issuing account is the service provider's Stellar account that created the asset. Trustlines are set using the change trust operation and cost a base reserve fee of 0.5 XLM each. What this means is that for each trustline you set, your account will be required to maintain 0.5 XLM in reserve that can’t be spent until you close your trustlines. *

COINQVEST Assets

You need the asset code, issuer account, and (in some cases) the issuer domain as indicated below in order to add trustlines.

Bitcoin on Stellar Issuer Domain: coinqvest.com
BTC:GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT (copied)

Adding Trustlines in Wallets

Some Stellar wallets and exchanges have built-in UIs that allow you to add and remove trustlines to arbitrary assets. Popular wallets and exchanges on Stellar include Freighter, Albedo, xBull, StellarX, Rabet, Lumenswap, Scopuly, LOBSTR, and StellarTerm. You could also use the Stellar Laboratory in order to craft your own change trust operations securely.

Please note that we don't endorse any third party services and recommend to work programmatically (see below) or via the Stellar Laboratory.

Adding Trustlines Programmatically

In order to add a trustline programmatically, you will need one of the Stellar SDKs, a funded Stellar account and its secret key, and a few lines of code to invoke the change trust operation. Below is an example in JavaScript. It adds a trustline to COINQVEST's Bitcoin and Litecoin assets on Stellar. If you ever want to delete a trustline again, simply set the trustline limit parameter in your operation to 0 after removing all asset balances (if any).

const sdk = require('stellar-sdk');
const server = new sdk.Server('https://horizon.stellar.org');

// COINQVEST's Assets
const BtcAsset = new sdk.Asset('BTC', 'GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT');
const LtcAsset = new sdk.Asset('LTC', 'GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT');

(async function main() {

    const keyPair = sdk.Keypair.fromSecret(process.env.secretKey);
    const account = await server.loadAccount(keyPair.publicKey());
    const fee = await server.fetchBaseFee();

    const transaction = new sdk.TransactionBuilder(account, {
        fee, networkPassphrase: sdk.Networks.PUBLIC
    })
    .addOperation(
        sdk.Operation.changeTrust({
            source: keyPair.publicKey(),
            asset: BtcAsset,
            amount: "922337203685.4775807"
        })
    )
    .addOperation(
        sdk.Operation.changeTrust({
            source: keyPair.publicKey(),
            asset: LtcAsset,
            amount: "922337203685.4775807"
        })
    )
    .setTimeout(30)
    .build();

    // sign the transaction
    transaction.sign(keyPair);

    try {
        const transactionResult = await server.submitTransaction(transaction);
        console.log(transactionResult);
    } catch (e) {
        console.error(e.message);
    }

})()

Liquidity Pools

A healthy liquidity on the Stellar Decentralized Exchange is challenging but vital to the success of COINQVEST as a platform and its as assets within the wider Stellar ecosystem. A significant TVL (total value locked) on the COINQVEST liquidity pools is the backbone for providing payment processing services, asset exchange, and settlement of funds for our merchants and clients in particular and other participants on the Stellar Network in general. We are providing liquidity within our abilities but hope for your participation and support.

Pool IDs

COINQVEST's main liquidity pools are XLM/BTC and BTC/LTC. These pools are most likely to be triggered when an asset exchange takes place. We picked these pairs for two reasons. First, they exist as trading pairs on major centralized exchanges, which makes them easy to map for arbitrageurs. Second, having these two pairs ensures that BTC and LTC can always find payment paths via XLM to other relevant assets on the network.

BTC/XLM Pool ID View on Stellar.Expert
84cf93f8d1c22e150b8f0022b3c9a39d03976da6b5143818327bf298358ce5e7 (copied)
XLM 500312.1234567
BTC 2.3212345

Market Makers and Arbitrageurs

It is useful to understand that checkouts, deposits, swaps, and withdrawals on the COINQVEST platform consume liquidity on the above pools whenever an asset exchange is processed. Usually the exchange is from Bitcoin or Litecoin into a fiat stablecoin (such as USDC). This means that the COINQVEST platform continuously produces traffic in one direction of the pool and opens up arbitrage opportunities. There is also public trading activity on the Stellar Network consuming liquidity in general and that also produces volume. If you are a market maker or arbitrageur please read on and we would love to hear from you.

Participation

Before going any further we recommend to read up about the concepts of liquidity pools and to educate yourself about the risks of impermanent loss. Some good resources include: Liquidity, Liquidity, Liquidity, Introducing Automated Market Makers on Stellar, and AMMs in the Stellar Ecosystem.

Participation in liquidity pools is permissionless. You need to establish trustlines to both the assets and the corresponding liquidity pools to deposit and withdraw into pools. There are some Stellar wallets like xBull, Lumenswap, LOBSTR, and StellarX that provide interfaces to deposit into and withdraw from liquidity pools. We do not actually endorse any third-party services however and recommend to interact with pools programmatically or using the Stellar Laboratory. This way you have full control over keys, security, automation, and customization.

Developers

Our friends over at the Stellar Development Foundation did a tremendous job in documenting programmatic liquidity pool participation and we recommend following this guide to get started. It contains examples for liquidity pool creation, deposits, withdrawals, and liquidity pool monitoring.

Deposit

Tokenizes and deposits Bitcoin or Litecoin onto the Stellar Network.

  • Select Source Network
  • Bitcoin
  • Target Asset (credited to you on Stellar)
Bitcoin on Stellar Create Trustline
BTC:GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT (copied)
Min Amount: 0.0005 BTC
Max Amount: 100 BTC
Fee Fixed: 0 BTC
Fee Percent: 0 %
  • Target Stellar Account (public key or federated address)
  • Federated Stellar Account (resolved)
  • Memo (optional)
  • Memo Type (optional)

Your Bitcoin Deposit Address is Ready

Make the Bitcoin deposit to transfer funds into your Stellar account.

Bitcoin Deposit Address (send funds here)
bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23 (copied)

Target Account on Stellar (Memo: )
GBSY6HJZLWBUUNJHHDLDE3AIBSQCHI6UMIMWOLZ6GUWI3NPPLP6QNGI2 (copied)
Transfer Request ID (use this to query your transfer status)
085a2e4aca82edd52d12b37388da (copied)

View Transfer Status

Withdraw

Detokenizes Bitcoin or Litecoin assets on Stellar and redeems them to their native blockchain.

  • Select Target Network
  • Bitcoin
  • Source Asset (send this asset on Stellar to redeem onto Bitcoin)
Bitcoin on Stellar
BTC:GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT (copied)
Min Amount: 0.0005 BTC
Max Amount: 100 BTC
Fee Fixed: 0 BTC
Fee Percent: 0 %
  • Target Bitcoin Address

Your Stellar Withdrawal Account is Ready

Make a payment on Stellar to transfer funds to your Bitcoin address.

Stellar Withdrawal Account (send funds here)
GBSY6HJZLWBUUNJHHDLDE3AIBSQCHI6UMIMWOLZ6GUWI3NPPLP6QNGI2(copied)
Memo (mandatory)
memo (copied)
Memo Type
Text

Don't forget to include the memo

Please make sure to include the memo as indicated above in your Stellar withdrawal transaction. Payments without the memo cannot be identified.


Target Address on Bitcoin
bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23 (copied)
Transfer Request ID (use this to query your transfer status)
085a2e4aca82edd52d12b37388da (copied)

View Transfer Status

Transfer Status

Queries the SEP-6 transfer status for a given transfer request or blockchain transaction id.

  • Query By
  • SEP-6 Transfer Request Id
    Stellar Tx Id
    Bitcoin or Litecoin Tx Id
  • SEP-6 Transfer Request Id

API Documentation

COINQVEST's SEP-6 Transfer API enables you to tokenize (deposit) and detokenize (withdraw) Bitcoin and Litecoin on the Stellar Network. This documentation walks you through the required steps to do so.

Stellar SEP-6

Stellar SEP-6 defines a standard way for wallets, exchanges, end-users, or any type of Stellar application to programmatically interact with asset issuers (a.k.a. anchors, bridges, or ramps) like COINQVEST. Its documentation is located here and can be considered a good starting point to understand its overall concepts but it can get overwhelming and all you really need to get started is compiled below for your convenience.

COINQVEST's SEP-6 Transfer Server

The COINQVEST SEP-6 transfer server lives at sep6.coinqvest.com and you can communicate with it by sending simple HTTP GET requests and reading responses. In order to interact with it you need a REST client in your favorite programming language (we published one for PHP, NodeJS, and Ruby) or a tool like cURL or wget. Since all SEP-6 endpoints are accessed via HTTP Get you could technically even just use a browser window if you want. COINQVEST's home domain is coinqvest.com and you can inspect our stellar.toml file here.

Prerequisites

In order to interact with the SEP-6 transfer server you will need a funded Stellar account with established trustlines to the asset you want to operate with. This SEP-6 implementation is permission-less and you do not need authentication (or a COINQVEST account) to use it.

Endpoints

The transfer server exposes five endpoints that are all accessible via HTTP GET. All endpoints conform to the official SEP-6 definitions documented here.

  • info Returns an object containing feature description and context information about the SEP-6 transfer server.
  • deposit Returns an object with deposit information containing all the information needed to make payment and receive tokenized assets on Stellar.
  • withdraw Returns an object with withdrawal information containing all the information needed to redeem assets onto the underlying blockchain.
  • transaction Returns an object with transaction information regarding a SEP-6 deposit or withdrawal.
  • transactions Returns a list of transactions related to the SEP-6 transfer server.

Examples

Deposit Bitcoin onto Stellar

const Sep6Client = require('sep6-client');
const client = new Sep6Client('sep6.coinqvest.com');

let response = await client.get('/deposit', {
    'asset_code': 'BTC',
    'account': 'GDONUHZKLSYLDOZWR2TDW25GFXOBWCCKTPK34DLUVSOMFHLGURX6FNU6',
    'memo': 'Sent via SEP-6',
    'memo_type': 'text'
});
// console.log(response.data) -> {"how":"bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23","id":"f2118ef4115642870638616a4372","eta":600,"min_amount":"0.00001","max_amount":"100.0000000","extra_info":{}}

Returns a Bitcoin deposit address alongside some additional context information documented here. Bitcoin sent to the received deposit address is tokenized onto Stellar and sent to above account. The tokenized Bitcoin can be sent and received on the Stellar Network, exchanged for other assets on the SDEX, or be deposited into Stellar's liquidity pools.

Withdraw Bitcoin from Stellar

const Sep6Client = require('sep6-client');
const client = new Sep6Client('sep6.coinqvest.com');

let response = await client.get('/withdraw', {
    'asset_code': 'BTC',
    'dest': 'bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23'
});
// console.log(response.data) -> {"account_id":"GCQVESTEG3MY2AA4LFF2J5K77IQP4G5WZCUDOJ5RUIPA6ZKRGQ7XXKBR","memo_type":"text","memo":"010cdf0a41410d75b2797a6fa38f","id":"010cdf0a41410d75b2797a6fa38f","min_amount":"0.0005000","max_amount":"100.0000000","fee_fixed":0.0002,"fee_percent":0.2,"extra_info":{"message":"An amount above 100.0000000 will take longer to complete"}}

Returns a Stellar account and memo alongside some additional context information documented here. Tokenized Bitcoin sent to the given account is burned on the Stellar Network and released into the Bitcoin address given in the request.

SEP-6 REST Clients

The SEP-6 transfer server works with any REST client in any programming language and we've published SDKs for PHP, Ruby, and NodeJS on our GitHub to help you get started quickly.

GET/infopublic

Returns an object containing feature description and context information about the SEP-6 transfer server. Conforms to the official Stellar SEP-6 definitions described here.

Request

curl 'https://sep6.coinqvest.com/info'

Success Response application/json

{
   "deposit":{
      "BTC":{
         "enabled":true,
         "min_amount":0.0001,
         "max_amount":100,
         "fee_fixed":0,
         "fee_percent":0,
         "authentication_required":false,
         "fields":{
            "email_address":{
               "description":"An optional email address for receiving email updates related to this deposit transfer.",
               "optional":true
            },
            "on_change_callback":{
               "description":"An optional URL listening for SEP-6 status updates related to this deposit transfer.",
               "optional":true
            },
            "type":{
               "description":"Requests a specific Bitcoin address type. Defaults to bech32.",
               "choices":[
                  "p2sh-segwit",
                  "bech32",
                  "legacy"
               ],
               "optional":true
            }
         }
      },
      "LTC":{
         "enabled":true,
         "min_amount":0.00001,
         "max_amount":10000,
         "fee_fixed":0,
         "fee_percent":0,
         "authentication_required":false,
         "fields":{
            "email_address":{
               "description":"An optional email address for receiving email updates related to this deposit transfer.",
               "optional":true
            },
            "on_change_callback":{
               "description":"An optional URL listening for SEP-6 status updates related to this deposit transfer.",
               "optional":true
            },
            "type":{
               "description":"Requests a specific Litecoin address type. Defaults to bech32.",
               "choices":[
                  "p2sh-segwit",
                  "bech32",
                  "legacy"
               ],
               "optional":true
            }
         }
      }
   },
   "withdraw":{
      "BTC":{
         "enabled":true,
         "min_amount":0.0005,
         "max_amount":100,
         "fee_fixed":0.0002,
         "fee_percent":0.2,
         "authentication_required":false,
         "types":{
            "crypto":{
               "fields":{
                  "dest":{
                     "description":"The Bitcoin target address in any format, i.e. native SegWit (bech32), SegWit (P2SH), or legacy (P2PKH).",
                     "optional":false
                  }
               }
            }
         }
      },
      "LTC":{
         "enabled":true,
         "min_amount":0.0005,
         "max_amount":10000,
         "fee_fixed":0.0002,
         "fee_percent":0.2,
         "authentication_required":false,
         "types":{
            "crypto":{
               "fields":{
                  "dest":{
                     "description":"The Litecoin target address in any format, i.e. native SegWit (bech32), SegWit (P2SH), or legacy (P2PKH).",
                     "optional":false
                  }
               }
            }
         }
      }
   },
   "transaction":{
      "enabled":true,
      "authentication_required":false
   },
   "transactions":{
      "enabled":true,
      "authentication_required":false
   },
   "features":{
      "account_creation":false,
      "claimable_balances":false
   },
   "fee":{
      "enabled":false
   },
   "deposit-exchange":{
      "enabled":false
   },
   "withdraw-exchange":{
      "enabled":false
   },
   "supply":{
      "BTC":{
         "circulating_supply":5.671082,
         "circulating_supply_components":{
            "amount":1.0399347,
            "claimable_balances_amount":0,
            "liquidity_pools_amount":4.6311473
         },
         "hotwallet_reserves":1.6826130,
         "coldwallet_reserves":4.0000000,
         "total_reserves":5.6826130
      },
      "LTC":{
         "circulating_supply":318.5104129,
         "circulating_supply_components":{
            "amount":136.3382091,
            "claimable_balances_amount":0,
            "liquidity_pools_amount":182.1722038
         },
         "hotwallet_reserves":118.6363572,
         "coldwallet_reserves":200.0000000,
         "total_reserves":318.6363572
      }
   }
}

Success Response Attributes

Name Type Description Nullable
deposit object An object containing an associative list of assets available for deposit and additional context information about the assets. Each asset is identified by its key, which is the asset code. false
.ASSET_CODE object An object containing context information about the asset identified in the deposit object's key attribute. false
.enabled boolean Indicates whether deposit transactions are enabled. If set to false then this is the only attribute of the object. false
.min_amount float Indicates the minimum deposit amount on the /deposit endpoint. false
.max_amount float Indicates the maximum deposit amount on the /deposit endpoint. false
.fee_fixed float Indicates the fixed fee on the /deposit endpoint. In units of the deposited asset. false
.fee_percent float Indicates the percentage fee on the /deposit endpoint. In units of percentage points. false
.authentication_required boolean Indicates whether authentication for this asset is required on the /deposit endpoint. If set to true then requests must be authenticated via SEP-10. false
.fields object An object containing descriptions for optional request parameters on the /deposit endpoint. false
withdraw object An object containing an associative list of assets available for withdrawal and additional context information about the assets. Each asset is identified by its key, which is the asset code. false
.ASSET_CODE object An object containing context information about the asset identified in the withdraw object's key attribute. false
.enabled boolean Indicates whether withdrawal transactions are enabled. If set to false then this is the only attribute of the object. false
.min_amount float Indicates the minimum withdrawal amount on the /withdraw endpoint. false
.max_amount float Indicates the maximum withdrawal amount on the /withdraw endpoint. false
.fee_fixed float Indicates the fixed fee on the /withdraw endpoint. In units of the deposited asset. false
.fee_percent float Indicates the percentage fee on the /withdraw endpoint. In units of percentage points. false
.authentication_required boolean Indicates whether authentication for this asset is required on the /withdraw endpoint. If set to true then requests must be authenticated via SEP-10. false
.types object An object containing instructions for `dest` parameter on the /withdraw endpoint. false
transaction object An object containing information about the /transaction endpoint. false
.enabled boolean Indicates whether the /transaction is enabled. If set to false then this is the only attribute of the object. false
.authentication_required boolean Indicates whether the /transaction requires authentication. If set to true then requests must be authenticated via SEP-10. false
transactions object An object containing information about the /transactions endpoint. false
.enabled boolean Indicates whether the /transactions is enabled. If set to false then this is the only attribute of the object. false
.authentication_required boolean Indicates whether the /transactions requires authentication. If set to true then requests must be authenticated via SEP-10. false
features object An object containing information about possible additional features provided by the SEP-6 server. false
.account_creation boolean Indicates whether or not the SEP-6 transfer server supports creating accounts for users requesting deposits (COINQVEST does not). false
.claimable_balances boolean Indicates whether or not the SEP-6 transfer server supports sending deposits as claimable balances to accounts that do not have a trustline established (COINQVEST does not, a trustline is required prior to receiving a deposit address). false
fee object An object containing information about the optional SEP-6 /fee endpoint. false
.enabled boolean Indicates whether the /fee endpoint is enabled (in COINQVEST SEP-6 it is not because we use the fee_fixed and fee_percent above in lieu of a dedicated fee endpoint). If set to false then this is the only attribute of the object. false
.authentication_required boolean Indicates whether the /fee requires authentication. If set to true then requests must be authenticated via SEP-10. false
deposit-exchange object An object containing information about the optional SEP-6 /deposit-exchange endpoint. false
.enabled boolean Indicates whether the /deposit-exchange endpoint is enabled (in COINQVEST SEP-6 it is not). If set to false then this is the only attribute of the object. false
.authentication_required boolean Indicates whether the /deposit-exchange requires authentication. If set to true then requests must be authenticated via SEP-10. false
withdraw-exchange object An object containing information about the optional SEP-6 /withdraw-exchange endpoint. false
.enabled boolean Indicates whether the /withdraw-exchange endpoint is enabled (in COINQVEST SEP-6 it is not). If set to false then this is the only attribute of the object. false
.authentication_required boolean Indicates whether the /withdraw-exchange requires authentication. If set to true then requests must be authenticated via SEP-10. false
supply object An object containing circulating supplies, hot wallet, and cold wallet reserves for above-mentioned assets. Cached five minutes. false

Error Response application/json

{
   "status":"500",
   "error":"internal server error"
}

Error Response Params

Name Type Description Nullable
status string The issued HTTP status code. false
error string A human readable string explaining the error. false

GET/depositpublic

Returns an object with deposit information containing all the information needed to make payment and receive tokenized assets on Stellar. Conforms to the official Stellar SEP-6 definitions described here.

Request

curl 'https://sep6.coinqvest.com/deposit?asset_code=BTC&account=GDONUHZKLSYLDOZWR2TDW25GFXOBWCCKTPK34DLUVSOMFHLGURX6FNU6'

Request Params (GET)

Key Type Description Nullable Mandatory
asset_code string The asset code of the asset you wish to deposit. false mandatory
account string The Stellar account to which you wish to deposit. As a prerequisite for receiving tokenized funds the account must have a trustline for the desired asset. false mandatory
type string Requests a specific Bitcoin or Litecoin address type. Allowed types are p2sh-segwit, bech32, legacy. Defaults to bech32. false optional
memo string An optional memo to be sent to the above Stellar account. If a memo is given its type must also be specified in memo_type. false optional
memo_type string A string specifying the given memo type. Valid options are text, id, and hash. false optional
email_address string Reserved for future use. An optional email address for receiving email updates related to this deposit transfer. false optional
on_change_callback string An optional URL listening for status updates related to this deposit transfer. The callback sends an HTTP POST request with a JSON object conforming to the one described in /transaction.

Your server should respond with a 200 OK HTTP status code upon to acknowledge the callback. If we don't see a 200 OK response we will keep re-sending the callback for a while until we encounter one and eventually give up (after 48 hours or so). Callbacks are signed via an HTTP header, as documented here.
false optional

Success Response application/json

{
   "how":"bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23",
   "id":"085a2e4aca82edd52d12b37388da",
   "eta":600,
   "min_amount":"0.0001000",
   "max_amount":"100.0000000",
   "fee_fixed":"0.0000000",
   "fee_fixed":"0.0000000",
   "extra_info":{}
}

Success Response Attributes

Name Type Description Nullable
how string The blockchain address to which the deposit should be sent. false
id string A unique identifier given by COINQVEST. Save this client-side to reference and query this deposit and related blockchain transaction in the future. false
eta integer An estimated time of fund transfer in seconds. The actual time can vary depending on underlying blockchain speed and used fees. false
min_amount string The minimum deposit amount for the fund transfer to trigger. Deposits below the minimum threshold stay pending until the sum of all made deposits matches or exceeds this amount. false
max_amount string The maximum deposit amount. false
fee_fixed string Indicates the fixed fee for this deposit. In units of the deposited asset. false
fee_percent string Indicates the percentage fee for this deposit. In units of percentage points. false
extra_info object An object optionally containing exactly one field message containing a human readable text string with additional information. false

Error Response application/json

{
   "status":"400",
   "error":"Account does not have a trustline for BTC-GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT."
}

Error Response Params

Name Type Description Nullable
status string The issued HTTP status code. false
error string A human readable string explaining the error. false

GET/withdrawpublic

Returns an object with withdrawal information containing all the information needed to redeem assets onto the underlying blockchain. Conforms to the official Stellar SEP-6 definitions described here.

Request

curl 'https://sep6.coinqvest.com/withdraw?asset_code=BTC&dest=bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23'

Request Params (GET)

Key Type Description Nullable Mandatory
asset_code string The asset code of the asset you wish to redeem. false mandatory
dest string The Bitcoin (or Litecoin) target address in any format, i.e. native SegWit (bech32), SegWit (P2SH), or legacy (P2PKH). false mandatory
email_address string Reserved for future use. An optional email address for receiving email updates related to this withdrawal transfer. false optional
on_change_callback string An optional URL listening for status updates related to this withdrawal transfer. The callback sends an HTTP POST request with a JSON object conforming to the one described in /transaction.

Your server should respond with a 200 OK HTTP status code upon to acknowledge the callback. If we don't see a 200 OK response we will keep re-sending the callback for a while until we encounter one and eventually give up (after 48 hours or so). Callbacks are signed via an HTTP header, as documented here.
false optional
type string Optional parameter indicating the type of withdrawal. The only currently allowed value is crypto. false optional

Success Response application/json

{
   "account_id":"GCQVESTEG3MY2AA4LFF2J5K77IQP4G5WZCUDOJ5RUIPA6ZKRGQ7XXKBR",
   "memo_type":"text",
   "memo":"cf86a99b3e6ecd1359a0d2992e70",
   "id":"cf86a99b3e6ecd1359a0d2992e70",
   "min_amount":"0.0005000",
   "max_amount":"100.0000000",
   "fee_fixed":0.0002,
   "fee_percent":0.2,
   "extra_info":{
      "message":"An amount above 100.0000000 BTC will take longer to complete"
   }
}

Success Response Attributes

Name Type Description Nullable
account_id string The Stellar account to which the funds should be sent. false
memo string A mandatory memo to be included in the Stellar withdrawal transaction. It is vital to include the memo. Funds sent without the memo might not be able to be resolved or refunded. false
memo_type integer The memo type (always text). false
id string A unique identifier given by COINQVEST. Save this client-side to reference and query this withdrawal and related blockchain transaction in the future. false
min_amount string The minimum withdrawal amount for the fund transfer to trigger. Payment operations below the minimum threshold stay pending until the sum of all made payments matches or exceeds this amount. false
max_amount string The maximum withdrawal amount. false
fee_fixed string Indicates the fixed fee for this withdrawal. In units of the transferred asset. false
fee_percent string Indicates the percentage fee for this withdrawal. In units of percentage points. false
extra_info object An object optionally containing exactly one field message containing a human readable text string with additional information. false

Error Response application/json

{
   "status":"400",
   "error":"Invalid destination address."
}

Error Response Params

Name Type Description Nullable
status string The issued HTTP status code. false
error string A human readable string explaining the error. false

GET/transactionpublic

Returns an object with transaction information regarding a SEP-6 deposit or withdrawal. Conforms to the official Stellar SEP-6 definitions described here.

Requires either an external_transaction_id (i.e. the Bitcoin or Litecoin transaction id), a stellar_transaction_id, or an id as given by COINQVEST in the HTTP response to a deposit or withdraw request.

Request

curl 'https://sep6.coinqvest.com/transaction?external_transaction_id=914f2fe1175101d5d1b3fc75c053cc090590bb0e251b938c255598c828742c43'

Request Params (GET)

Key Type Description Nullable Mandatory
id string An internal id as given by COINQVEST in the HTTP response to a deposit or withdraw request. Returns the latest transaction related to a given internal id. true optional
stellar_transaction_id string A Stellar transaction id related to a SEP-6 deposit or withdrawal. true optional
external_transaction_id string An external transaction id (i.e. a Bitcoin or Litecoin transaction id) related to a SEP-6 deposit or withdrawal. true optional

Success Response application/json

{
   "transaction":{
      "id":"085a2e4aca82edd52d12b37388da",
      "status":"completed",
      "message":"Transaction fully completed.",
      "kind":"deposit",
      "amount_in":"0.0001000",
      "amount_in_asset":"iso-24165:BTC",
      "amount_out":"0.0001000",
      "amount_out_asset":"stellar:BTC:GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT",
      "amount_fee":"0.0000000",
      "from":"bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23",
      "started_at":"2022-10-04T20:50:18.307Z",
      "completed_at":"2022-10-04T20:51:20.032Z",
      "stellar_transaction_id":"a426a057aaba5a5811d5ee243f76c767a6756df89f417610a4ebd114e162596a",
      "external_transaction_id":"814f2fe1175101d5d1b3fc75c053cc090590bb0e251b938c255598c828742c43",
   }
}

Success Response Attributes

Name Type Description Nullable
transaction object An object containing information about the transfer transaction. false
.id string An identifier as given by COINQVEST in the HTTP response to a deposit or withdrawal request. false
.status string A transaction state as documented here. Possible states:

completed, pending_external, pending_anchor, pending_stellar, pending_trust, pending_user, pending_user_createaccount, pending_user_transfer_start, pending_user_transfer_complete, pending_customer_info_update, incomplete, expired, too_small, too_large, error.
false
.message string A human-readable text string explaining the status given above. false
.kind string The transaction type. Possible values are deposit and withdrawal. false
.amount_in string Amount received by transfer server at the start of the transaction. A string with up to 7 decimals. Excludes any fees charged before the transfer server received the funds. true
.amount_in_asset string The asset received or to be received by the transfer server. The value is in SEP-38 Asset Identification format. true
.amount_out string Amount sent by the transfer server to the user at end of transaction. A string with up to 7 decimals. true
.amount_out_asset string The asset delivered or to be delivered to the user. The value is in SEP-38 Asset Identification format. true
.amount_fee string Amount of fee charged by the transfer server. true
.from string A Stellar account in the case of withdrawal transactions or a comma-separated string with all UTXO inputs in the case of deposits. true
.started_at string Start date and time of transaction (UTC ISO 8601). true
.completed_at string Completion date and time of transaction (UTC ISO 8601). true
.stellar_transaction_id string Id on Stellar Network indicating the transaction that either completed the deposit or started the withdrawal. true
.external_transaction_id string Id of the blockchain transaction on the external network that either started the deposit or completed the withdrawal. true
.withdraw_anchor_account string If this is a withdrawal, this is the anchor's Stellar account that the user transferred (or will transfer) their issued asset to. true
.withdraw_memo string Mandatory withdrawal memo given by the transfer server. true
.withdraw_memo_type string Mandatory withdrawal memo type given by the transfer server. true
related_transactions object An optional list of related transaction object for situations in which more than one blockchain transaction is associated with a transfer. true

Error Response application/json

{
   "status":"404",
   "error":"not found"
}

Error Response Params

Name Type Description Nullable
status string The issued HTTP status code. false
error string A human readable string explaining the error. false

GET/transactionspublic

Returns an a list of transaction objects as described in /transaction. Conforms to the official Stellar SEP-6 definitions described here.

Request

curl 'https://sep6.coinqvest.com/transactions?asset_code=BTC&account=GACK3ODRMGCTRH6HNVETEOF2ZK5G5QUIGLDFFZQSLM6RZJ2LFY3VWQBT'

Request Params (GET)

Key Type Description Nullable Mandatory
asset_code string The asset code of interest, e.g. BTC or LTC. false mandatory
account string The stellar account id involved in the transactions. Without this filter the entire transaction history of the transfer server is queried. false optional
no_older_than string The response should only contain transactions starting on or after this date and time (UTC ISO 8601). true optional
limit string The response should contain at most limit transactions. true optional
kind string A comma-separated list containing the desired transaction kinds. Possible values are deposit and withdrawal. true optional
paging_id string The response should contain transactions starting prior to this ID (exclusive). true optional

Success Response application/json

{
   "transactions":[
      {
          "id": "30978809351d5e145b8a9bce49a8",
          "kind": "deposit",
          "status": "pending_user_transfer_start",
          "message": "Please initiate your transfer."
      },
      {
         "id":"085a2e4aca82edd52d12b37388da",
         "status":"completed",
         "message":"Transaction fully completed.",
         "kind":"deposit",
         "amount_in":"0.0001000",
         "amount_in_asset":"iso-24165:BTC",
         "amount_out":"0.0001000",
         "amount_out_asset":"stellar:BTC:GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT",
         "amount_fee":"0.0000000",
         "from":"bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23",
         "started_at":"2022-10-04T20:50:18.307Z",
         "completed_at":"2022-10-04T20:51:20.032Z",
         "stellar_transaction_id":"a426a057aaba5a5811d5ee243f76c767a6756df89f417610a4ebd114e162596a",
         "external_transaction_id":"814f2fe1175101d5d1b3fc75c053cc090590bb0e251b938c255598c828742c43"
      },
      {
          "id":"9f5762bbbe11dc58be299b8d68e3",
          "status":"completed",
          "message":"Transaction fully completed.",
          "kind":"withdraw",
          "amount_in":"0.0005000",
          "amount_in_asset":"stellar:LTCTEST:GBSY6HJZLWBUUNJHHDLDE3AIBSQCHI6UMIMWOLZ6GUWI3NPPLP6QNGI2",
          "amount_out":"0.0002990",
          "amount_out_asset":"iso24165:LTC",
          "amount_fee":"0.0002010",
          "from":"GACK3ODRMGCTRH6HNVETEOF2ZK5G5QUIGLDFFZQSLM6RZJ2LFY3VWQBT",
          "started_at":"2022-10-05T00:04:02.168Z",
          "completed_at":"2022-10-05T00:12:30.284Z",
          "stellar_transaction_id":"83480916303afa78b93831e3964eec748b6265148823d27fecb7c7648a9c87ec#184545592135122945",
          "external_transaction_id":"f09c0f9fcf7cf88727b20275b2b231b2a0dbb2563e3ad19fe97b839fe50dff50",
          "withdraw_memo":"9f5762bbbe11dc58be299b8d68e3",
          "withdraw_memo_type":"text",
          "withdraw_anchor_account":"GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT"
      }
   ]
}

Success Response Attributes

Name Type Description Nullable
transactions array An array of transaction objects as described in /transaction. false

Error Response application/json

{
   "status":"500",
   "error":"internal server error"
}

Error Response Params

Name Type Description Nullable
status string The issued HTTP status code. false
error string A human readable string explaining the error. false
COINQVEST SEP-6 Client for PHP v1.0.0
View on GitHub https://github.com/COINQVEST/sep6-client-php

README.md

COINQVEST SEP-6 Client (PHP)

This client communicates with COINQVEST's Stellar SEP-6 transfer server documented here. It lets you on- and off-ramp Bitcoin on the Stellar Network. This client is written in PHP but we also provide clients in different programming languages.

Read our stellar.toml to inspect available COINQVEST assets on the Stellar Network. At the time of writing we support wrapped Bitcoin and Litecoin.

Requirements

  • PHP >=5.3.0
  • cURL extension for PHP
  • OpenSSL extension for PHP

Installation as Drop-In

Copy the contents of src into the include path of your project.

Usage Client

include('SEP6Client.class.php');
$client = new SEP6Client();

Examples

Deposit Bitcoin onto Stellar

$response = $client->get('/deposit', array(
    'asset_code' => 'BTC',
    'account' => 'GDONUHZKLSYLDOZWR2TDW25GFXOBWCCKTPK34DLUVSOMFHLGURX6FNU6',
    'memo' => 'Sent via SEP-6',
    'memo_type' => 'text'
));
// $response->responseBody -> {"how":"bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23","id":"f2118ef4115642870638616a4372","eta":600,"min_amount":"0.00001","max_amount":"100.0000000","extra_info":{}}

Returns a Bitcoin deposit address alongside some additional context information documented here. Bitcoin sent to the received deposit address is tokenized onto Stellar and sent to above account. The tokenized Bitcoin can be sent and received on the Stellar Network, exchanged for other assets on the SDEX, or be deposited into Stellar's liquidity pools.

Withdraw Bitcoin from Stellar

$response = $client->get('/withdraw', array(
    'asset_code' => 'BTC',
    'dest' => 'bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23'
));
// $response->responseBody -> {"account_id":"GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT","memo_type":"text","memo":"010cdf0a41410d75b2797a6fa38f","id":"010cdf0a41410d75b2797a6fa38f","min_amount":"0.0005000","max_amount":"100.0000000","fee_fixed":0.0002,"fee_percent":0.2,"extra_info":{"message":"An amount above 100.0000000 will take longer to complete"}}

Returns a Stellar account and memo alongside some additional context information documented here. Tokenized Bitcoin sent to the given account is burned on the Stellar Network and released into the Bitcoin address given in the request.

Documentation

Please inspect our SEP-6 API docs or email us at service@coinqvest.com if you have questions.

Support and Feedback

We'd love to hear your feedback. If you have specific problems or bugs with this SDK, please file an issue on GitHub. For general feedback and support requests please email service@coinqvest.com.

Contributing

  1. Fork it ( https://github.com/COINQVEST/sep6-client-php/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request
View on GitHub
COINQVEST SEP-6 Client for Node JS v0.0.4
View on GitHub https://github.com/COINQVEST/sep6-client-nodejs

README.md

COINQVEST SEP-6 Client (Node JS)

This client communicates with COINQVEST's Stellar SEP-6 transfer server documented here. It lets you on- and off-ramp Bitcoin on the Stellar Network. This client is written in Node JS but we also provide clients in different programming languages.

Read our stellar.toml to inspect available COINQVEST assets on the Stellar Network. At the time of writing we support wrapped Bitcoin and Litecoin.

Requirements

  • NodeJS >= 10.14.0
  • axios >= 0.21.1

Installation with npm

npm install sep6-client

Usage Client

const Sep6Client = require('sep6-client');
const client = new Sep6Client();

Examples

Deposit Bitcoin onto Stellar

let response = await client.get('/deposit', {
    'asset_code': 'BTC',
    'account': 'GDONUHZKLSYLDOZWR2TDW25GFXOBWCCKTPK34DLUVSOMFHLGURX6FNU6',
    'memo': 'Sent via SEP-6',
    'memo_type': 'text'
});
// console.log(response.data) -> {"how":"bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23","id":"f2118ef4115642870638616a4372","eta":600,"min_amount":"0.00001","max_amount":"100.0000000","extra_info":{}}

Returns a Bitcoin deposit address alongside some additional context information documented here. Bitcoin sent to the received deposit address is tokenized onto Stellar and sent to above account. The tokenized Bitcoin can be sent and received on the Stellar Network, exchanged for other assets on the SDEX, or be deposited into Stellar's liquidity pools.

Withdraw Bitcoin from Stellar

let response = await client.get('/withdraw', {
    'asset_code': 'BTC',
    'dest': 'bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23'
});
// console.log(response.data) -> {"account_id":"GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT","memo_type":"text","memo":"010cdf0a41410d75b2797a6fa38f","id":"010cdf0a41410d75b2797a6fa38f","min_amount":"0.0005000","max_amount":"100.0000000","fee_fixed":0.0002,"fee_percent":0.2,"extra_info":{"message":"An amount above 100.0000000 will take longer to complete"}}

Returns a Stellar account and memo alongside some additional context information documented here. Tokenized Bitcoin sent to the given account is burned on the Stellar Network and released into the Bitcoin address given in the request.

Documentation

Please inspect our SEP-6 API docs or email us at service@coinqvest.com if you have questions.

Support and Feedback

We'd love to hear your feedback. If you have specific problems or bugs with this SDK, please file an issue on GitHub. For general feedback and support requests please email service@coinqvest.com.

Contributing

  1. Fork it ( https://github.com/COINQVEST/nodejs-merchant-sdk/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request
View on GitHub
COINQVEST SEP-6 Client for Ruby v0.0.2
View on GitHub https://github.com/COINQVEST/sep6-client-ruby

README.md

COINQVEST SEP-6 Client (Ruby)

This client communicates with COINQVEST's Stellar SEP-6 transfer server documented here. It lets you on- and off-ramp Bitcoin on the Stellar Network. This client is written in Ruby but we also provide clients in different programming languages.

Read our stellar.toml to inspect available COINQVEST assets on the Stellar Network. At the time of writing we support wrapped Bitcoin and Litecoin.

Requirements

  • Ruby >= 2.0.0
  • rest-client >= 2.1.0
  • json >= 2.3.0

Installation with gem

gem install sep6_client

Usage Client

require 'sep_client/client'
client = Sep6Client::Client.new()

Examples

Deposit Bitcoin onto Stellar

response = client.get('/deposit', {
    :asset_code => 'BTC',
    :account => 'GDONUHZKLSYLDOZWR2TDW25GFXOBWCCKTPK34DLUVSOMFHLGURX6FNU6',
    :memo => 'Sent via SEP-6',
    :memo_type => 'text',
})
// print response.body -> {"how":"bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23","id":"f2118ef4115642870638616a4372","eta":600,"min_amount":"0.00001","max_amount":"100.0000000","extra_info":{}}

Returns a Bitcoin deposit address alongside some additional context information documented here. Bitcoin sent to the received deposit address is tokenized onto Stellar and sent to above account. The tokenized Bitcoin can be sent and received on the Stellar Network, exchanged for other assets on the SDEX, or be deposited into Stellar's liquidity pools.

Withdraw Bitcoin from Stellar

response = client.get('/withdraw', {
    :asset_code => 'BTC',
    :dest => 'bc1qj633nx575jm28smgcp3mx6n3gh0zg6ndr0ew23'
})
// print response.body -> {"account_id":"GCQVEST7KIWV3KOSNDDUJKEPZLBFWKM7DUS4TCLW2VNVPCBGTDRVTEIT","memo_type":"text","memo":"010cdf0a41410d75b2797a6fa38f","id":"010cdf0a41410d75b2797a6fa38f","min_amount":"0.0005000","max_amount":"100.0000000","fee_fixed":0.0002,"fee_percent":0.2,"extra_info":{"message":"An amount above 100.0000000 will take longer to complete"}}

Returns a Stellar account and memo alongside some additional context information documented here. Tokenized Bitcoin sent to the given account is burned on the Stellar Network and released into the Bitcoin address given in the request.

Documentation

Please inspect our SEP-6 API docs or email us at service@coinqvest.com if you have questions.

Support and Feedback

We'd love to hear your feedback. If you have specific problems or bugs with this SDK, please file an issue on GitHub. For general feedback and support requests please email service@coinqvest.com.

Contributing

  1. Fork it ( https://github.com/COINQVEST/ruby-merchant-sdk/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request
View on GitHub

Proof of Reserves

COINQVEST's SEP-6 transfer server is transparent and auditable. Below is an itemized statement of the SEP-6 transfer server's recent deposit and withdrawal history. Use the /transactions endpoint to query and inspect the entire transfer server history and verify the indicated wallet reserves.

  • Select Network Circulating Supply Hot Wallet Cold Wallet Asset ID
  • Bitcoin 239,219.212123 BTCLN 239,219.212123 BTC 0 BTC BTCLN:G1234...G4321
ID Started At Completed At Amount Type Status Network
12121...32323 2022-10-04 20:50:18 2022-10-04 20:51:20 withdraw pending_user_transfer_complete Litecoin

Use the SEP-6 /transactions endpoint to query the entire transfer server history.

Tx ID Tx Time Destination Amount
12121...32323 2022-10-04 20:50:18 cold

Use https://sep6.coinqvest.com/related-transfers to query all (non-SEP-6) transfers affecting hot wallets and cold wallets.

© COINQVEST LLC 2018-2022 · Terms of Service · Privacy Policy · KYC/AML Policy · Anti-Fraud Policy · Data Processing · License COINQVEST LLC (Company Number 0000970546) is a limited liability company incorporated at 54 Jedności Street, 65-018 Zielona Góra, Poland. COINQVEST LLC reports to the General Inspector of Financial Information and is authorized by the Polish Ministry of Finance to provide virtual currency exchange and custody services under Virtual Asset Service Provider number RDWW-311. Licensed and Regulated in the EU © COINQVEST LLC 2018-2022 · Terms of Service · Privacy Policy · KYC/AML Policy · Anti-Fraud Policy · Data Processing · License
Space cat likes space and he surfs on a space ship.