How To: Implement Marketplace Credits (API)

Summary

Merchants can follow this guide to learn how to implement a Credits purchase flow on Coinflow’s Marketplace so that end-users can purchase credits, then spend those credits towards purchases with sellers. Upon spending credits, Sellers will receive their funds in their seller wallet and can then withdraw their earnings from profits.

Setup

Resources

Getting Started

  • This will generate a link which sellers can use to register themselves as a seller under the marketplace.
curl --request POST \
--url https://api-sandbox.coinflow.cash/api/marketplace/link/seller/registration \
--header 'Authorization: YOUR_API-KEY_HERE' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"email": "sellerEmailAddress@email.com", // the seller email address
"sellerId": "seller1", // the seller id on your platform
"country": "us", // the seller's location
"redirectUrl": "https://www.mywebsite.com/" // url to redirect the seller to upon registration completion
}
'
  • This will generate a link which sellers can use to login to their seller dashboard to view purchases, customers, withdraw their funds, view withdraw history.
curl --request POST \
--url https://api-sandbox.coinflow.cash/api/marketplace/link/seller/login \
--header 'Authorization: YOUR_API-KEY_HERE' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"email": "sellerEmailAddress@gmail.com" //you can optionally pass the seller id instead of email eg: {"sellerId": "seller1"}
}
'

3.Generate a wallet for the payer

In order to purchase credits, payers need to have a wallet, which will act as a place that will house the credits. Given the payer’s email, calling this endpoint will generate a wallet address on behalf of the payer.

Request
$curl --location 'https://api-sandbox.coinflow.cash/api/marketplace/wallet' \
>--header 'Authorization: YOUR_API_KEY' \
>--header 'accept: application/json' \
>--header 'content-type: application/json' \
>--data-raw '
>{
> "email": "tasha+testmarketplace@coinflowlabs.app"
>}
>'
Reponse
1{
2 "wallet": "P1uPQFW6Q9fL8csc8oh9qnFKub7h5JWBWKxmqygGd4U",
3 "blockchain": "solana"
4}

4. Allow the payer to purchase credits

This endpoint will generate a purchase link. Marketplaces can collect their own fees for each credit purchase if they’d like. The fixedFee or percentageFee will be taken from the subtotal and be immediately sent to your marketplace’s wallet balance when the payer purchases the credits. In the example below, the marketplace will receive 5andthepayerwillreceive5 and the payer will receive 50 in credits.

