Skip to main content

Create Your First Drop

Learn how to use DropKit’s GraphQL API to launch drops, process payments, and manage the entire customer experience.

Authentication Setup

To start using DropKit’s GraphQL API, you’ll need an API key:
  1. Sign up at app.dropkit.co
  2. Navigate to your dashboard
  3. Go to Settings > API Keys
  4. Generate a new API key and keep it secure
All GraphQL requests require authentication using Bearer tokens in the header:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "query { me { id username } }"}'

Create Your First Token

Before creating drops, you’ll need to create a token:
Create a fungible token that will be used in your drops:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation CreateToken($input: CreateTokenInput!) { createToken(input: $input) { id name symbol status address } }",
    "variables": {
      "input": {
        "name": "My Creator Token",
        "symbol": "MCT",
        "supply": 1000000,
        "description": "A token for my community"
      }
    }
  }'
Response:
{
  "data": {
    "createToken": {
      "id": "token_abc123",
      "name": "My Creator Token",
      "symbol": "MCT",
      "status": "PENDING",
      "address": null
    }
  }
}

Launch Your First Drop

Create a token drop using your newly created token:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation CreateDrop($input: CreateDropInput!) { createDrop(input: $input) { id title shortcode status type claimType maxAmount tokenAmount token { name symbol } } }",
    "variables": {
      "input": {
        "title": "Community Token Drop",
        "description": "A drop for early supporters",
        "type": "TOKEN",
        "claimType": "REGULAR",
        "maxAmount": "100000",
        "tokenAmount": "100",
        "existingTokenId": "token_abc123",
        "estimatedValueUsd": 10.0
      }
    }
  }'
Response:
{
  "data": {
    "createDrop": {
      "id": "drop_xyz789",
      "title": "Community Token Drop",
      "shortcode": "community-token-drop",
      "status": "ACTIVE",
      "type": "TOKEN",
      "claimType": "REGULAR",
      "maxAmount": "100000",
      "tokenAmount": "100",
      "token": {
        "name": "My Creator Token",
        "symbol": "MCT"
      }
    }
  }
}
Create an NFT drop:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation CreateDrop($input: CreateDropInput!) { createDrop(input: $input) { id title shortcode type price supply } }",
    "variables": {
      "input": {
        "title": "Genesis NFT Collection",
        "description": "Limited edition NFT collection",
        "type": "NFT",
        "claimType": "REGULAR",
        "maxAmount": "1000",
        "tokenAmount": "1",
        "existingTokenId": "token_nft123",
        "price": 5.0,
        "supply": 1000,
        "imageUrl": "https://example.com/nft-collection.png"
      }
    }
  }'

View Your Drops

Get all your drops:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query GetMyDrops { myDrops { id title status type claimedAmount maxAmount claimRate claimCount createdAt token { name symbol } } }"
  }'
Response:
{
  "data": {
    "myDrops": [
      {
        "id": "drop_xyz789",
        "title": "Community Token Drop",
        "status": "ACTIVE",
        "type": "TOKEN",
        "claimedAmount": "2500",
        "maxAmount": "100000",
        "claimRate": 2.5,
        "claimCount": 25,
        "createdAt": "2024-01-15T10:30:00Z",
        "token": {
          "name": "My Creator Token",
          "symbol": "MCT"
        }
      }
    ]
  }
}
Get detailed statistics for a specific drop:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query GetDropStats($id: ID!) { dropDashboardStats(id: $id) { totalClaims recentClaims claimRate totalAmount claimedAmount recentActivity { id type description timestamp } } }",
    "variables": {
      "id": "drop_xyz789"
    }
  }'

Process Payments

Handle purchases with multiple payment methods including crypto.
Process a purchase with payment intents:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation CreatePaymentIntent($input: CreatePaymentIntentInput!) { createPaymentIntent(input: $input) { id intentId status amount paymentUrl expiresAt } }",
    "variables": {
      "input": {
        "dropId": "drop_xyz789",
        "walletAddress": "0x123...",
        "paymentMethod": "sui",
        "quantity": 2
      }
    }
  }'
