KX API User Documentation

Introduction

Welcome to the KX API! This documentation provides all the information you need to interact with the API.

Create DAO

Endpoint: POST /dao/create

Description: Create a new DAO.

Request:

{
    "name": "DAO Name",
    "admin": {
        "twitterId": "adminTwitterId",
        "twitterUsername": "adminUsername"
    }
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "members": [
        {
            "twitterId": "adminTwitterId",
            "twitterUsername": "adminUsername"
        }
    ],
    "admins": [
        {
            "twitterId": "adminTwitterId",
            "twitterUsername": "adminUsername"
        }
    ],
    "customRoles": [],
    "pendingVotes": []
}

Add Member to DAO

Endpoint: POST /dao/add-member

Description: Add a member to a DAO.

Request:

{
    "daoId": "DAO ID",
    "members": [
        {
            "twitterId": "memberTwitterId",
            "twitterUsername": "memberUsername"
        }
    ]
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "members": [
        {
            "twitterId": "adminTwitterId",
            "twitterUsername": "adminUsername"
        },
        {
            "twitterId": "memberTwitterId",
            "twitterUsername": "memberUsername"
        }
    ],
    "admins": [
        {
            "twitterId": "adminTwitterId",
            "twitterUsername": "adminUsername"
        }
    ],
    "customRoles": [],
    "pendingVotes": []
}

Add Admin to DAO

Endpoint: POST /dao/add-admin

Description: Add an admin to a DAO.

Request:

{
    "daoId": "DAO ID",
    "admins": [
        {
            "twitterId": "adminTwitterId",
            "twitterUsername": "adminUsername"
        }
    ]
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "members": [...],
    "admins": [
        {
            "twitterId": "adminTwitterId",
            "twitterUsername": "adminUsername"
        }
    ],
    ...
}

Assign Custom Role

Endpoint: POST /dao/assign-role

Description: Assign a custom role to a member in a DAO.

Request:

{
    "daoId": "DAO ID",
    "memberTwitterUsername": "memberUsername",
    "roleName": "Role Name",
    "permissions": ["Permission1", "Permission2"]
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "members": [
        {
            "twitterId": "memberTwitterId",
            "twitterUsername": "memberUsername",
            "customRole": {
                "roleName": "Role Name",
                "permissions": ["Permission1", "Permission2"]
            }
        }
    ],
    ...
}

Update Member in DAO

Endpoint: PUT /dao/update-member

Description: Update a member’s information in a DAO.

Request:

{
    "daoId": "DAO ID",
    "member": {
        "twitterId": "memberTwitterId",
        "twitterUsername": "memberUsername",
        "customRole": {
            "roleName": "Role Name",
            "permissions": ["Permission1", "Permission2"]
        }
    }
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "members": [
        {
            "twitterId": "memberTwitterId",
            "twitterUsername": "memberUsername",
            "customRole": {
                "roleName": "Role Name",
                "permissions": ["Permission1", "Permission2"]
            }
        }
    ],
    ...
}

Update Admin in DAO

Endpoint: PUT /dao/update-admin

Description: Update an admin’s information in a DAO.

Request:

{
    "daoId": "DAO ID",
    "admin": {
        "twitterId": "adminTwitterId",
        "twitterUsername": "adminUsername"
    }
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "admins": [
        {
            "twitterId": "adminTwitterId",
            "twitterUsername": "adminUsername"
        }
    ],
    ...
}

Delete Member from DAO

Endpoint: DELETE /dao/delete-member

Description: Delete a member from a DAO.

Request:

{
    "daoId": "DAO ID",
    "twitterUsername": "memberUsername"
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "members": [...],
    ...
}

Delete Admin from DAO

Endpoint: DELETE /dao/delete-admin

Description: Delete an admin from a DAO.

Request:

{
    "daoId": "DAO ID",
    "twitterUsername": "adminUsername"
}

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "admins": [...],
    ...
}

Get DAO Info

Endpoint: GET /dao/:daoName

Description: Get information about a specific DAO.

Request:

GET /dao/DAO_NAME

Response:

{
    "_id": "daoId",
    "name": "DAO Name",
    "members": [...],
    "admins": [...],
    "customRoles": [...],
    "pendingVotes": [...]
}

Get DAOs

Endpoint: GET /daos

Description: Get a list of all DAOs.

Request:

GET /daos

Response:

[
    {
        "_id": "daoId1",
        "name": "DAO Name 1",
        ...
    },
    {
        "_id": "daoId2",
        "name": "DAO Name 2",
        ...
    }
]

Create Poll

Endpoint: POST /polls/create

Description: Create a new Twitter poll.

Request:

{
    "question": "Poll question",
    "choices": ["Option 1", "Option 2"],
    "durationMinutes": 60,
    "method": "reply_all",
    "daoId": "DAO ID"
}

Response:

{
    "_id": "pollId",
    "question": "Poll question",
    "choices": ["Option 1", "Option 2"],
    "durationMinutes": 60,
    ...
}

Get Poll Results

Endpoint: GET /polls/results/:pollId

Description: Get the results of a specific Twitter poll.

Request:

GET /polls/results/POLL_ID

Response:

{
    "_id": "pollId",
    "question": "Poll question",
    "choices": ["Option 1", "Option 2"],
    "votes": [
        {
            "userId": "userId1",
            "choice": "Option 1"
        },
        ...
    ]
}

Get Stored Polls

Endpoint: GET /polls/stored

Description: Get a list of all stored polls.

Request:

GET /polls/stored

Response:

[
    {
        "_id": "pollId1",
        "question": "Poll question 1",
        "choices": ["Option 1", "Option 2"],
        ...
    },
    {
        "_id": "pollId2",
        "question": "Poll question 2",
        "choices": ["Option 1", "Option 2"],
        ...
    }
]

Cast Vote

Endpoint: POST /polls/cast-vote

Description: Cast a vote in a poll.

Request:

{
    "pollId": "POLL_ID",
    "choice": "Option 1",
    "userId": "USER_ID",
    "daoName": "DAO Name"
}

Response:

{
    "message": "Vote cast successfully"
}

Get Twitter ID by Username

Endpoint: POST /polls/twitter-id

Description: Get Twitter ID(s) by username(s).

Request:

{
    "usernames": ["username1", "username2"]
}

Response:

[
    {
        "username": "username1",
        "id": "twitterId1"
    },
    {
        "username": "username2",
        "id": "twitterId2"
    }
]

Register

Endpoint: POST /register

Description: Register a new user.

Request:

POST /register

Response:

{
    "message": "User registered successfully"
}

Twitter Callback

Endpoint: GET /twitter/callback

Description: Twitter OAuth callback.

Request:

GET /twitter/callback

Response:

{
    "message": "Twitter callback successful"
}

Check Session Status

Endpoint: GET /status

Description: Check the session status of the user.

Request:

GET /status

Response:

{
    "authenticated": true,
    "user": {
        "id": "userId",
        ...
    }
}