Request
$curl --request POST \
> --url https://api-sandbox.coinflow.cash/api/checkout/link \
> --header 'Authorization: YOUR_API_KEY' \
> --header 'accept: application/json' \
> --header 'content-type: application/json' \
> --header 'x-coinflow-auth-blockchain: solana' \
> --header 'x-coinflow-auth-wallet: P1uPQFW6Q9fL8csc8oh9qnFKub7h5JWBWKxmqygGd4U' \ // This should be the wallet address returned in step 1
> --data '
>{
> "subtotal": {
> "currency": "USD",
> "cents": 5500
> },
> "fixedFee": {
> "cents": 500
> },
> "email": "tasha+testmarketplace@coinflowlabs.app",
> "blockchain": "solana",
> "settlementType": "Credits"
>}
>'
Response
1{
2 "link": "https://sandbox.coinflow.cash/solana/purchase-v2/tylee?sessionKey=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3YWxsZXQiOiJQMXVQUUZXNlE5Zkw4Y3NjOG9oOXFuRkt1YjdoNUpXQldLeG1xeWdHZDRVIiwiYmxvY2tjaGFpbiI6InNvbGFuYSIsIm1lcmNoYW50SWQiOiJ0eWxlZSIsImlhdCI6MTc0Mjg0MDA3NiwiZXhwIjoxNzQyOTI2NDc2fQ.ouDD47g1RSTj1QzxncgGbK209DqFJ8uDzVcTM8Oxgx0&cents=5500&currency=USD&email=iamapayer%40gmail.com&useHeightChange=true&jwtToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoi456C4oKW26LXguCxoOWMg-uAieiCrOKgoeqZkuiBseqAs-GogOuAguaRgOmwgOOGmeuUgeuAhuazgueghOaanuKAg-SIgsOs7oCC54CJ7oCB7ICL6IiyReOJjOyMhOOtjOekqOqJouySnNik6YCc7IOM6IGG5LW46amQ5ruE6YSE54e17Jqn4Lia5LCO74aS5KGO4Kmq7KGM5LCR4qSI5Kex4YOV4qKC74ao7LGR5bGJ7ZGJ6LCZ6LSo6aG84aad5LCQ5LSw6aGQ6YGN6qST44GM4rS04aOVXHVkOTA44YWS6aao74SK6q6s5YGN4KC14Y-Y7KCJ4KKQ75KR6qaw6KuQ75CY5LKYXHVkOTVj4Yap6qab44GI7ZCN6rSQ7YeZ6qSI5aGR4Kap4qaw77WG46OQ7oaw4YSS46yT5Yug6YGI5KOY7LuQ5aCX7KOyXHVkODRj7KGY5ICB57KAIiwibWVyY2hhbnRJZCI6InR5bGVlIiwiaWRlbXBvdGVuY3lLZXkiOiJJS2VlOWY5NDFlLTc0OGItNGI0OS1iYWNmLTYzYzJhOTRlYzc5YyIsInN1YnRvdGFsIjp7ImN1cnJlbmN5IjoiVVNEIiwiY2VudHMiOjU1MDB9LCJpYXQiOjE3NDI4NDAwNzYsImV4cCI6MTc0MjkyNjQ3Nn0.8gINpQ2EelWrMhBmVEGOZlf58NWF_-B9UYMXbfSHREM"
3}
Display Payment
1<iframe
2 allow={'payment'}
3 scrolling="no"
4 style={{height: '100%', width: '100%'}}
5 src={'https://sandbox.coinflow.cash/solana/purchase-v2/tylee?sessionKey=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3YWxsZXQiOiJQMXVQUUZXNlE5Zkw4Y3NjOG9oOXFuRkt1YjdoNUpXQldLeG1xeWdHZDRVIiwiYmxvY2tjaGFpbiI6InNvbGFuYSIsIm1lcmNoYW50SWQiOiJ0eWxlZSIsImlhdCI6MTc0Mjg0MDA3NiwiZXhwIjoxNzQyOTI2NDc2fQ.ouDD47g1RSTj1QzxncgGbK209DqFJ8uDzVcTM8Oxgx0&cents=5500&currency=USD&email=iamapayer%40gmail.com&useHeightChange=true&jwtToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoi456C4oKW26LXguCxoOWMg-uAieiCrOKgoeqZkuiBseqAs-GogOuAguaRgOmwgOOGmeuUgeuAhuazgueghOaanuKAg-SIgsOs7oCC54CJ7oCB7ICL6IiyReOJjOyMhOOtjOekqOqJouySnNik6YCc7IOM6IGG5LW46amQ5ruE6YSE54e17Jqn4Lia5LCO74aS5KGO4Kmq7KGM5LCR4qSI5Kex4YOV4qKC74ao7LGR5bGJ7ZGJ6LCZ6LSo6aG84aad5LCQ5LSw6aGQ6YGN6qST44GM4rS04aOVXHVkOTA44YWS6aao74SK6q6s5YGN4KC14Y-Y7KCJ4KKQ75KR6qaw6KuQ75CY5LKYXHVkOTVj4Yap6qab44GI7ZCN6rSQ7YeZ6qSI5aGR4Kap4qaw77WG46OQ7oaw4YSS46yT5Yug6YGI5KOY7LuQ5aCX7KOyXHVkODRj7KGY5ICB57KAIiwibWVyY2hhbnRJZCI6InR5bGVlIiwiaWRlbXBvdGVuY3lLZXkiOiJJS2VlOWY5NDFlLTc0OGItNGI0OS1iYWNmLTYzYzJhOTRlYzc5YyIsInN1YnRvdGFsIjp7ImN1cnJlbmN5IjoiVVNEIiwiY2VudHMiOjU1MDB9LCJpYXQiOjE3NDI4NDAwNzYsImV4cCI6MTc0MjkyNjQ3Nn0.8gINpQ2EelWrMhBmVEGOZlf58NWF_-B9UYMXbfSHREM'} # URL returned from the response
6/>
Example Credits Purchase Form
Example Credits Purchase Form

