/install kaggle-api
Kaggle
Access Kaggle datasets, models, competitions, and notebooks via managed API authentication.
Quick Start
python \x3C\x3C'EOF'
import urllib.request, os, json
data = json.dumps({}).encode()
req = urllib.request.Request('https://gateway.maton.ai/kaggle/v1/datasets.DatasetApiService/ListDatasets', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Base URL
https://gateway.maton.ai/kaggle/{native-api-path}
The gateway proxies requests to api.kaggle.com and automatically injects your credentials.
Authentication
All requests require the Maton API key:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Kaggle connections at https://ctrl.maton.ai.
List Connections
python \x3C\x3C'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=kaggle&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Create Connection
python \x3C\x3C'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'kaggle'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Open the returned url in a browser to complete authentication. Kaggle uses API key authentication - you'll need to provide your Kaggle username and API key from kaggle.com/settings.
Delete Connection
python \x3C\x3C'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
API Reference
Kaggle uses an RPC-style API. All requests are POST with JSON body.
POST /kaggle/v1/{ServiceName}/{MethodName}
Content-Type: application/json
Datasets
List Datasets
POST /kaggle/v1/datasets.DatasetApiService/ListDatasets
Content-Type: application/json
{}
Request Body Parameters:
search- Search term (optional)user- Filter by username (optional)pageSize- Results per page (optional)pageToken- Pagination token (optional)
Example with search:
{
"search": "covid"
}
Response:
{
"datasets": [
{
"id": 9481458,
"ref": "amar5693/screen-time-sleep-and-stress-analysis-dataset",
"title": "Screen Time, Sleep & Stress Analysis Dataset",
"subtitle": "ML-ready dataset analyzing smartphone usage and productivity.",
"totalBytes": 787136,
"downloadCount": 11659,
"voteCount": 236,
"usabilityRating": 1,
"licenseName": "CC0: Public Domain",
"ownerName": "Amar Tiwari",
"tags": [...]
}
]
}
Get Dataset
POST /kaggle/v1/datasets.DatasetApiService/GetDataset
Content-Type: application/json
{
"ownerSlug": "amar5693",
"datasetSlug": "screen-time-sleep-and-stress-analysis-dataset"
}
Response:
{
"id": 9481458,
"title": "Screen Time, Sleep & Stress Analysis Dataset",
"subtitle": "ML-ready dataset analyzing smartphone usage and productivity.",
"totalBytes": 787136,
"downloadCount": 11659,
"usabilityRating": 1
}
List Dataset Files
POST /kaggle/v1/datasets.DatasetApiService/ListDatasetFiles
Content-Type: application/json
{
"ownerSlug": "amar5693",
"datasetSlug": "screen-time-sleep-and-stress-analysis-dataset"
}
Response:
{
"datasetFiles": [
{
"name": "Smartphone_Usage_Productivity_Dataset_50000.csv",
"creationDate": "2026-02-13T06:56:19.803Z",
"totalBytes": 2958561
}
]
}
Get Dataset Metadata
POST /kaggle/v1/datasets.DatasetApiService/GetDatasetMetadata
Content-Type: application/json
{
"ownerSlug": "amar5693",
"datasetSlug": "screen-time-sleep-and-stress-analysis-dataset"
}
Response:
{
"info": {
"datasetId": 9481458,
"datasetSlug": "screen-time-sleep-and-stress-analysis-dataset",
"ownerUser": "amar5693",
"title": "Screen Time, Sleep & Stress Analysis Dataset",
"description": "...",
"totalViews": 44291,
"totalVotes": 236,
"totalDownloads": 11661
}
}
Download Dataset
POST /kaggle/v1/datasets.DatasetApiService/DownloadDataset
Content-Type: application/json
{
"ownerSlug": "amar5693",
"datasetSlug": "screen-time-sleep-and-stress-analysis-dataset"
}
Returns binary data (ZIP file). Response headers:
Content-Type: application/zipContent-Length: \x3Csize in bytes>
Models
List Models
POST /kaggle/v1/models.ModelApiService/ListModels
Content-Type: application/json
{}
Request Body Parameters:
owner- Filter by owner (optional)search- Search term (optional)pageSize- Results per page (optional)
Example:
{
"owner": "google"
}
Response:
{
"models": [
{
"id": 1,
"owner": "google",
"slug": "gemma",
"title": "Gemma",
"subtitle": "Gemma is a family of lightweight, state-of-the-art models",
"instanceCount": 16,
"framework": "transformers"
}
]
}
Get Model
POST /kaggle/v1/models.ModelApiService/GetModel
Content-Type: application/json
{
"ownerSlug": "google",
"modelSlug": "gemma"
}
Response:
{
"id": 1,
"title": "Gemma",
"slug": "gemma",
"owner": "google",
"subtitle": "Gemma is a family of lightweight, state-of-the-art models",
"publishTime": "2024-02-21T16:00:00Z",
"instanceCount": 16
}
Competitions
List Competitions
POST /kaggle/v1/competitions.CompetitionApiService/ListCompetitions
Content-Type: application/json
{}
Request Body Parameters:
search- Search term (optional)category- Filter by category (optional)pageSize- Results per page (optional)
Example:
{
"search": "nlp"
}
Response:
{
"competitions": [
{
"id": 118448,
"ref": "https://www.kaggle.com/competitions/ai-mathematical-olympiad-progress-prize-3",
"title": "AI Mathematical Olympiad - Progress Prize 3",
"url": "https://www.kaggle.com/competitions/ai-mathematical-olympiad-progress-prize-3",
"deadline": "2026-06-06T23:59:00Z",
"category": "Featured",
"reward": "$1,048,576",
"teamCount": 1234,
"userHasEntered": false
}
]
}
Kernels (Notebooks)
List Kernels
POST /kaggle/v1/kernels.KernelsApiService/ListKernels
Content-Type: application/json
{}
Request Body Parameters:
search- Search term (optional)user- Filter by username (optional)language- Filter by language:python,r, etc. (optional)pageSize- Results per page (optional)
Example:
{
"search": "titanic"
}
Response:
{
"kernels": [
{
"id": 5660537,
"ref": "alexisbcook/titanic-tutorial",
"title": "Titanic Tutorial",
"author": "alexisbcook",
"language": "Python",
"totalVotes": 1234,
"totalViews": 56789
}
]
}
Get Kernel
POST /kaggle/v1/kernels.KernelsApiService/GetKernel
Content-Type: application/json
{
"userName": "alexisbcook",
"kernelSlug": "titanic-tutorial"
}
Response:
{
"metadata": {
"id": 5660537,
"ref": "alexisbcook/titanic-tutorial",
"title": "Titanic Tutorial",
"author": "alexisbcook",
"language": "Python"
}
}
Code Examples
JavaScript
const response = await fetch(
'https://gateway.maton.ai/kaggle/v1/datasets.DatasetApiService/ListDatasets',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ search: 'covid' })
}
);
const data = await response.json();
console.log(data);
Python
import os
import requests
response = requests.post(
'https://gateway.maton.ai/kaggle/v1/datasets.DatasetApiService/ListDatasets',
headers={
'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
'Content-Type': 'application/json'
},
json={'search': 'covid'}
)
print(response.json())
Notes
- All API calls use POST method with JSON body
- API follows RPC pattern:
/v1/{ServiceName}/{MethodName} - Dataset refs use format:
{owner}/{dataset-slug} - Model refs use format:
{owner}/{model-slug} - Kernel refs use format:
{user}/{kernel-slug} - Download endpoints return binary data (ZIP files)
- Some operations require specific permissions (competition participation, kernel access)
Error Handling
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Invalid request parameters |
| 401 | Invalid or missing authentication |
| 403 | Permission denied |
| 404 | Resource not found |
| 429 | Rate limited |
Resources
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install kaggle-api - After installation, invoke the skill by name or use
/kaggle-api - Provide required inputs per the skill's parameter spec and get structured output
What is Kaggle?
Kaggle API integration with managed authentication. Access datasets, models, competitions, and kernels. Use this skill when users want to search, download, o... It is an AI Agent Skill for Claude Code / OpenClaw, with 273 downloads so far.
How do I install Kaggle?
Run "/install kaggle-api" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Kaggle free?
Yes, Kaggle is completely free (open-source). You can download, install and use it at no cost.
Which platforms does Kaggle support?
Kaggle is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Kaggle?
It is built and maintained by byungkyu (@byungkyu); the current version is v1.0.0.