Thesis API
The thesis API
Stripe Webhook
Handle Stripe webhook events
/stripe/webhookHeader parameters
stripe-signaturestringRequiredReturns
POST /stripe/webhook HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYMembership V0
Invite to organization by email
/membershipRequest body
organizationIdstringRequiredemailstringRequiredrolestringRequiredEnum: "owner", "admin", "member"
Returns
POST /membership HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"organizationId": "organizationId",
"email": "email",
"role": "owner"
}List memberships with users
/membershipReturns
GET /membership HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYDelete membership
/membership/{membershipId}Path parameters
membershipIdstringRequiredThe ID of the membership to delete
Returns
DELETE /membership/{membershipId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYOrganization V0
Create organization with free plan
/organizationRequest body
namestringRequiredemailstringRequiredtypestringRequiredEnum: "individual", "team"
Returns
POST /organization HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"name": "name",
"email": "email",
"type": "individual"
}List organizations for user
/organizationReturns
GET /organization HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYUpdate the organization
/organizationRequest body
optInShareDataOptionalusageLimitCentsOptionalusageAllowanceCentsOptionalpricePerSeatCentsOptionalpriceForOrganizationCentsOptionalmachineQuotaOptionalReturns
PUT /organization HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"optInShareData": null,
"usageLimitCents": null,
"usageAllowanceCents": null,
"pricePerSeatCents": null,
"priceForOrganizationCents": null,
"machineQuota": null
}Get billing summary
/organization/billingReturns
GET /organization/billing HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet paginated usage history
/organization/billing/usage-historyQuery parameters
limitnumberOptionalNumber of records to return (max 100, default 20)
offsetnumberOptionalNumber of records to skip (index-based pagination, default 0)
startDatestringOptionalFilter records from this date (ISO 8601)
endDatestringOptionalFilter records until this date (ISO 8601)
Returns
GET /organization/billing/usage-history HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet paginated storage usage history
/organization/billing/storage-usage-historyQuery parameters
limitnumberOptionalNumber of records to return (max 100, default 20)
offsetnumberOptionalNumber of records to skip (index-based pagination, default 0)
startDatestringOptionalFilter records from this date (ISO 8601)
endDatestringOptionalFilter records until this date (ISO 8601)
Returns
GET /organization/billing/storage-usage-history HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet paginated compute usage history
/organization/billing/compute-usage-historyQuery parameters
limitnumberOptionalNumber of records to return (max 100, default 20)
offsetnumberOptionalNumber of records to skip (index-based pagination, default 0)
startDatestringOptionalFilter records from this date (ISO 8601)
endDatestringOptionalFilter records until this date (ISO 8601)
Returns
GET /organization/billing/compute-usage-history HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYChange subscription plan (checkout for new subscribers, instant update for existing)
/organization/billing/checkoutRequest body
planstringRequiredEnum: "free", "payAsYouGo"
Returns
POST /organization/billing/checkout HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"plan": "free"
}Create billing portal session
/organization/billing/portalReturns
POST /organization/billing/portal HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYUpdate usage limit
/organization/billing/usage-limitRequest body
limitRequiredReturns
PUT /organization/billing/usage-limit HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"limit": null
}Get daily usage limit status for free tier
/organization/rate-limitReturns
GET /organization/rate-limit HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYClaim free trial for organization
/organization/claim-trialReturns
POST /organization/claim-trial HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet trial status for organization
/organization/trialReturns
GET /organization/trial HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYPublic V0
Accept organization invite via email link
/public/organization-member/{membershipId}/accept-invite-via-emailPath parameters
membershipIdstringRequiredThe membership ID from the invite email
Returns
GET /public/organization-member/{membershipId}/accept-invite-via-email HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList public datasets
/public/datasetsReturns
GET /public/datasets HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet a public dataset by ID
/public/datasets/{id}Path parameters
idstringRequiredDataset ID
Returns
GET /public/datasets/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList public models
/public/modelsReturns
GET /public/models HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet a public model by ID
/public/models/{id}Path parameters
idstringRequiredModel ID
Returns
GET /public/models/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet download URL for a public dataset
/public/datasets/{id}/downloadPath parameters
idstringRequiredDataset ID
Returns
GET /public/datasets/{id}/download HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet download URL for a public model
/public/models/{id}/downloadPath parameters
idstringRequiredModel ID
Returns
GET /public/models/{id}/download HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYRelease V0
List all releases
/releaseQuery parameters
platformstringOptionalFilter by platform
osTypestringOptionalFilter by specific OS artifact type (e.g., aarch64.dmg, setup.exe)
versionstringOptionalFilter by specific version
Returns
GET /release HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet latest release for each platform or a specific platform
/release/latestQuery parameters
platformstringOptionalGet latest release for a specific platform
Returns
GET /release/latest HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet Tauri update manifest
/release/tauri-manifestReturns Tauri-compatible update manifest. Automatically detects release channel from current_version (prerelease suffix = staging, clean semver = production).
Query parameters
current_versionstringRequiredCurrent app version (sent automatically by Tauri updater)
archOptionalArchitecture (e.g., aarch64)
targetOptionalTarget platform (e.g., darwin-aarch64)
Returns
GET /release/tauri-manifest HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYDownload release asset
/release/download/{assetId}Redirects to GCS CDN for the release asset.
Path parameters
assetIdstringRequiredGitHub asset ID
Returns
GET /release/download/{assetId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYResponses V0
Create a response
/responsesOpenAI Responses API compatible endpoint. Supports both streaming and non-streaming responses.
Request body
modelstringRequiredinstructionsstringOptionalinputRequiredtoolsarrayOptionaltool_choiceOptionaltemperaturenumberOptionaltop_pnumberOptionalmax_output_tokensnumberOptionaltruncationstringOptionalEnum: "auto", "disabled"
streambooleanOptionalreasoningobjectOptionalincludearrayOptionalmetadataobjectOptionalsessionIdstringOptionalorganizationIdstringOptionalReturns
POST /responses HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"model": "model",
"instructions": "instructions",
"input": null,
"tools": [
{
"type": "type",
"name": "name",
"description": "description",
"parameters": {
"type": "type",
"properties": {},
"required": [
{}
],
"additionalProperties": false,
"items": null,
"enum": [
{}
],
"description": "description",
"$schema": "$schema"
},
"strict": false
}
],
"tool_choice": null,
"temperature": 1,
"top_p": 1,
"max_output_tokens": 1,
"truncation": "auto",
"stream": false,
"reasoning": {
"effort": "low"
},
"include": [
"string"
],
"metadata": {},
"sessionId": "sessionId",
"organizationId": "organizationId"
}{
"id": "id_1a2b3c",
"object": "object",
"created_at": 1,
"model": "model",
"status": "completed",
"output": [
{
"type": "message",
"id": "id_1a2b3c",
"status": "status",
"role": "assistant",
"content": [
{
"type": "type",
"text": "text",
"annotations": {}
}
],
"call_id": "call_id",
"name": "name",
"arguments": "arguments",
"output": "output",
"summary": [
{
"type": "type",
"text": "text"
}
]
}
],
"usage": {
"input_tokens": 1,
"output_tokens": 1,
"total_tokens": 1,
"input_tokens_details": {
"cached_tokens": 1
},
"output_tokens_details": {
"reasoning_tokens": 1
}
},
"error": null,
"tool_calls": [
{
"id": "id_1a2b3c",
"type": "type",
"function": {
"name": "name",
"arguments": "arguments"
}
}
],
"output_text": "output_text"
}Session
Create a new session
/sessionQuery parameters
sessionIdstringOptionalThe session ID to use for the session
Returns
POST /session HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList all sessions for current user
/sessionReturns
GET /session HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYReveal a session
/session/reveal/{sessionId}Path parameters
sessionIdstringRequiredThe ID of the session to reveal
Returns
GET /session/reveal/{sessionId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYCheck if a session exists (for diagnostics)
/session/check/{sessionId}Path parameters
sessionIdstringRequiredThe ID of the session to check
Returns
GET /session/check/{sessionId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYDelete a session
/session/{sessionId}Path parameters
sessionIdstringRequiredThe ID of the session to delete
Returns
DELETE /session/{sessionId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYUser
Get current user
/userReturns
GET /user HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet current user by session
/user/by-sessionReturns
GET /user/by-session HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYRequest password reset email
/user/password-resetRequest body
emailstringRequiredThe email to send password reset link to
Returns
POST /user/password-reset HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"email": "user@example.com"
}Token Usage Record
List usage records
/usage-recordQuery parameters
startDatestringOptionalendDatestringOptionallimitstringOptionalReturns
GET /usage-record HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet usage summary
/usage-record/summaryQuery parameters
startDatestringOptionalendDatestringOptionalReturns
GET /usage-record/summary HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYFeedback V0
Submit feedback
/feedbackRequest body
namestringRequiredThe name of the person submitting feedback
emailstringRequiredThe email of the person submitting feedback
feedbackTypestringRequiredThe type of feedback
Enum: "bug", "feature", "general"
messagestringRequiredThe feedback message (minimum 10 characters)
metadataobjectOptionalAdditional metadata about the feedback
Returns
POST /feedback HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"name": "The name of the person submitting feedback",
"email": "user@example.com",
"feedbackType": "bug",
"message": "The feedback message (minimum 10 characters)",
"metadata": {
"appVersion": "appVersion",
"platform": "platform",
"userAgent": "userAgent",
"screenshot": "screenshot",
"screenshotTimestamp": "2026-01-15T10:30:00Z"
}
}Machine
Create a new machine
/machineRequest body
cloudstringOptionalCloud provider
Enum: "gcp", "aws", "runpod", "together"
regionstringOptionalCloud region
machineTypestringOptionalInstance type
preemptiblebooleanOptionalWhether to use preemptible/spot instance
diskSizeGbintegerOptionalBoot disk size in GB
gpuTypestringOptionalGPU accelerator type (e.g., nvidia-tesla-t4)
gpuCountintegerOptionalNumber of GPUs to attach
Returns
POST /machine HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"cloud": "gcp",
"region": "Cloud region",
"machineType": "Instance type",
"preemptible": false,
"diskSizeGb": 1,
"gpuType": "GPU accelerator type (e.g., nvidia-tesla-t4)",
"gpuCount": 1
}{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"cloud": "cloud",
"projectId": null,
"region": "region",
"machineType": "machineType",
"image": "image",
"status": "status",
"coreToken": "coreToken",
"error": null,
"metadata": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z",
"deletedAt": null,
"isStopped": false,
"lastStartDurationMs": null
}List all machines for the organization
/machineReturns
GET /machine HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY[
{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"cloud": "cloud",
"projectId": null,
"region": "region",
"machineType": "machineType",
"image": "image",
"status": "status",
"coreToken": "coreToken",
"error": null,
"metadata": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z",
"deletedAt": null,
"isStopped": false,
"lastStartDurationMs": null
}
]Get compute pricing for machine types
/machine/pricingReturns
GET /machine/pricing HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet machine by ID
/machine/{id}Path parameters
idstringRequiredMachine ID
Returns
GET /machine/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"cloud": "cloud",
"projectId": null,
"region": "region",
"machineType": "machineType",
"image": "image",
"status": "status",
"coreToken": "coreToken",
"error": null,
"metadata": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z",
"deletedAt": null,
"isStopped": false,
"lastStartDurationMs": null
}Delete a machine
/machine/{id}Path parameters
idstringRequiredMachine ID
Returns
DELETE /machine/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYCheck machine health status
/machine/{id}/healthPath parameters
idstringRequiredMachine ID
Returns
GET /machine/{id}/health HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"cluster": {
"status": "status",
"healthy": false
},
"notebook": {
"port": 1,
"healthy": false,
"responseTime": 1,
"error": "error"
},
"core": {
"port": 1,
"healthy": false,
"responseTime": 1,
"error": "error"
}
}Stop a running machine (preserves disk)
/machine/{id}/stopPath parameters
idstringRequiredMachine ID
Returns
POST /machine/{id}/stop HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYStart a stopped machine
/machine/{id}/startPath parameters
idstringRequiredMachine ID
Returns
POST /machine/{id}/start HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYHard reset a machine (power cycle)
/machine/{id}/resetPath parameters
idstringRequiredMachine ID
Returns
POST /machine/{id}/reset HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYDataset
Upload a dataset file
/dataset/uploadReturns
POST /dataset/upload HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"structured": false,
"path": "path",
"format": "format",
"version": 1,
"rowCount": null,
"columnCount": null,
"sizeBytes": null,
"schema": null,
"files": null,
"fileCount": null,
"parentId": null,
"chatId": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}Get a signed URL for direct-to-GCS upload
/dataset/upload-urlRequest body
filenamestringRequiredpublicbooleanOptionalReturns
POST /dataset/upload-url HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"filename": "filename",
"public": false
}Confirm a direct-to-GCS upload and create the dataset record
/dataset/confirm-uploadRequest body
datasetIdstringRequiredpathstringRequirednamestringRequireddescriptionstringOptionalpublicbooleanOptionalstructuredbooleanOptionalparentIdstringOptionalchatIdstringOptionalReturns
POST /dataset/confirm-upload HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"datasetId": "datasetId",
"path": "path",
"name": "name",
"description": "description",
"public": false,
"structured": false,
"parentId": "parentId",
"chatId": "chatId"
}{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"structured": false,
"path": "path",
"format": "format",
"version": 1,
"rowCount": null,
"columnCount": null,
"sizeBytes": null,
"schema": null,
"files": null,
"fileCount": null,
"parentId": null,
"chatId": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}List all datasets for the organization
/datasetReturns
GET /dataset HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY[
{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"structured": false,
"path": "path",
"format": "format",
"version": 1,
"rowCount": null,
"columnCount": null,
"sizeBytes": null,
"schema": null,
"files": null,
"fileCount": null,
"parentId": null,
"chatId": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}
]Get dataset by ID
/dataset/{id}Path parameters
idstringRequiredDataset ID
Returns
GET /dataset/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"structured": false,
"path": "path",
"format": "format",
"version": 1,
"rowCount": null,
"columnCount": null,
"sizeBytes": null,
"schema": null,
"files": null,
"fileCount": null,
"parentId": null,
"chatId": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}Update dataset metadata
/dataset/{id}Path parameters
idstringRequiredDataset ID
Request body
namestringOptionaldescriptionOptionalpublicbooleanOptionalstructuredbooleanOptionalrowCountintegerOptionalcolumnCountintegerOptionalsizeBytesintegerOptionalschemaobjectOptionalfilesarrayOptionalfileCountintegerOptionalparentIdOptionalReturns
PUT /dataset/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"name": "name",
"description": null,
"public": false,
"structured": false,
"rowCount": 1,
"columnCount": 1,
"sizeBytes": 1,
"schema": {
"columns": [
{
"name": "name",
"type": "type",
"nullable": false
}
]
},
"files": [
"string"
],
"fileCount": 1,
"parentId": null
}{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"structured": false,
"path": "path",
"format": "format",
"version": 1,
"rowCount": null,
"columnCount": null,
"sizeBytes": null,
"schema": null,
"files": null,
"fileCount": null,
"parentId": null,
"chatId": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}Delete a dataset
/dataset/{id}Path parameters
idstringRequiredDataset ID
Returns
DELETE /dataset/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet download URL for a dataset
/dataset/{id}/downloadPath parameters
idstringRequiredDataset ID
Returns
GET /dataset/{id}/download HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"url": "Signed URL for downloading the dataset",
"expiresAt": "2026-01-15T10:30:00Z"
}Model
Upload a model file
/model/uploadReturns
POST /model/upload HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"path": "path",
"sizeBytes": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}Get a signed URL for direct-to-GCS upload
/model/upload-urlRequest body
filenamestringRequiredpublicbooleanOptionalReturns
POST /model/upload-url HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"filename": "filename",
"public": false
}Confirm a direct-to-GCS upload and create the model record
/model/confirm-uploadRequest body
modelIdstringRequiredpathstringRequirednamestringRequireddescriptionstringOptionalpublicbooleanOptionalReturns
POST /model/confirm-upload HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"modelId": "modelId",
"path": "path",
"name": "name",
"description": "description",
"public": false
}{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"path": "path",
"sizeBytes": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}List all models for the organization
/modelReturns
GET /model HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY[
{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"path": "path",
"sizeBytes": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}
]Get model by ID
/model/{id}Path parameters
idstringRequiredModel ID
Returns
GET /model/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"path": "path",
"sizeBytes": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}Update model metadata
/model/{id}Path parameters
idstringRequiredModel ID
Request body
namestringOptionaldescriptionOptionalpublicbooleanOptionalsizeBytesintegerOptionalReturns
PUT /model/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"name": "name",
"description": null,
"public": false,
"sizeBytes": 1
}{
"id": "id_1a2b3c",
"organizationId": null,
"name": "name",
"description": null,
"public": false,
"path": "path",
"sizeBytes": null,
"deletedAt": null,
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z"
}Delete a model
/model/{id}Path parameters
idstringRequiredModel ID
Returns
DELETE /model/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet download URL for a model
/model/{id}/downloadPath parameters
idstringRequiredModel ID
Returns
GET /model/{id}/download HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY{
"url": "Signed URL for downloading the model",
"expiresAt": "2026-01-15T10:30:00Z"
}Web Search V0
Search the web
/web-searchRequest body
querystringRequiredThe search query to execute
num_resultsintegerOptionalNumber of results to return (default 10, max 20)
Returns
POST /web-search HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"query": "The search query to execute",
"num_results": 1
}{
"results": [
{
"title": "Result title",
"url": "Result URL",
"snippet": "Result snippet"
}
]
}User GitHub
Check if GitHub is connected
/user/github/statusReturns
GET /user/github/status HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList user GitHub repositories
/user/github/reposReturns
GET /user/github/repos HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYStore GitHub OAuth token (platform callback)
/user/github/tokenRequest body
accessTokenstringRequiredrefreshTokenstringOptionalexpiresAtstringOptionalReturns
POST /user/github/token HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"accessToken": "accessToken",
"refreshToken": "refreshToken",
"expiresAt": "2026-01-15T10:30:00Z"
}Admin
List all organizations with stats
/admin/organizationsQuery parameters
searchstringOptionalSearch by organization name
planstringOptionalFilter by plan
typestringOptionalFilter by type
limitnumberOptionalResults per page (max 100)
offsetnumberOptionalResults to skip
sortBystringOptionalSort field
sortOrderstringOptionalSort order
Returns
GET /admin/organizations HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet organization by ID with members and stats
/admin/organizations/{id}Path parameters
idstringRequiredOrganization ID
Returns
GET /admin/organizations/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYUpdate organization
/admin/organizations/{id}Path parameters
idstringRequiredOrganization ID
Request body
namestringOptionaltypestringOptionalEnum: "individual", "team"
subscriptionPlanstringOptionalEnum: "free", "payAsYouGo"
optInShareDatastringOptionalEnum: "private", "shareData"
usageLimitCentsOptionalusageAllowanceCentsOptionalpricePerSeatCentsOptionalpriceForOrganizationCentsOptionalmachineQuotaOptionalReturns
PUT /admin/organizations/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"name": "name",
"type": "individual",
"subscriptionPlan": "free",
"optInShareData": "private",
"usageLimitCents": null,
"usageAllowanceCents": null,
"pricePerSeatCents": null,
"priceForOrganizationCents": null,
"machineQuota": null
}Delete organization (soft delete)
/admin/organizations/{id}Path parameters
idstringRequiredOrganization ID
Returns
DELETE /admin/organizations/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList members of an organization
/admin/organizations/{id}/membersPath parameters
idstringRequiredOrganization ID
Returns
GET /admin/organizations/{id}/members HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYAdd member to organization
/admin/organizations/{id}/membersPath parameters
idstringRequiredOrganization ID
Request body
emailstringRequiredrolestringRequiredEnum: "owner", "admin", "member"
Returns
POST /admin/organizations/{id}/members HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"email": "user@example.com",
"role": "owner"
}Remove member from organization
/admin/organizations/{id}/members/{memberId}Path parameters
idstringRequiredOrganization ID
memberIdstringRequiredMembership ID
Returns
DELETE /admin/organizations/{id}/members/{memberId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet usage records for an organization
/admin/organizations/{id}/usagePath parameters
idstringRequiredOrganization ID
Query parameters
startDatestringOptionalStart date (ISO 8601)
endDatestringOptionalEnd date (ISO 8601)
limitnumberOptionalResults per page (max 100)
offsetnumberOptionalResults to skip
metricTypestringOptionalFilter by metric type
Returns
GET /admin/organizations/{id}/usage HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet Stripe subscription info for an organization
/admin/organizations/{id}/stripePath parameters
idstringRequiredOrganization ID
Returns
GET /admin/organizations/{id}/stripe HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYCancel subscription at end of billing period
/admin/organizations/{id}/stripe/cancelPath parameters
idstringRequiredOrganization ID
Returns
POST /admin/organizations/{id}/stripe/cancel HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYCancel subscription immediately
/admin/organizations/{id}/stripe/cancel-immediatelyPath parameters
idstringRequiredOrganization ID
Returns
POST /admin/organizations/{id}/stripe/cancel-immediately HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYReactivate a subscription pending cancellation
/admin/organizations/{id}/stripe/reactivatePath parameters
idstringRequiredOrganization ID
Returns
POST /admin/organizations/{id}/stripe/reactivate HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYBill organization immediately for pending usage
/admin/organizations/{id}/stripe/bill-nowPath parameters
idstringRequiredOrganization ID
Returns
POST /admin/organizations/{id}/stripe/bill-now HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList trials for an organization
/admin/organizations/{id}/trialsPath parameters
idstringRequiredOrganization ID
Returns
GET /admin/organizations/{id}/trials HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYCreate a claimable trial for an organization
/admin/organizations/{id}/trialsPath parameters
idstringRequiredOrganization ID
Request body
lengthDaysintegerRequiredmaxUsageAllowanceCentsintegerRequiredclaimOnCreatebooleanOptionalReturns
POST /admin/organizations/{id}/trials HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"lengthDays": 1,
"maxUsageAllowanceCents": 1,
"claimOnCreate": false
}Update a trial
/admin/organizations/{id}/trials/{trialId}Path parameters
idstringRequiredOrganization ID
trialIdstringRequiredTrial ID
Request body
lengthDaysintegerOptionalmaxUsageAllowanceCentsintegerOptionalperiodStartOptionalperiodEndOptionalReturns
PUT /admin/organizations/{id}/trials/{trialId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY
Content-Type: application/json
{
"lengthDays": 1,
"maxUsageAllowanceCents": 1,
"periodStart": null,
"periodEnd": null
}Delete a trial
/admin/organizations/{id}/trials/{trialId}Path parameters
idstringRequiredOrganization ID
trialIdstringRequiredTrial ID
Returns
DELETE /admin/organizations/{id}/trials/{trialId} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList all users
/admin/usersQuery parameters
searchstringOptionalSearch by email or name
limitnumberOptionalResults per page (max 100)
offsetnumberOptionalResults to skip
Returns
GET /admin/users HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet user by ID with organization memberships
/admin/users/{id}Path parameters
idstringRequiredUser ID
Returns
GET /admin/users/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet usage analytics across all organizations
/admin/usageQuery parameters
startDatestringOptionalStart date (ISO 8601)
endDatestringOptionalEnd date (ISO 8601)
groupBystringOptionalGroup by period
Returns
GET /admin/usage HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList all machines across organizations
/admin/machinesQuery parameters
searchstringOptionalSearch by machine name
statusstringOptionalFilter by status (e.g. RUNNING, STOPPED)
organizationIdstringOptionalFilter by organization ID
limitnumberOptionalResults per page (max 100)
offsetnumberOptionalResults to skip
Returns
GET /admin/machines HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet machine by ID
/admin/machines/{id}Path parameters
idstringRequiredMachine ID
Returns
GET /admin/machines/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYDelete (terminate) a machine
/admin/machines/{id}Path parameters
idstringRequiredMachine ID
Returns
DELETE /admin/machines/{id} HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYStop a running machine
/admin/machines/{id}/stopPath parameters
idstringRequiredMachine ID
Returns
POST /admin/machines/{id}/stop HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYStart a stopped machine
/admin/machines/{id}/startPath parameters
idstringRequiredMachine ID
Returns
POST /admin/machines/{id}/start HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYGet SkyPilot cluster status for a machine
/admin/machines/{id}/skypilot-statusPath parameters
idstringRequiredMachine ID
Returns
GET /admin/machines/{id}/skypilot-status HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEYList cron job executions
/admin/cron-executionsQuery parameters
jobNamestringOptionalFilter by job name
statusstringOptionalFilter by status
limitnumberOptionalResults per page (max 100)
offsetnumberOptionalResults to skip
sortBystringOptionalSort field
sortOrderstringOptionalSort order
Returns
GET /admin/cron-executions HTTP/1.1
Host: api.thesis.io/v1
Authorization: Bearer $THESIS_API_KEY