5. Get the Payer’s credit balance

Payers can use either credits or Solana USDC to pay creators directly. You can get the balance a payer has in their wallet by calling the Get Checkout Balances Endpoint.

Request
$curl --location 'https://api-sandbox.coinflow.cash/api/customer/balances/tylee' \
>--header 'accept: application/json' \
>--header 'x-coinflow-auth-blockchain: solana' \
>--header 'x-coinflow-auth-wallet: P1uPQFW6Q9fL8csc8oh9qnFKub7h5JWBWKxmqygGd4U' // User wallet address from step 1
Response
1{
2 "credits": {
3 "cents": 0
4 },
5 "usdc": {
6 "cents": 0
7 }
8}

6. Allowing payers to spend their credits/USDC

  1. Request JWT Token
    This tokenizes the checkout request parameters.
    Request
    1curl --request POST \
    2 --url https://api-sandbox.coinflow.cash/api/checkout/jwt-token \
    3 --header 'Authorization: YOUR_API_KEY' \
    4 --header 'x-coinflow-submerchant-id: SELLER_ID' \
    5 --header 'accept: application/json' \
    6 --header 'content-type: application/json' \
    7 --data '
    8{
    9 "webhookInfo": {
    10 "example": "{\"id\":\"123abc\"}"
    11 },
    12 "subtotal": {
    13 "currency": "USD",
    14 "cents": 1500
    15 },
    16 "fixedFee": {
    17 "cents": 500
    18 },
    19 "blockchain": "solana",
    20 "settlementType": "Credits",
    21 "email": "tasha+testmarketplace@coinflowlabs.app",
    22 "chargebackProtectionData": [
    23 {
    24 "productType": "fundACause",
    25 "rawProductData": {
    26 "example": "{\"description\": \"anything about the purchase\"}"
    27 },
    28 "productName": "my product name",
    29 "quantity": 1
    30 }
    31 ]
    32}
    33'
    Response
    {
    "checkoutJwtToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoi456C4oKW26LXgtOA4YyA44CQ7IKs5K2A5aKQ5LiC44iQ6Iu44LGg4aaCzrHqroDkmYnmjqnnn5vooIDtgoDipoDnmqTJsOCnoMeA4K630IDkkZHopYPQgOaYgOGwgFx1ZDlmMuq1nuWukuOrueymo-qKkeW0reioj-6Oh-WyluWWpeSqqOSmuO6lvOaliOKOremSt-GTuemWo-qHkeyHueqOkOqMq-mIqeWLoeaBquKvo-eNsuKpqeWKq-GtseqHguaPke6Goueqk-KqmOqHkeWHg-iVo-KlkOqOouWngeaLuOqNquKbo-mOkeyKqeyBkeGZquKiouGdsu6GleKOq-Kgo-KrhOKOkumCmuWloeGmkuOPl-eKkeedqeeSjO2WoeqareerouGqqe6GueWOk-6AoeyLoeKNs-6LouW2oN2x7Y2x6q2z6Ji766m15YS-4qym76mm4auQ7qOj5J6L4YyO5JGx5YSU75Gg6aGY7K2y7IG46YO44b6l5ZKu7Zqg4oec4KCV4omb6JyD6I2V4pGw4ZKIXHVkY2Ey5o2p76CS7KiL6YiR5JqG5Ke07LmkXHVkYzJm7Kin5JKq7oSU47ik6q2Y6JyH7IKg6YKk4rCT5a6F5I-C5KGQ6YKa4riC5qqh6KWg5aak5aWc4Kyk6Iqj4qai66GV4YaY5b6H6aCS5YO74qK-5Lae5JeB7IWe66CS6pWK6IKG7oSx4omG0obqsoXkg5fhj4XrhYPptpLokofSoOqyjOSore2Wg-aMieODqe66vOeJjuaOrOWNpOe6heaUqlx1ZGYwYeiUueqDkO-qqee3nuytsu-onOiHnu2Upuelg-iCtOGGseC7vuuEseKvqOScqOaqpOaMoumzpeyuoOmjqOi2n-K6nuWah-OFkOmKhOSIpOKTgO6GueensOGqmOiWvu2Vgum_jeakpuGMhVx1ZGIwOem8sOqHpuCluuSCrOGKp-6VpuKFpOeoteWcheOZuueKg-a5lemIquqak-uPi-eSqu-Uheu5kuiaoOKapuqoteOGhFx1MDAwNe-IgCIsIm1lcmNoYW50SWQiOiJ0eWxlZSIsImlkZW1wb3RlbmN5S2V5IjoiSUs0Mjc4NmEwNi1jZTY5LTRmZjgtYjAwNC01NjY5NzJhOWExN2UiLCJzdWJ0b3RhbCI6eyJjdXJyZW5jeSI6IlVTRCIsImNlbnRzIjo1NTAwfSwiaWF0IjoxNzQyODQwMzg2LCJleHAiOjE3NDI5MjY3ODZ9.hwTqUe8AdCOT2JTW31WYvFVa08Y-N8gGUsBA8VEcN08"
    }
  2. Generate a tokenized checkout link so end-user can spend their credits.
