Skip to content

Documentation

SDK catalog

GET /api/v1/sandbox/sdk

Read SDK classes, methods, properties, and built-in functions for editor integrations.

Access

A Bearer API key for this workspace is required; a read-only key is sufficient. The server also checks the owner’s permission for this resource and action. An inaccessible object is not disclosed.

Parameters

No request body is required. The optional language query accepts php, javascript, typescript, or python and defaults to php. Python returns its real synchronous snake_case catalog. JavaScript/TypeScript retain the compatible shared-method catalog.

Response fields: entry, classes, functions, and denied. Methods provide name, signature, returns, return_type, parameters, and summary. returns references another SDK class for chained completion. Parameters provide name, type, and optional; optional class properties provide name, type, and summary. Properties such as response.status are accessed without parentheses.

Python SDK · Context · Environment.

If you write scripts in the editor, use the SDK section for method explanations and examples. This endpoint only retrieves the catalog for an external integration. A method visible in an external program is not necessarily allowed inside the sandbox.

Python SDK catalog

curl --fail-with-body "$BASE/api/v1/sandbox/sdk?language=python" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Response 200

The example is shortened; actual responses may include more fields. Sample IDs are placeholders.

{
  "classes": []
}

Send the request

Set BASE to your installation URL without a trailing slash and API_KEY to a secret stored on your server. Client setup and browser JavaScript.

curl

curl --fail-with-body -X GET "$BASE/api/v1/sandbox/sdk" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Accept: application/json"

Node.js · server

// Node.js server example. Save as request.mjs.
const response = await fetch(process.env.BASE + "/api/v1/sandbox/sdk", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.API_KEY}`,
    Accept: "application/json"
  },
  signal: AbortSignal.timeout(120000)
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
console.log(await response.json());

Python

import json
import os
import urllib.request
import urllib.error

request = urllib.request.Request(
    os.environ["BASE"] + "/api/v1/sandbox/sdk",
    method="GET",
    headers={"Authorization": "Bearer " + os.environ["API_KEY"],
             "Accept": "application/json"},
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        print(json.load(response))
except urllib.error.HTTPError as error:
    print(error.code, error.read().decode("utf-8", errors="replace"))
    raise

PHP · external client

<?php
$handle = curl_init(getenv("BASE") . "/api/v1/sandbox/sdk");
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 120,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("API_KEY"),
        "Accept: application/json",
    ],
]);
$content = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
if ($content === false) {
    throw new RuntimeException(curl_error($handle));
}
curl_close($handle);
if ($status < 200 || $status >= 300) {
    throw new RuntimeException("HTTP $status: $content");
}
print_r(json_decode($content, true, 512, JSON_THROW_ON_ERROR));

Go

package main

import (
    "fmt"
    "io"
    "net/http"
    "os"
    "time"
)

func main() {
    request, err := http.NewRequest("GET", os.Getenv("BASE") + "/api/v1/sandbox/sdk", nil)
    if err != nil { panic(err) }
    request.Header.Set("Authorization", "Bearer " + os.Getenv("API_KEY"))
    request.Header.Set("Accept", "application/json")
    client := &http.Client{Timeout: 120 * time.Second}
    response, err := client.Do(request)
    if err != nil { panic(err) }
    defer response.Body.Close()
    content, err := io.ReadAll(response.Body)
    if err != nil { panic(err) }
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, content))
    }
    fmt.Println(string(content))
}

If the request fails

401: check the key and its expiry. 403: check permissions, read/write scope, and 2FA. 404: check the ID and workspace. 422: check fields and resource state. 429: respect Retry-After. Errors and retries.