🧑‍💻 Bika.ai OpenAPI Guide with cURL and Python Examples

Recently, some users have asked us how to use Python to call Bika.ai’s OpenAPI. In fact, we’ve already provided an object-oriented way to in the official TypeScript SDK. But right now, Bika.ai doesn’t have an official Python SDK yet.

At the same time, some users said they don’t quite understand Bika.ai’s basic ideas, like space, node, database, automation, and how they’re related.

In this thread, I’ll show some examples of making calls to OpenAPI via cURL and Python.

Basic Concepts

Before using this Open API, we need to first understand the structure and object hierarchy of Bika.ai.

  • Space
    • Node Resources:
      • Database
      • Automation
      • Dashboard
      • ……

The Space is your workspace. It encompasses all the node resources we’ve previously mentioned, including databases, automation facilities, dashboards, and additional components. When leveraging the Open API, data retrieval must be carried out in accordance with this structure.

For instance, if you aim to obtain the database C represented by node B within Space A, the API would be similar to spaceA.nodeB->resoure->databaseB.

Note that the node ID is equivalent to the resource ID; for instance, Node ID and Database ID are the same.

For a URL like:

https://bika.ai/space/spcND68gdMMZBmGK67gvqNVX/node/datJubyEnetNFd3UQ6gSeq7U/viwYHuzUxRngq5igMkw9PPIX

SpaceId: spcND68gdMMZBmGK67gvqNVX

NodeID = DatabaseID: datJubyEnetNFd3UQ6gSeq7U

The associated TypeScript SDK is designed in an object-oriented style, which greatly simplifies your code.

Also, the space UI follows the above data structure layer.

For details, please read the homepage of the help document at https://bika.ai/help to view the overall UI introduction of the Space.

cURL

OpenAPI is composed of the HTTP protocol, and below are examples of how to call Bika.ai’s OpenAPI using the cURL command line tool.

Please checkout the Bika.ai API Reference for more API details.

You can access these OpenAPI endpoints using any HTTP client that supports them, such as cURL, Python Requests, Node.js axios, Rust reqwest, and others.

Retrieving System Meta Info

curl -X GET "https://bika.ai/api/openapi/bika/v1/system/meta" -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}"

Response Example:

{
    "success": true,
    "code": 200,
    "message": "SUCCESS",
    "data": {
        "version": "1.0.0-release.0",
        "appEnv": "PRODUCTION",
        "hostname": "https://bika.ai",
        "headers": {
            "X-Forwarded-For": "35.96.5.64",
            "User-Agent": "curl/8.4.0"
        }
    }
}

Retrieving Space List

curl -X GET "https://bika.ai/api/openapi/bika/v1/spaces" -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}"

Creating a New Record

Assume we have obtained the ID of a certain space as {SPACE_ID}, node ID as {NODE_ID}, and database ID always equals to node ID. Here is an example of creating a new record:

curl -X POST "https://bika.ai/api/openapi/bika/v1/spaces/{SPACE_ID}/resources/databases/{NODE_ID}/records" \
    -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
    -H "Content-Type: application/json" \
    -d '{
        "fields": {
            "Name": "New record",
            "Description": "This is a new database record"
        }
    }'

Updating a Record

Assume the record ID is {RECORD_ID}. The example of updating a record is as follows:

curl -X PUT "https://bika.ai/api/openapi/bika/v1/spaces/{SPACE_ID}/resources/databases/{NODE_ID}/records/{RECORD_ID}" \
    -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
    -H "Content-Type: application/json" \
    -d '{
        "fields": {
            "Description": "Updated description field column"
        }
    }'

Deleting a Record

curl -X DELETE "https://bika.ai/api/openapi/bika/v1/spaces/{SPACE_ID}/resources/databases/{NODE_ID}/records/{RECORD_ID}" \
    -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}"

Listing Automation Triggers

Assume the node ID is {NODE_ID}. The example is as follows:

curl -X GET "https://bika.ai/api/openapi/bika/v1/spaces/{SPACE_ID}/resources/automation/{NODE_ID}/triggers" \
    -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}"

Registering an Outbound Webhook

curl -X POST "https://bika.ai/api/openapi/bika/v1/spaces/{SPACE_ID}/outgoingWebhooks" \
    -H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
    -H "Content-Type: application/json" \
    -d '{
        "eventType": "ON_RECORD_CREATED",
        "name": "Create webhook",
        "description": "Example trigger when a new record is created",
        "callbackURL": "https://your - custom - callback - url.com"
    }'