Request
1curl --request POST \
2 --url https://api-sandbox.coinflow.cash/api/marketplace/link/purchase/credits \
3 --header 'Authorization: YOUR_API_KEY' \
4 --header 'accept: application/json' \
5 --header 'content-type: application/json' \
6 --data '
7{
8 "checkoutJwtToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoi456C4oKW26LXgtOA4YyA44CQ7IKs5K2A5aKQ5LiC44iQ6Iu44LGg4aaCzrHqroDkmYnmjqnnn5vooIDtgoDipoDnmqTJsOCnoMeA4K630IDkkZHopYPQgOaYgOGwgFx1ZDlmMuq1nuWukuOrueymo-qKkeW0reioj-6Oh-WyluWWpeSqqOSmuO6lvOaliOKOremSt-GTuemWo-qHkeyHueqOkOqMq-mIqeWLoeaBquKvo-eNsuKpqeWKq-GtseqHguaPke6Goueqk-KqmOqHkeWHg-iVo-KlkOqOouWngeaLuOqNquKbo-mOkeyKqeyBkeGZquKiouGdsu6GleKOq-Kgo-KrhOKOkumCmuWloeGmkuOPl-eKkeedqeeSjO2WoeqareerouGqqe6GueWOk-6AoeyLoeKNs-6LouW2oN2x7Y2x6q2z6Ji766m15YS-4qym76mm4auQ7qOj5J6L4YyO5JGx5YSU75Gg6aGY7K2y7IG46YO44b6l5ZKu7Zqg4oec4KCV4omb6JyD6I2V4pGw4ZKIXHVkY2Ey5o2p76CS7KiL6YiR5JqG5Ke07LmkXHVkYzJm7Kin5JKq7oSU47ik6q2Y6JyH7IKg6YKk4rCT5a6F5I-C5KGQ6YKa4riC5qqh6KWg5aak5aWc4Kyk6Iqj4qai66GV4YaY5b6H6aCS5YO74qK-5Lae5JeB7IWe66CS6pWK6IKG7oSx4omG0obqsoXkg5fhj4XrhYPptpLokofSoOqyjOSore2Wg-aMieODqe66vOeJjuaOrOWNpOe6heaUqlx1ZGYwYeiUueqDkO-qqee3nuytsu-onOiHnu2Upuelg-iCtOGGseC7vuuEseKvqOScqOaqpOaMoumzpeyuoOmjqOi2n-K6nuWah-OFkOmKhOSIpOKTgO6GueensOGqmOiWvu2Vgum_jeakpuGMhVx1ZGIwOem8sOqHpuCluuSCrOGKp-6VpuKFpOeoteWcheOZuueKg-a5lemIquqak-uPi-eSqu-Uheu5kuiaoOKapuqoteOGhFx1MDAwNe-IgCIsIm1lcmNoYW50SWQiOiJ0eWxlZSIsImlkZW1wb3RlbmN5S2V5IjoiSUs0Mjc4NmEwNi1jZTY5LTRmZjgtYjAwNC01NjY5NzJhOWExN2UiLCJzdWJ0b3RhbCI6eyJjdXJyZW5jeSI6IlVTRCIsImNlbnRzIjo1NTAwfSwiaWF0IjoxNzQyODQwMzg2LCJleHAiOjE3NDI5MjY3ODZ9.hwTqUe8AdCOT2JTW31WYvFVa08Y-N8gGUsBA8VEcN08",
9 "email": "tasha+testmarketplace@coinflowlabs.app"
10}
11'
Response
{
"link": "https://sandbox-marketplace.coinflow.cash/checkout-credits?sellerId=tylee&cents=5500&jwtToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoi456C4oKW26LXgtOA4YyA44CQ7IKs5K2A5aKQ5LiC44iQ6Iu44LGg4aaCzrHqroDkmYnmjqnnn5vooIDtgoDipoDnmqTJsOCnoMeA4K630IDkkZHopYPQgOaYgOGwgFx1ZDlmMuq1nuWukuOrueymo-qKkeW0reioj-6Oh-WyluWWpeSqqOSmuO6lvOaliOKOremSt-GTuemWo-qHkeyHueqOkOqMq-mIqeWLoeaBquKvo-eNsuKpqeWKq-GtseqHguaPke6Goueqk-KqmOqHkeWHg-iVo-KlkOqOouWngeaLuOqNquKbo-mOkeyKqeyBkeGZquKiouGdsu6GleKOq-Kgo-KrhOKOkumCmuWloeGmkuOPl-eKkeedqeeSjO2WoeqareerouGqqe6GueWOk-6AoeyLoeKNs-6LouW2oN2x7Y2x6q2z6Ji766m15YS-4qym76mm4auQ7qOj5J6L4YyO5JGx5YSU75Gg6aGY7K2y7IG46YO44b6l5ZKu7Zqg4oec4KCV4omb6JyD6I2V4pGw4ZKIXHVkY2Ey5o2p76CS7KiL6YiR5JqG5Ke07LmkXHVkYzJm7Kin5JKq7oSU47ik6q2Y6JyH7IKg6YKk4rCT5a6F5I-C5KGQ6YKa4riC5qqh6KWg5aak5aWc4Kyk6Iqj4qai66GV4YaY5b6H6aCS5YO74qK-5Lae5JeB7IWe66CS6pWK6IKG7oSx4omG0obqsoXkg5fhj4XrhYPptpLokofSoOqyjOSore2Wg-aMieODqe66vOeJjuaOrOWNpOe6heaUqlx1ZGYwYeiUueqDkO-qqee3nuytsu-onOiHnu2Upuelg-iCtOGGseC7vuuEseKvqOScqOaqpOaMoumzpeyuoOmjqOi2n-K6nuWah-OFkOmKhOSIpOKTgO6GueensOGqmOiWvu2Vgum_jeakpuGMhVx1ZGIwOem8sOqHpuCluuSCrOGKp-6VpuKFpOeoteWcheOZuueKg-a5lemIquqak-uPi-eSqu-Uheu5kuiaoOKapuqoteOGhFx1MDAwNe-IgCIsIm1lcmNoYW50SWQiOiJ0eWxlZSIsImlkZW1wb3RlbmN5S2V5IjoiSUs0Mjc4NmEwNi1jZTY5LTRmZjgtYjAwNC01NjY5NzJhOWExN2UiLCJzdWJ0b3RhbCI6eyJjdXJyZW5jeSI6IlVTRCIsImNlbnRzIjo1NTAwfSwiaWF0IjoxNzQyODQwMzg2LCJleHAiOjE3NDI5MjY3ODZ9.hwTqUe8AdCOT2JTW31WYvFVa08Y-N8gGUsBA8VEcN08&email=iamapayer%40gmail.com"
}
  1. Add link to an iframe
    Generate Iframe
    1<div style={{height: '450px', width: '350px'}}>
    2 <iframe
    3 scrolling="no"
    4 style={{height: '100%', width: '100%'}}
    5 src={`https://sandbox-marketplace.coinflow.cash/checkout-credits?sellerId=tylee&cents=1500&jwtToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoi456C4oKW26LXgtOA4YyA44CQ7IKs5K2A5aKQ5LiC44iQ6Iu44LGg4aaCzrHqroDkmYnmjqnnn5vooIDtgoDipoDnmqTJsOCnoMeA4K630IDkkZHopYPQgOaYgOGwgFx1ZDlmMuq1nuWukuOrueymo-qKkeW0reioj-6Oh-WyluWWpeSqqOSmuO6lvOaliOKOremSt-GTuemWo-qHkeyHueqOkOqMq-mIqeWLoeaBquKvo-eNsuKpqeWKq-GtseqHguaPke6Goueqk-KqmOqHkeWHg-iVo-KlkOqOouWngeaLuOqNquKbo-mOkeyKqeyBkeGZquKiouGdsu6GleKOq-Kgo-KrhOKOkumCmuWloeGmkuOPl-eKkeedqeeSjO2WoeqareerouGqqe6GueWOk-6AoeyLoeKNs-6LouW2oN2x7Y2x6q2z6Ji766m15YS-4qym76mm4auQ7qOj5J6L4YyO5JGx5YSU75Gg6aGY7K2y7IG46YO44b6l5ZKu7Zqg4oec4KCV4omb6JyD6I2V4pGw4ZKIXHVkY2Ey5o2p76CS7KiL6YiR5JqG5Ke07LmkXHVkYzJm7Kin5JKq7oSU47ik6q2Y6JyH7IKg6YKk4rCT5a6F5I-C5KGQ6YKa4riC5qqh6KWg5aak5aWc4Kyk6Iqj4qai66GV4YaY5b6H6aCS5YO74qK-5Lae5JeB7IWe66CS6pWK6IKG7oSx4omG0obqsoXkg5fhj4XrhYPptpLokofSoOqyjOSore2Wg-aMieODqe66vOeJjuaOrOWNpOe6heaUqlx1ZGYwYeiUueqDkO-qqee3nuytsu-onOiHnu2Upuelg-iCtOGGseC7vuuEseKvqOScqOaqpOaMoumzpeyuoOmjqOi2n-K6nuWah-OFkOmKhOSIpOKTgO6GueensOGqmOiWvu2Vgum_jeakpuGMhVx1ZGIwOem8sOqHpuCluuSCrOGKp-6VpuKFpOeoteWcheOZuueKg-a5lemIquqak-uPi-eSqu-Uheu5kuiaoOKapuqoteOGhFx1MDAwNe-IgCIsIm1lcmNoYW50SWQiOiJ0eWxlZSIsImlkZW1wb3RlbmN5S2V5IjoiSUs0Mjc4NmEwNi1jZTY5LTRmZjgtYjAwNC01NjY5NzJhOWExN2UiLCJzdWJ0b3RhbCI6eyJjdXJyZW5jeSI6IlVTRCIsImNlbnRzIjo1NTAwfSwiaWF0IjoxNzQyODQwMzg2LCJleHAiOjE3NDI5MjY3ODZ9.hwTqUe8AdCOT2JTW31WYvFVa08Y-N8gGUsBA8VEcN08&email=tasha%2Btestmarketplace%40coinflowlabs.app`}
    6 />
    7</div>
Email is prefilled for the user
Email is prefilled for the user
User is prompted to enter 2FA code - session is saved for repeat purchases
User is prompted to enter 2FA code - session is saved for repeat purchases
User is prompted to complete purchase - Balance is amount of Credits + USDC
User is prompted to complete purchase - Balance is amount of Credits + USDC

7. Listen to webhook events for:

8. Add Chargeback protection on every page of your site!!

  • Note: It is a requirement to add this script to the head of every page, and not just where the payment occurs. After filling in the chargeback protection questionnaire, Coinflow will provider a partner id.