DevoraDevoraDocs

Airdrop API (v1)

Programmatically manage airdrop projects, tasks, and hunting workflows.

The Airdrop API allows you to register projects, manage tasks, and track your airdrop hunting workflow externally. It mirrors the Devora dashboard's Airdrop Center feature set.


How It Works

┌──────────┐     ┌─────────────────────┐     ┌──────────┐
│  Client  │────▶│  Devora Airdrop API │────▶│  Prisma  │
│  (SDK)   │◄────│  /api/v1/airdrops   │◄────│   (DB)   │
└──────────┘     └─────────────────────┘     └──────────┘
  1. Register a project via POST /api/v1/airdrops
  2. Add tasks via POST /api/v1/airdrops/{id}/tasks
  3. Track progress via GET /api/v1/airdrops with status filters
  4. Update status via PUT /api/v1/airdrops as projects evolve

Authentication

All endpoints require an API Key in the Authorization header as a Bearer token.

Authorization: Bearer devora_your_api_key

[!IMPORTANT] API Keys must be generated from your API Key Management page and must start with the devora_ prefix.


Base URL

https://devora.my.id/api/v1/airdrops

Projects

List All Projects

Retrieve all airdrop projects you own, plus all public approved projects from other users.

  • Endpoint: GET /api/v1/airdrops
  • Method: GET

Query Parameters

ParameterTypeDescription
statusStringFilter by status (New, Potential, Confirmed, etc.).
projectTypeStringFilter by project type (Infra, DeFi, etc.).
isPublicBooleanFilter by visibility (true/false).

Example Request

curl "https://devora.my.id/api/v1/airdrops?status=New&projectType=Infra" \
  -H "Authorization: Bearer devora_your_api_key"

Response 200

[
  {
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "name": "Devora Protocol",
    "status": "New",
    "cost": "$0",
    "time": "5 minutes",
    "raise": "$11B",
    "projectType": "Infra",
    "links": "[{\"name\":\"web\",\"url\":\"https://devora.ai\"}]",
    "isPublic": false,
    "publishStatus": "NONE",
    "createdAt": "2026-04-20T08:00:00.000Z",
    "_count": {
      "tasks": 3
    }
  }
]

[!NOTE] The links field is stored as a JSON string. Parse it with JSON.parse() before use.


Register a New Project

Create a new airdrop project in your dashboard.

  • Endpoint: POST /api/v1/airdrops
  • Method: POST

Request Body

FieldTypeRequiredDescription
nameStringYesName of the project.
iconStringNoURL to project icon/logo.
descriptionStringNoProject description and instructions.
statusStringNoInitial status. Defaults to New.
costStringNoEstimated cost (e.g., "$0", "Rp. 50.000").
timeStringNoEstimated time (e.g., "10 minutes").
raiseStringNoTotal funding raised (e.g., "$11B").
scoreStringNoProject score or rating.
symbolStringNoToken symbol.
rewardDateStringNoExpected reward date.
rewardTypeStringNoType of reward. See Reward Types.
taskTypeStringNoType of tasks involved. See Task Types.
stageStringNoProject stage.
projectTypeStringNoCategory. See Project Types.
linksArrayNoObjects containing { "name": "web", "url": "..." }.
isPublicBooleanNoMake project public (ULTRA users only).

[!TIP] The links array supports: web, x, github, telegram, discord. These appear as clickable icons in the UI.

Example Request

curl -X POST https://devora.my.id/api/v1/airdrops \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer devora_your_api_key" \
  -d '{
    "name": "Devora Protocol",
    "icon": "https://devora.ai/logo.png",
    "description": "Complete tasks to earn rewards",
    "status": "New",
    "cost": "$0",
    "time": "5 minutes",
    "raise": "$11B",
    "symbol": "DVR",
    "rewardType": "Airdrop",
    "projectType": "Infra",
    "links": [
      { "name": "web", "url": "https://devora.ai" },
      { "name": "x", "url": "https://x.com/devora" }
    ]
  }'

Response 201

{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "name": "Devora Protocol",
  "status": "New",
  "statusDate": "2026-04-23T12:00:00.000Z",
  "isPublic": false,
  "publishStatus": "NONE",
  "createdAt": "2026-04-23T12:00:00.000Z"
}

[!IMPORTANT] Auto-status logic: When creating a project with status New, if there are already 5 New projects, the oldest ones are automatically demoted to Potential to keep your dashboard focused.


Update a Project

Modify an existing airdrop project.

  • Endpoint: PUT /api/v1/airdrops
  • Method: PUT

Request Body