Python HTTP Client

Installing Dependencies

First, ensure that the requests library is installed. You can use the following command to install it:

pip install requests

Retrieving System Metadata

import requests

access_token = "{YOUR_ACCESS_TOKEN}"
url = "https://bika.ai/api/openapi/bika/v1/system/meta"
headers = {
    "Authorization": f"Bearer {access_token}"
}
response = requests.get(url, headers = headers)
print(response.json())

Retrieving Space List

import requests

access_token = "{YOUR_ACCESS_TOKEN}"
url = "https://bika.ai/api/openapi/bika/v1/spaces"
headers = {
    "Authorization": f"Bearer {access_token}"
}
response = requests.get(url, headers = headers)
spaces = response.json()["data"]
print(spaces)

Retrieving Database Records

import requests
import json

access_token = "{YOUR_ACCESS_TOKEN}"
space_id = "{SPACE_ID}"
node_id = "{NODE_ID}"
database_id = "{DATABASE_ID}"
url = f"https://bika.ai/api/openapi/bika/v1/spaces/{space_id}/resources/databases/{node_id}/records"
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}
data = {
    "fields": {
        "Name": "New record",
        "Description": "This is a new database record"
    }
}
response = requests.post(url, headers = headers, data = json.dumps(data))
print(response.json())

Creating a New Record

import requests
import json

access_token = "{YOUR_ACCESS_TOKEN}"
space_id = "{SPACE_ID}"
node_id = "{NODE_ID}"
database_id = "{DATABASE_ID}"
url = f"https://bika.ai/api/openapi/bika/v1/spaces/{space_id}/resources/databases/{node_id}/records"
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}
data = {
    "fields": {
        "Name": "New record",
        "Description": "This is a new database record"
    }
}
response = requests.post(url, headers = headers, data = json.dumps(data))
print(response.json())

Updating a Record

import requests
import json

access_token = "{YOUR_ACCESS_TOKEN}"
space_id = "{SPACE_ID}"
node_id = "{NODE_ID}"
database_id = "{DATABASE_ID}"
record_id = "{RECORD_ID}"
url = f"https://bika.ai/api/openapi/bika/v1/spaces/{space_id}/resources/databases/{node_id}/records/{record_id}"
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content - Type": "application/json"
}
data = {
    "fields": {
        "Description": "Updated description field column"
    }
}
response = requests.put(url, headers = headers, data = json.dumps(data))
print(response.json())

Deleting a Record

import requests

access_token = "{YOUR_ACCESS_TOKEN}"
space_id = "{SPACE_ID}"
node_id = "{NODE_ID_DATABASE_ID}"
record_id = "{RECORD_ID}"
url = f"https://bika.ai/api/openapi/bika/v1/spaces/{space_id}/resources/databases/{node_id}/records/{record_id}"
headers = {
    "Authorization": f"Bearer {access_token}"
}
response = requests.delete(url, headers = headers)
print(response.json())

Listing Automation Triggers

import requests

access_token = "{YOUR_ACCESS_TOKEN}"
space_id = "{SPACE_ID}"
node_id = "{NODE_ID}"
url = f"https://bika.ai/api/openapi/bika/v1/spaces/{space_id}/nodes/{node_id}/automation/triggers"
headers = {
    "Authorization": f"Bearer {access_token}"
}
response = requests.get(url, headers = headers)
triggers = response.json()["data"]
print(triggers)

Registering an Outbound Webhook

import requests
import json

access_token = "{YOUR_ACCESS_TOKEN}"
space_id = "{SPACE_ID}"
url = f"https://bika.ai/api/openapi/bika/v1/spaces/{space_id}/outgoingWebhooks"
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}
data = {
    "eventType": "ON_RECORD_CREATED",
    "name": "Create webhook",
    "description": "Example trigger when a new record is created",
    "callbackURL": "https://your - custom - callback - url.com"
}
response = requests.post(url, headers = headers, data = json.dumps(data))
print(response.json())

Through the above cURL and Python examples, developers can more conveniently use the Bika.ai OpenAPI to perform various operations.

Additionally, we will be updating the OpenAPI guide with more detailed information next week.

For latest update, keep follow Bika.ai OpenAPI Tutorial.