Response:
{
  "data": {
    "createPaymentIntent": {
      "id": "pi_abc123",
      "intentId": "pi_xyz789",
      "status": "PENDING",
      "amount": 10.0,
      "paymentUrl": "https://pay.moral.capital/intents/pi_xyz789",
      "expiresAt": "2024-01-15T11:30:00Z"
    }
  }
}
Confirm a payment after completion:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation ConfirmPayment($id: ID!, $txHash: String) { confirmPaymentIntent(id: $id, txHash: $txHash) { id status amount } }",
    "variables": {
      "id": "pi_abc123",
      "txHash": "0x123abc..."
    }
  }'

Claiming Drops

Enable users to claim tokens or NFTs from your drops.
Process a token claim:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation ClaimTokens($input: ClaimDropInput!) { claimDrop(input: $input) { claim { id amount claimedAt user { username } } claimParams { amount nonce expiry signature } dropInfo { dropObjectId packageId coinType } } }",
    "variables": {
      "input": {
        "dropId": "drop_xyz789",
        "amount": "100",
        "userAddress": "0x123..."
      }
    }
  }'
For drops with random amounts:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation ClaimRandom($input: ClaimRandomDropInput!) { claimRandomDrop(input: $input) { success message claimedAmount claim { id amount } } }",
    "variables": {
      "input": {
        "dropId": "drop_xyz789",
        "userAddress": "0x123..."
      }
    }
  }'

Access Control & Gating

Create eligibility requirements for your drops.
Verify if a wallet meets requirements:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query CheckEligibility($input: GatingCheckInput!) { checkGatingEligibility(input: $input) { eligible reason missingRequirements } }",
    "variables": {
      "input": {
        "dropId": "drop_xyz789",
        "walletAddress": "0x123..."
      }
    }
  }'
Response:
{
  "data": {
    "checkGatingEligibility": {
      "eligible": true,
      "reason": "All requirements met",
      "missingRequirements": []
    }
  }
}
Set up gating rules for a drop:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation UpdateGating($dropId: ID!, $input: UpdateGatingConfigInput!) { updateGatingConfig(dropId: $dropId, input: $input) { id isActive rules { key operator value description } } }",
    "variables": {
      "dropId": "drop_xyz789",
      "input": {
        "isActive": true,
        "rules": [
          {
            "key": "token_balance",
            "operator": ">=",
            "value": "100",
            "description": "Must hold at least 100 tokens"
          }
        ]
      }
    }
  }'
Get available gating templates:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query GetGatingTemplates { gatingTemplates { id name description category rules { key operator value description } } }"
  }'

Track Activity

Monitor events and analytics across your drops.
Get platform events for monitoring:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query GetPlatformEvents($dropId: ID, $limit: Int) { platformEvents(dropId: $dropId, limit: $limit) { id event timestamp details drop { title } user { username } } }",
    "variables": {
      "dropId": "drop_xyz789",
      "limit": 10
    }
  }'
Register webhooks for real-time notifications:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation RegisterWebhook($input: RegisterWebhookInput!) { registerWebhook(input: $input) { id webhookId url events secret isActive } }",
    "variables": {
      "input": {
        "url": "https://your-app.com/webhooks/dropkit",
        "events": ["drop.claimed", "payment.confirmed", "drop.completed"]
      }
    }
  }'

Advanced Features

User Management

Get your user profile:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query GetMyProfile { me { id username displayName bio avatar email createdAt } }"
  }'
Update your profile information:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation UpdateProfile($input: UpdateProfileInput!) { updateProfile(input: $input) { id username displayName bio avatar } }",
    "variables": {
      "input": {
        "displayName": "Creator Name",
        "bio": "Building the future of digital collectibles",
        "avatar": "https://example.com/avatar.png"
      }
    }
  }'

File Management

Upload images and other files:
curl -X POST https://api.dropkit.co/graphql \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "mutation UploadFile($input: UploadFileInput!) { uploadFile(input: $input) { url filename size contentType } }",
    "variables": {
      "input": {
        "file": "base64_encoded_file_content",
        "filename": "drop-image.png",
        "contentType": "image/png"
      }
    }
  }'

Next Steps

Now that you’ve created your first drop, explore:

GraphQL Benefits

Powerful Queries

  • Fetch exactly the data you need
  • Get related data in a single request
  • Real-time computed fields

Type Safety

  • Strongly typed schema
  • Built-in validation
  • Auto-completion support

Flexibility

  • Multiple operations in one request
  • Aliases for complex queries
  • Fragments for reusable selections

Performance

  • Efficient data fetching
  • Reduced over-fetching
  • Optimized for mobile apps