FieldTypeRequiredDescription
idStringYesProject UUID to update.
nameStringNoUpdated project name.
iconStringNoUpdated icon URL.
descriptionStringNoUpdated description.
statusStringNoUpdated status.
linksArrayNoUpdated links array.
......NoAny other project fields to update.

[!NOTE] Only the project owner or ULTRA users can update projects. ULTRA users can also modify isPublic and publishStatus fields.

Example Request

curl -X PUT https://devora.my.id/api/v1/airdrops \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer devora_your_api_key" \
  -d '{
    "id": "123e4567-e89b-12d3-a456-426614174000",
    "status": "Confirmed",
    "raise": "$15B"
  }'

Response 200

{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "name": "Devora Protocol",
  "status": "Confirmed",
  "statusDate": "2026-04-23T12:05:00.000Z",
  "raise": "$15B",
  "updatedAt": "2026-04-23T12:05:00.000Z"
}

[!NOTE] The statusDate field is automatically updated whenever the status changes, enabling timeline tracking in the UI.


Delete a Project

Permanently remove a project and all associated tasks.

  • Endpoint: DELETE /api/v1/airdrops?id=PROJECT_ID
  • Method: DELETE

Query Parameters

ParameterTypeRequiredDescription
idStringYesProject UUID to delete.

[!WARNING] This will permanently delete the project and all associated tasks and progress records. This action cannot be undone.

Example Request

curl -X DELETE "https://devora.my.id/api/v1/airdrops?id=123e4567-e89b-12d3-a456-426614174000" \
  -H "Authorization: Bearer devora_your_api_key"

Response 200

{
  "message": "Airdrop deleted successfully"
}

Tasks

List Tasks for a Project

Get all tasks for a specific project.

  • Endpoint: GET /api/v1/airdrops/{id}/tasks
  • Method: GET

Path Parameters

  • id: The UUID of the project.

Query Parameters

ParameterTypeDescription
categoryStringFilter by category (Social, Testnet, etc.).
statusStringFilter by status (Open, Closed).

Example Request

curl "https://devora.my.id/api/v1/airdrops/123e4567-e89b-12d3-a456-426614174000/tasks?category=Social" \
  -H "Authorization: Bearer devora_your_api_key"

Response 200

[
  {
    "id": "task-uuid",
    "title": "Join Telegram",
    "category": "Social",
    "description": "Join our community",
    "status": "Open",
    "deadline": "2026-12-31T00:00:00.000Z",
    "steps": [
      {
        "text": "Click the link",
        "image": "https://example.com/image.png",
        "link": "https://t.me/devora",
        "isPrivate": false
      }
    ]
  }
]

Add Task to Project

Create a new task within a project.

  • Endpoint: POST /api/v1/airdrops/{id}/tasks
  • Method: POST

Request Body

FieldTypeRequiredDescription
titleStringYesTitle of the task.
categoryStringYesTask category (Social, Testnet, etc.).
descriptionStringNoDetailed instructions.
deadlineStringNoTask deadline (ISO 8601 format).
statusStringNoTask status (Open, Closed). Defaults to Open.
stepsArrayNoArray of step objects with detailed information.

Steps Object

FieldTypeDescription
textStringStep instruction text.
imageStringOptional image URL for the step.
linkStringOptional link URL for the step.
isPrivateBooleanWhether step is private (only visible to owner).

Example Request

curl -X POST https://devora.my.id/api/v1/airdrops/123e4567-e89b-12d3-a456-426614174000/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer devora_your_api_key" \
  -d '{
    "title": "Join Telegram",
    "category": "Social",
    "description": "Join our community and verify your username",
    "deadline": "2026-12-31",
    "steps": [
      {
        "text": "Click the link below to join",
        "link": "https://t.me/devora",
        "image": "https://example.com/telegram-guide.png",
        "isPrivate": false
      },
      {
        "text": "Send your username to admin",
        "isPrivate": true
      }
    ]
  }'

Update a Task

Modify an existing task.

  • Endpoint: PUT /api/v1/airdrops/{id}/tasks
  • Method: PUT

Request Body

FieldTypeRequiredDescription
taskIdStringYesTask UUID to update.
titleStringNoUpdated task title.
categoryStringNoUpdated category.
descriptionStringNoUpdated description.
deadlineStringNoUpdated deadline.
statusStringNoUpdated status (Open, Closed).
stepsArrayNoUpdated steps array.

[!NOTE] Only the project owner or ULTRA users can update tasks.

Example Request

curl -X PUT https://devora.my.id/api/v1/airdrops/123e4567-e89b-12d3-a456-426614174000/tasks \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer devora_your_api_key" \
  -d '{
    "taskId": "task-uuid-here",
    "status": "Closed",
    "steps": [
      {
        "text": "Updated instruction",
        "link": "https://new-link.com",
        "isPrivate": false
      }
    ]
  }'

