Skip to main content

Overview

The Nika API provides programmatic access to all Nika services including NikaWorkspace, NikaHub, and NikaStudio. This reference documents all available endpoints, parameters, and responses.

Authentication

API Key Authentication

All API requests require authentication using an API key in the request header:
curl -H "Authorization: Bearer YOUR_API_KEY" \
     https://api.nikaplanet.com/v1/workspaces

Rate Limits

  • Free Tier: 1,000 requests per hour
  • Pro Tier: 10,000 requests per hour
  • Enterprise Tier: 100,000 requests per hour

Base URL

https://api.nikaplanet.com/v1

Workspace API

List Workspaces

GET /workspaces

Parameters

ParameterTypeDescription
pageintegerPage number (default: 1)
limitintegerItems per page (default: 20, max: 100)
searchstringSearch workspaces by name
statusstringFilter by status (active, archived)

Response

{
  "data": [
    {
      "id": "ws_123456789",
      "name": "My Workspace",
      "description": "Workspace description",
      "status": "active",
      "created_at": "2024-01-01T00:00:00Z",
      "updated_at": "2024-01-01T00:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 100,
    "pages": 5
  }
}

Create Workspace

POST /workspaces

Request Body

{
  "name": "New Workspace",
  "description": "Workspace description",
  "settings": {
    "default_coordinate_system": "EPSG:4326",
    "auto_save": true
  }
}

Response

{
  "id": "ws_123456789",
  "name": "New Workspace",
  "description": "Workspace description",
  "status": "active",
  "created_at": "2024-01-01T00:00:00Z",
  "settings": {
    "default_coordinate_system": "EPSG:4326",
    "auto_save": true
  }
}

Get Workspace

GET /workspaces/{workspace_id}

Response

{
  "id": "ws_123456789",
  "name": "My Workspace",
  "description": "Workspace description",
  "status": "active",
  "created_at": "2024-01-01T00:00:00Z",
  "updated_at": "2024-01-01T00:00:00Z",
  "settings": {
    "default_coordinate_system": "EPSG:4326",
    "auto_save": true
  },
  "usage": {
    "storage_used": "1.5GB",
    "storage_limit": "10GB",
    "api_calls_used": 500,
    "api_calls_limit": 1000
  }
}

Update Workspace

PUT /workspaces/{workspace_id}

Request Body

{
  "name": "Updated Workspace Name",
  "description": "Updated description",
  "settings": {
    "default_coordinate_system": "EPSG:3857",
    "auto_save": false
  }
}

Delete Workspace

DELETE /workspaces/{workspace_id}

Data API

Upload Data

POST /workspaces/{workspace_id}/data

Request Body (multipart/form-data)

curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@data.csv" \
  -F "name=My Dataset" \
  -F "description=Dataset description" \
  -F "coordinate_system=EPSG:4326" \
  https://api.nikaplanet.com/v1/workspaces/{workspace_id}/data

Response

{
  "id": "data_123456789",
  "name": "My Dataset",
  "description": "Dataset description",
  "file_size": "2.5MB",
  "record_count": 1000,
  "columns": [
    {"name": "id", "type": "integer"},
    {"name": "name", "type": "string"},
    {"name": "latitude", "type": "float"},
    {"name": "longitude", "type": "float"}
  ],
  "coordinate_system": "EPSG:4326",
  "status": "processing",
  "created_at": "2024-01-01T00:00:00Z"
}

List Data

GET /workspaces/{workspace_id}/data

Parameters

ParameterTypeDescription
pageintegerPage number
limitintegerItems per page
typestringFilter by data type (csv, geojson, shapefile)
statusstringFilter by status (ready, processing, error)

Get Data

GET /workspaces/{workspace_id}/data/{data_id}

Delete Data

DELETE /workspaces/{workspace_id}/data/{data_id}

Analysis API

Run Analysis

POST /workspaces/{workspace_id}/analysis

Request Body

{
  "name": "Buffer Analysis",
  "type": "buffer",
  "data_id": "data_123456789",
  "parameters": {
    "distance": 1000,
    "units": "meters",
    "dissolve": true
  },
  "output_format": "geojson"
}

Response

{
  "id": "analysis_123456789",
  "name": "Buffer Analysis",
  "type": "buffer",
  "status": "running",
  "progress": 0,
  "created_at": "2024-01-01T00:00:00Z",
  "estimated_completion": "2024-01-01T00:05:00Z"
}

Get Analysis Status

GET /workspaces/{workspace_id}/analysis/{analysis_id}

Response

{
  "id": "analysis_123456789",
  "name": "Buffer Analysis",
  "type": "buffer",
  "status": "completed",
  "progress": 100,
  "result": {
    "output_id": "data_987654321",
    "download_url": "https://api.nikaplanet.com/v1/data/987654321/download",
    "preview_url": "https://api.nikaplanet.com/v1/data/987654321/preview"
  },
  "created_at": "2024-01-01T00:00:00Z",
  "completed_at": "2024-01-01T00:04:30Z"
}

List Analysis

GET /workspaces/{workspace_id}/analysis

Visualization API

Create Map

POST /workspaces/{workspace_id}/visualizations

Request Body

{
  "name": "Population Map",
  "type": "choropleth",
  "data_id": "data_123456789",
  "config": {
    "value_field": "population",
    "color_scheme": "viridis",
    "breaks": [0, 1000, 5000, 10000, 50000],
    "labels": ["Low", "Medium", "High", "Very High"]
  },
  "style": "light"
}

Response

{
  "id": "viz_123456789",
  "name": "Population Map",
  "type": "choropleth",
  "status": "ready",
  "url": "https://api.nikaplanet.com/v1/visualizations/123456789/view",
  "embed_url": "https://api.nikaplanet.com/v1/visualizations/123456789/embed",
  "created_at": "2024-01-01T00:00:00Z"
}

Get Visualization

GET /workspaces/{workspace_id}/visualizations/{visualization_id}

Update Visualization

PUT /workspaces/{workspace_id}/visualizations/{visualization_id}

Delete Visualization

DELETE /workspaces/{workspace_id}/visualizations/{visualization_id}

Hub API

List Projects

GET /hub/projects

Parameters

ParameterTypeDescription
pageintegerPage number
limitintegerItems per page
categorystringFilter by category
tagsstringFilter by tags (comma-separated)
searchstringSearch projects

Response

{
  "data": [
    {
      "id": "proj_123456789",
      "title": "Urban Heat Island Analysis",
      "description": "Analysis of temperature variations",
      "category": "analysis",
      "tags": ["urban-planning", "climate"],
      "author": {
        "id": "user_123",
        "name": "John Doe",
        "avatar": "https://api.nikaplanet.com/v1/users/123/avatar"
      },
      "thumbnail": "https://api.nikaplanet.com/v1/projects/123456789/thumbnail",
      "views": 150,
      "likes": 25,
      "created_at": "2024-01-01T00:00:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 500,
    "pages": 25
  }
}

Get Project

GET /hub/projects/{project_id}

Create Project

POST /hub/projects

Request Body

{
  "title": "My Project",
  "description": "Project description",
  "category": "analysis",
  "tags": ["urban-planning", "climate"],
  "visibility": "public",
  "workspace_id": "ws_123456789",
  "analysis_ids": ["analysis_123", "analysis_456"],
  "visualization_ids": ["viz_123", "viz_456"]
}

Update Project

PUT /hub/projects/{project_id}

Delete Project

DELETE /hub/projects/{project_id}

Studio API

List Applications

GET /studio/applications

Parameters

ParameterTypeDescription
pageintegerPage number
limitintegerItems per page
templatestringFilter by template
statusstringFilter by status

Response

{
  "data": [
    {
      "id": "app_123456789",
      "name": "Traffic Dashboard",
      "description": "Real-time traffic monitoring",
      "template": "dashboard",
      "status": "active",
      "url": "https://app.nikaplanet.com/apps/123456789",
      "components": [
        {
          "id": "comp_123",
          "type": "map",
          "config": {
            "data_source": "traffic_data",
            "style": "dark"
          }
        }
      ],
      "created_at": "2024-01-01T00:00:00Z",
      "updated_at": "2024-01-01T00:00:00Z"
    }
  ]
}

Create Application

POST /studio/applications

Request Body

{
  "name": "My Application",
  "description": "Application description",
  "template": "dashboard",
  "components": [
    {
      "type": "map",
      "config": {
        "data_source": "data_123456789",
        "style": "light",
        "center": [40.7128, -74.0060],
        "zoom": 12
      }
    },
    {
      "type": "chart",
      "config": {
        "type": "line",
        "data_source": "data_123456789",
        "x_axis": "date",
        "y_axis": "value"
      }
    }
  ]
}

Get Application

GET /studio/applications/{application_id}

Update Application

PUT /studio/applications/{application_id}

Delete Application

DELETE /studio/applications/{application_id}

Deploy Application

POST /studio/applications/{application_id}/deploy

Request Body

{
  "environment": "production",
  "domain": "myapp.nikaplanet.com",
  "settings": {
    "auto_scale": true,
    "ssl": true
  }
}

AI Agent API

Generate Code

POST /ai/generate-code

Request Body

{
  "prompt": "Create a buffer analysis around cities",
  "language": "python",
  "framework": "geopandas",
  "context": {
    "workspace_id": "ws_123456789",
    "data_id": "data_123456789"
  },
  "model": "CodeGPT"
}

Response

{
  "id": "gen_123456789",
  "code": "import geopandas as gpd\n\n# Load data\ndata = gpd.read_file('cities.geojson')\n\n# Create buffer\nbuffer = data.buffer(1000)\n\n# Save result\nbuffer.to_file('buffer.geojson')",
  "explanation": "This code creates a 1000-meter buffer around each city...",
  "model": "CodeGPT",
  "created_at": "2024-01-01T00:00:00Z"
}

Generate Analysis

POST /ai/generate-analysis

Request Body

{
  "prompt": "Perform hot spot analysis on crime data",
  "data_id": "data_123456789",
  "parameters": {
    "variable": "incident_count",
    "method": "getis_ord",
    "significance": 0.05
  },
  "model": "AnalysisGPT"
}

Generate Visualization

POST /ai/generate-visualization

Request Body

{
  "prompt": "Create a choropleth map showing population density",
  "data_id": "data_123456789",
  "type": "choropleth",
  "config": {
    "value_field": "population_density",
    "color_scheme": "viridis"
  },
  "model": "VizGPT"
}

Error Responses

Standard Error Format

{
  "error": {
    "code": "INVALID_REQUEST",
    "message": "Invalid request parameters",
    "details": {
      "field": "data_id",
      "issue": "Data not found"
    }
  }
}

Common Error Codes

CodeDescription
INVALID_API_KEYAPI key is invalid or expired
RATE_LIMIT_EXCEEDEDRate limit exceeded
INVALID_REQUESTRequest parameters are invalid
RESOURCE_NOT_FOUNDRequested resource not found
PERMISSION_DENIEDInsufficient permissions
INTERNAL_ERRORInternal server error

SDKs and Libraries

JavaScript/TypeScript

npm install @nika/api
import { NikaAPI } from '@nika/api';

const api = new NikaAPI({
  apiKey: 'your-api-key'
});

const workspaces = await api.workspaces.list();

Python

pip install nika-api
import nika_api

api = nika_api.Client(api_key='your-api-key')
workspaces = api.workspaces.list()

R

install.packages("nika")

library(nika)
api <- nika_client(api_key = "your-api-key")
workspaces <- api$workspaces$list()

Webhooks

Configure Webhook

POST /webhooks

Request Body

{
  "url": "https://your-app.com/webhook",
  "events": ["analysis.completed", "data.uploaded"],
  "secret": "your-webhook-secret"
}

Webhook Events

EventDescription
analysis.completedAnalysis job completed
analysis.failedAnalysis job failed
data.uploadedNew data uploaded
data.processedData processing completed
visualization.createdNew visualization created
application.deployedApplication deployed

Webhook Payload

{
  "event": "analysis.completed",
  "timestamp": "2024-01-01T00:00:00Z",
  "data": {
    "analysis_id": "analysis_123456789",
    "workspace_id": "ws_123456789",
    "status": "completed",
    "result": {
      "output_id": "data_987654321"
    }
  }
}

Get Expert Help

⌘I