Delete a Task

Remove a task from a project.

  • Endpoint: DELETE /api/v1/airdrops/{id}/tasks?taskId=TASK_ID
  • Method: DELETE

[!WARNING] This will permanently delete the task and all user progress records. This action cannot be undone.

Example Request

curl -X DELETE "https://devora.my.id/api/v1/airdrops/123e4567-e89b-12d3-a456-426614174000/tasks?taskId=task-uuid-here" \
  -H "Authorization: Bearer devora_your_api_key"

Mark Task as Completed

Mark a task as completed or incomplete for the current user.

  • Endpoint: POST /api/v1/airdrops/{id}/tasks/{taskId}/complete
  • Method: POST

Request Body

FieldTypeRequiredDescription
completedBooleanYestrue to mark as completed, false otherwise

Example Request

curl -X POST "https://devora.my.id/api/v1/airdrops/123e4567-e89b-12d3-a456-426614174000/tasks/task-uuid-here/complete" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer devora_your_api_key" \
  -d '{
    "completed": true
  }'

Response 200

{
  "taskId": "task-uuid-here",
  "completed": true,
  "completedAt": "2026-04-23T09:45:00.000Z",
  "message": "Task marked as completed"
}

Get Task Completion Status

Check if a task is completed for the current user.

  • Endpoint: GET /api/v1/airdrops/{id}/tasks/{taskId}/complete
  • Method: GET

Example Request

curl "https://devora.my.id/api/v1/airdrops/123e4567-e89b-12d3-a456-426614174000/tasks/task-uuid-here/complete" \
  -H "Authorization: Bearer devora_your_api_key"

Response 200

{
  "taskId": "task-uuid-here",
  "completed": true,
  "completedAt": "2026-04-23T09:45:00.000Z"
}

[!NOTE] If the task has not been completed yet, completed will be false and completedAt will be null.


Field Value References

Status Values

These are the standardized status values used in the Devora dashboard:

ValueDescriptionUI Color
NewNewly discovered project (default)Purple
PotentialPotential airdrop opportunityYellow
ConfirmedConfirmed airdropOrange
Verification CheckUnder verification or eligibility checkPurple
EndedAirdrop has endedGray

[!TIP] The status field accepts any string value. Using the standardized values above ensures consistency and better filtering in the UI.

Task Types

ValueDescription
SocialSocial media tasks (Twitter, Discord, etc.)
TestnetTestnet interaction tasks
MainnetMainnet interaction tasks
QuizQuiz or knowledge-based tasks
TradingTrading or swap tasks
StakingStaking or liquidity provision tasks
WaitlistWaitlist registration only
MixedMultiple types of tasks

Reward Types

ValueDescription
AirdropToken airdrop reward
PointsPoints-based reward system
WaitlistWaitlist spot (no guaranteed reward)
NFTNFT reward
TokenDirect token distribution
WhitelistWhitelist access
UnknownReward type not yet determined

Project Types

ValueDescription
DeFiDecentralized Finance
InfraInfrastructure / Protocol
AIArtificial Intelligence
GamingGaming / GameFi
NFTNFT Platform / Marketplace
SocialSocial Network / SocialFi
ZKZero-Knowledge Technology
Layer 1Layer 1 Blockchain
Layer 2Layer 2 Scaling Solution
BridgeCross-chain Bridge
DEXDecentralized Exchange
LendingLending / Borrowing Protocol
WalletWallet / Account Abstraction
OtherOther categories

Error Handling

StatusMessageDescription
401UnauthorizedInvalid or missing API Key.
403ForbiddenYou are trying to modify a project you don't own.
404Not FoundThe project ID provided does not exist.
400Bad RequestMissing required fields (e.g., name, title).
500Internal Server ErrorServer-side error occurred.

UI Sync

The Airdrop Center dashboard in Devora provides:

  • Project Grid/List — visual cards or table view with status badges
  • Status TimelinestatusDate tracks when each status change occurred
  • Task Management — add, edit, and delete tasks with step-by-step instructions
  • Link Iconsweb, x, github, telegram, discord links render as clickable icons
  • Visibility Control — ULTRA users can publish projects publicly with approval workflow
  • Statistics Cards — total projects, confirmed count, total tasks, average raise
  • Filters — filter by status, project type, visibility, and search by name

[!NOTE] Projects created via the API appear instantly in the dashboard. The publishStatus field controls public visibility: NONE (private), PENDING (awaiting approval), APPROVED (public), or REJECTED.

On this page