API
Platform

API

Authenticate with API keys, then manage tickets, agents, pages, vaults, and infrastructure programmatically. Full REST API reference for the JuhJuh platform.

JuhJuh exposes a REST API at /api/v1/ for managing your organization, projects, tickets, agents, pages, infrastructure, and more. Every action available in the dashboard is also available through the API.

Authentication

Two methods are supported: API keys and session cookies.

API keys

API keys are the primary method for programmatic access. Every key is scoped to a single organization and prefixed with jjk_.

  1. Go to Settings, then API Keys in your organization dashboard
  2. Click Create API Key
  3. Name the key and set an optional expiration date
  4. Copy the key immediately. It is shown once and cannot be retrieved later.

Include the key in the Authorization header:

Authorization: Bearer jjk_your_key

API keys inherit the permissions of the user who created them. If the user loses access to the organization, the key stops working.

Session authentication

If you are already logged in to the JuhJuh dashboard, API requests from the same browser session are authenticated automatically. This is useful for building internal tools or browser extensions.

Organization scoping

Most endpoints require an organization context. The API resolves your organization in this order:

  1. The X-Juhjuh-Org header, if present (pass your org slug)
  2. The organization tied to your API key
  3. Your first active organization membership

For multi-org users, always pass the X-Juhjuh-Org header to avoid ambiguity.

X-Juhjuh-Org: acme-engineering

Rate limits

Every API key has a per-minute request limit. The limit depends on your subscription plan. When you exceed it, the API returns 429 Too Many Requests with a Retry-After header indicating how many seconds to wait.

Default limit: 60 requests per minute.

Response format

All responses are JSON. Successful requests return 200, 201, or 204. Errors return the appropriate HTTP status code with a JSON body:

json { "error": "Permission denied." }

List endpoints return paginated results with count, next, previous, and results fields:

json { "count": 42, "next": "https://your-org.juhjuh.com/api/v1/projects/ACME/tickets/?page=2", "previous": null, "results": [...] }

Follow the next URL to fetch subsequent pages.

Quick start

List tickets in a project

bash curl -H "Authorization: Bearer jjk_your_key" \ https://your-org.juhjuh.com/api/v1/projects/ACME/tickets/

Create a ticket

bash curl -X POST \ -H "Authorization: Bearer jjk_your_key" \ -H "Content-Type: application/json" \ -d '{"title": "Fix login timeout", "description": "Session expires after 5 minutes"}' \ https://your-org.juhjuh.com/api/v1/projects/ACME/tickets/

Get vault secrets

bash curl -H "Authorization: Bearer jjk_your_key" \ https://your-org.juhjuh.com/api/v1/vaults/production/entries/

Chat with an agent

bash curl -X POST \ -H "Authorization: Bearer jjk_your_key" \ -H "Content-Type: application/json" \ -d '{"message": "What are the open tickets this sprint?"}' \ https://your-org.juhjuh.com/api/v1/orgs/acme-engineering/agents/1/chat/

Send a natural language request

bash curl -X POST \ -H "Authorization: Bearer jjk_your_key" \ -H "Content-Type: application/json" \ -d '{"query": "Create a bug ticket for the payments service"}' \ https://your-org.juhjuh.com/api/v1/gateway/

Endpoints

Projects

Method Path Description
GET /api/v1/orgs/{slug}/projects/ List projects in the organization
POST /api/v1/orgs/{slug}/projects/ Create a project
GET /api/v1/projects/{key}/ Get project details
PATCH /api/v1/projects/{key}/ Update a project
PATCH /api/v1/projects/{key}/key/ Rename a project key

Tickets

Method Path Description
GET /api/v1/projects/{key}/tickets/ List tickets in a project
POST /api/v1/projects/{key}/tickets/ Create a ticket
GET /api/v1/projects/{key}/tickets/{id}/ Get ticket details
PATCH /api/v1/projects/{key}/tickets/{id}/ Update a ticket
DELETE /api/v1/projects/{key}/tickets/{id}/ Delete a ticket
POST /api/v1/projects/{key}/tickets/{id}/queue/ Queue ticket for execution
POST /api/v1/projects/{key}/tickets/{id}/execute/ Execute a ticket
GET /api/v1/projects/{key}/tickets/{id}/comments/ List ticket comments
POST /api/v1/projects/{key}/tickets/{id}/comments/ Add a comment
POST /api/v1/projects/{key}/tickets/move/ Move a ticket between projects

Tickets can also be retrieved or resolved globally:

Method Path Description
GET /api/v1/tickets/{uuid}/ Get ticket by UUID
GET /api/v1/tickets/by-key/{display_key}/ Get ticket by display key (e.g., ACME-42)
POST /api/v1/tickets/resolve/ Resolve a ticket by key

Boards

Method Path Description
GET /api/v1/projects/{key}/board/ Get board state
GET /api/v1/projects/{key}/board/columns/ List columns
POST /api/v1/projects/{key}/board/columns/create/ Create a column
PATCH /api/v1/projects/{key}/board/columns/{id}/ Update a column
DELETE /api/v1/projects/{key}/board/columns/{id}/delete/ Delete a column
POST /api/v1/projects/{key}/board/columns/reorder/ Reorder columns
POST /api/v1/projects/{key}/board/tickets/{id}/move/ Move a ticket between columns
PATCH /api/v1/projects/{key}/board/setup/ Configure board settings

Sprints

Method Path Description
GET /api/v1/projects/{key}/sprints/ List sprints
POST /api/v1/projects/{key}/sprints/ Create a sprint
GET /api/v1/projects/{key}/sprints/{id}/ Get sprint details
PATCH /api/v1/projects/{key}/sprints/{id}/ Update a sprint
DELETE /api/v1/projects/{key}/sprints/{id}/ Delete a sprint
GET /api/v1/projects/{key}/sprints/{id}/burndown/ Get burndown chart data
GET /api/v1/projects/{key}/sprints/velocity/ Get velocity metrics

Agents

Method Path Description
GET /api/v1/orgs/{slug}/agents/ List agents
POST /api/v1/orgs/{slug}/agents/ Create an agent
GET /api/v1/orgs/{slug}/agents/{id}/ Get agent details
PATCH /api/v1/orgs/{slug}/agents/{id}/ Update an agent
DELETE /api/v1/orgs/{slug}/agents/{id}/ Delete an agent
POST /api/v1/orgs/{slug}/agents/{id}/chat/ Start a chat session
GET /api/v1/orgs/{slug}/agents/{id}/sessions/ List chat sessions

Agent skills

Method Path Description
GET /api/v1/orgs/{slug}/agents/{agent_id}/skills/ List skills for an agent
POST /api/v1/orgs/{slug}/agents/{agent_id}/skills/ Attach a skill
GET /api/v1/orgs/{slug}/agents/{agent_id}/skills/{id}/ Get skill details
PATCH /api/v1/orgs/{slug}/agents/{agent_id}/skills/{id}/ Update a skill
DELETE /api/v1/orgs/{slug}/agents/{agent_id}/skills/{id}/ Remove a skill

Pipelines

Method Path Description
GET /api/v1/orgs/{slug}/agents/{agent_id}/pipelines/ List pipelines
POST /api/v1/orgs/{slug}/agents/{agent_id}/pipelines/ Create a pipeline
GET /api/v1/orgs/{slug}/agents/{agent_id}/pipelines/{id}/ Get pipeline details
PATCH /api/v1/orgs/{slug}/agents/{agent_id}/pipelines/{id}/ Update a pipeline
DELETE /api/v1/orgs/{slug}/agents/{agent_id}/pipelines/{id}/ Delete a pipeline

Batch executions

Method Path Description
GET /api/v1/orgs/{slug}/agents/batch/ List batch executions
POST /api/v1/orgs/{slug}/agents/batch/ Create a batch execution
GET /api/v1/orgs/{slug}/agents/batch/{id}/ Get batch details
POST /api/v1/orgs/{slug}/agents/batch/{id}/cancel/ Cancel a running batch

Org-scoped shortcuts

These convenience endpoints mirror their project-scoped equivalents but are scoped to the organization. Useful when you need cross-project access.

Method Path Description
GET /api/v1/orgs/{slug}/dashboard/ Get organization dashboard data
GET /api/v1/orgs/{slug}/tickets/ List tickets across all projects
POST /api/v1/orgs/{slug}/tickets/create/ Create a ticket (specify project in body)
GET /api/v1/orgs/{slug}/tickets/{key}/ Get ticket by display key
GET /api/v1/orgs/{slug}/tickets/{key}/comments/ List comments on a ticket
GET /api/v1/orgs/{slug}/sprints/ List sprints across all projects
GET /api/v1/orgs/{slug}/knowledge/entries/ List knowledge entries
GET /api/v1/orgs/{slug}/knowledge/entries/{id}/ Get knowledge entry details
GET /api/v1/orgs/{slug}/knowledge/search/ Search knowledge entries

Pages (knowledge base)

Method Path Description
GET /api/v1/pages/{key}/pages/ List pages in a project
POST /api/v1/pages/{key}/pages/ Create a page
GET /api/v1/pages/{key}/pages/{slug}/ Get page content
PATCH /api/v1/pages/{key}/pages/{slug}/ Update a page
DELETE /api/v1/pages/{key}/pages/{slug}/ Delete a page
POST /api/v1/pages/{key}/pages/{slug}/restore/ Restore a deleted page
GET /api/v1/pages/{key}/pages/{slug}/revisions/ List page revisions
GET /api/v1/pages/{key}/pages/{slug}/revisions/{num}/ Get a specific revision
POST /api/v1/pages/{key}/pages/{slug}/revisions/{num}/restore/ Restore a revision
POST /api/v1/pages/{key}/sync-drafts/ Sync offline drafts
POST /api/v1/pages/{key}/pages/{slug}/pin-offline/ Pin a page for offline access

Page comments

Method Path Description
GET /api/v1/pages/{key}/pages/{slug}/comments/ List comments on a page
POST /api/v1/pages/{key}/pages/{slug}/comments/ Add a comment
POST /api/v1/pages/{key}/pages/{slug}/comments/{id}/resolve/ Resolve a comment
DELETE /api/v1/pages/{key}/pages/{slug}/comments/{id}/ Delete a comment

Folders

Method Path Description
GET /api/v1/pages/{key}/folders/ List folders
POST /api/v1/pages/{key}/folders/ Create a folder
GET /api/v1/pages/{key}/folders/{slug}/ Get folder details
PATCH /api/v1/pages/{key}/folders/{slug}/ Update a folder
DELETE /api/v1/pages/{key}/folders/{slug}/ Delete a folder
Method Path Description
GET /api/v1/pages/{key}/search/ Search pages within a project
GET /api/v1/pages/{key}/tags/ List all tags
GET /api/v1/search/ Global search across projects
GET /api/v1/projects/{key}/search/ Search within a project

Schedules

Method Path Description
GET /api/v1/orgs/{slug}/schedules/ List schedules
POST /api/v1/orgs/{slug}/schedules/ Create a schedule
GET /api/v1/orgs/{slug}/schedules/{id}/ Get schedule details
PATCH /api/v1/orgs/{slug}/schedules/{id}/ Update a schedule
DELETE /api/v1/orgs/{slug}/schedules/{id}/ Delete a schedule
POST /api/v1/orgs/{slug}/schedules/{id}/toggle/ Enable or disable a schedule
GET /api/v1/orgs/{slug}/schedules/{id}/logs/ List execution logs
GET /api/v1/orgs/{slug}/schedules/{id}/logs/{log_id}/ Get a specific log entry

Templates

Method Path Description
GET /api/v1/orgs/{slug}/templates/ List prompt templates
POST /api/v1/orgs/{slug}/templates/ Create a template
GET /api/v1/orgs/{slug}/templates/{name}/ Get template by name
PATCH /api/v1/orgs/{slug}/templates/{id}/ Update a template
DELETE /api/v1/orgs/{slug}/templates/{id}/ Delete a template

Ticket templates

Method Path Description
GET /api/v1/orgs/{slug}/ticket-templates/ List ticket templates
POST /api/v1/orgs/{slug}/ticket-templates/ Create a ticket template
GET /api/v1/orgs/{slug}/ticket-templates/{id}/ Get template details
PATCH /api/v1/orgs/{slug}/ticket-templates/{id}/ Update a template
DELETE /api/v1/orgs/{slug}/ticket-templates/{id}/ Delete a template

Organization members

Method Path Description
GET /api/v1/orgs/{slug}/members/ List members
POST /api/v1/orgs/{slug}/members/invite/ Invite a member
GET /api/v1/orgs/{slug}/members/{id}/ Get member details
PATCH /api/v1/orgs/{slug}/members/{id}/ Update member role
DELETE /api/v1/orgs/{slug}/members/{id}/ Remove a member

Project members

Method Path Description
GET /api/v1/projects/{key}/members/ List project members
POST /api/v1/projects/{key}/members/ Add a member
PATCH /api/v1/projects/{key}/members/{id}/ Update member role
DELETE /api/v1/projects/{key}/members/{id}/ Remove a member

Teams

Method Path Description
GET /api/v1/projects/{key}/teams/ List teams
POST /api/v1/projects/{key}/teams/ Create a team
GET /api/v1/projects/{key}/teams/{id}/ Get team details
PATCH /api/v1/projects/{key}/teams/{id}/ Update a team
DELETE /api/v1/projects/{key}/teams/{id}/ Delete a team
POST /api/v1/projects/{key}/teams/{id}/add-member/ Add a team member
POST /api/v1/projects/{key}/teams/{id}/remove-member/ Remove a team member

Ideas

Method Path Description
GET /api/v1/projects/{key}/ideas/ List ideas
POST /api/v1/projects/{key}/ideas/ Create an idea
GET /api/v1/projects/{key}/ideas/{id}/ Get idea details
PATCH /api/v1/projects/{key}/ideas/{id}/ Update an idea
DELETE /api/v1/projects/{key}/ideas/{id}/ Delete an idea

Knowledge entries

Method Path Description
GET /api/v1/projects/{key}/knowledge/ List knowledge entries
POST /api/v1/projects/{key}/knowledge/ Create an entry
GET /api/v1/projects/{key}/knowledge/{id}/ Get entry details
PATCH /api/v1/projects/{key}/knowledge/{id}/ Update an entry
DELETE /api/v1/projects/{key}/knowledge/{id}/ Delete an entry

Connections (project resources)

Method Path Description
GET /api/v1/projects/{key}/connections/ List connections
POST /api/v1/projects/{key}/connections/ Create a connection
GET /api/v1/projects/{key}/connections/{id}/ Get connection details
PATCH /api/v1/projects/{key}/connections/{id}/ Update a connection
DELETE /api/v1/projects/{key}/connections/{id}/ Delete a connection

Dependencies

Method Path Description
GET /api/v1/projects/{key}/dependencies/ List ticket dependencies
POST /api/v1/projects/{key}/dependencies/ Create a dependency
GET /api/v1/projects/{key}/dependencies/{id}/ Get dependency details
PATCH /api/v1/projects/{key}/dependencies/{id}/ Update a dependency
DELETE /api/v1/projects/{key}/dependencies/{id}/ Delete a dependency

Design systems

Method Path Description
GET /api/v1/projects/{key}/design-systems/ List design systems
POST /api/v1/projects/{key}/design-systems/ Create a design system
GET /api/v1/projects/{key}/design-systems/{id}/ Get design system details
PATCH /api/v1/projects/{key}/design-systems/{id}/ Update a design system
DELETE /api/v1/projects/{key}/design-systems/{id}/ Delete a design system

Notifications

Method Path Description
GET /api/v1/notifications/ List notifications
GET /api/v1/notifications/unread/ Get unread count
POST /api/v1/notifications/read/ Mark notifications as read

Notification preferences

Method Path Description
GET /api/v1/orgs/{slug}/notification-preferences/ Get notification preferences
PATCH /api/v1/orgs/{slug}/notification-preferences/{event_type}/ Update preferences for an event type
POST /api/v1/orgs/{slug}/notification-preferences/bulk/ Bulk update preferences

Brand voice

Method Path Description
GET /api/v1/orgs/{slug}/brand-voice/ Get brand voice settings
PATCH /api/v1/orgs/{slug}/brand-voice/ Update brand voice
GET /api/v1/orgs/{slug}/brand-voice/guidelines/ Get voice guidelines
GET /api/v1/orgs/{slug}/brand-voice/user/ Get user voice profile
PATCH /api/v1/orgs/{slug}/brand-voice/user/update/ Update user voice profile

Skills (org-level)

Method Path Description
GET /api/v1/orgs/{slug}/skills/ List organization skills
POST /api/v1/orgs/{slug}/skills/ Create a skill
GET /api/v1/orgs/{slug}/skills/{id}/ Get skill details
PATCH /api/v1/orgs/{slug}/skills/{id}/ Update a skill
DELETE /api/v1/orgs/{slug}/skills/{id}/ Delete a skill

Intake

Method Path Description
GET /api/v1/orgs/{slug}/intake/ List intake items
GET /api/v1/orgs/{slug}/intake/{id}/ Get intake item details
POST /api/v1/orgs/{slug}/intake/{id}/triage/ Triage an intake item

Improvements

Method Path Description
GET /api/v1/orgs/{slug}/improvements/ List improvements
GET /api/v1/orgs/{slug}/improvements/{id}/ Get improvement details
POST /api/v1/orgs/{slug}/improvements/{id}/review/ Review an improvement

Marketplace

Method Path Description
GET /api/v1/orgs/{slug}/marketplace/agents/ Browse agent marketplace
GET /api/v1/orgs/{slug}/marketplace/agents/{id}/ Get marketplace agent details
POST /api/v1/orgs/{slug}/marketplace/agents/{id}/install/ Install an agent
POST /api/v1/orgs/{slug}/marketplace/agents/{id}/rate/ Rate an agent
GET /api/v1/orgs/{slug}/marketplace/skills/ Browse skill marketplace
GET /api/v1/orgs/{slug}/marketplace/skills/{id}/ Get marketplace skill details
POST /api/v1/orgs/{slug}/marketplace/skills/{id}/install/ Install a skill
POST /api/v1/orgs/{slug}/marketplace/skills/{id}/rate/ Rate a skill

Slack channels

Method Path Description
GET /api/v1/orgs/{slug}/slack-channels/ List connected Slack channels
GET /api/v1/orgs/{slug}/slack-channels/{id}/ Get channel details
PATCH /api/v1/orgs/{slug}/slack-channels/{id}/ Update channel settings

Audit logs

Method Path Description
GET /api/v1/projects/{key}/audit-logs/ List project audit logs
GET /api/v1/orgs/{slug}/audit-logs/ List organization audit logs

Billing

Method Path Description
GET /api/v1/plans/ List available plans
GET /api/v1/plans/{id}/ Get plan details
GET /api/v1/orgs/{slug}/billing/usage/ Get usage statistics
GET /api/v1/orgs/{slug}/billing/invoices/ List invoices
GET /api/v1/orgs/{slug}/billing/credits/ Get credit balance
GET /api/v1/orgs/{slug}/billing/payment-methods/ List payment methods

Virtual machines

Method Path Description
GET /api/v1/vms/ List VMs
GET /api/v1/vms/{name}/ Get VM details
POST /api/v1/vms/{name}/start/ Start a VM
POST /api/v1/vms/{name}/stop/ Stop a VM
POST /api/v1/vms/{name}/destroy/ Destroy a VM

For config-as-code VM management, see the CLI and JuhJuh File docs.

Vault

Method Path Description
GET /api/v1/vaults/ List vaults
GET /api/v1/vaults/{name}/ Get vault details
GET /api/v1/vaults/{name}/entries/ List vault entries
GET /api/v1/vaults/{name}/entries/{key}/ Get a secret value
POST /api/v1/vaults/{name}/entries/{key}/ Set a secret
DELETE /api/v1/vaults/{name}/entries/{key}/ Delete a secret
POST /api/v1/vaults/{name}/import/ Bulk import secrets
POST /api/v1/vaults/{name}/export/ Export all secrets
POST /api/v1/vaults/{name}/diff/ Compare vault against last deployed snapshot

Deployments

Method Path Description
GET /api/v1/deployments/ List deployments
GET /api/v1/deployments/{id}/ Get deployment details
POST /api/v1/deployments/{vm_name}/rollback/ Rollback a deployment
POST /api/v1/deployments/{vm_name}/destroy/ Destroy deployment history for a VM

API keys

Method Path Description
GET /api/v1/api-keys/ List your API keys
POST /api/v1/api-keys/ Create an API key
POST /api/v1/api-keys/{id}/ Revoke an API key

Gateway (natural language)

Method Path Description
POST /api/v1/gateway/ Send a natural language request

The gateway accepts a plain text instruction and routes it to the appropriate action. It is the same interface that powers Ask JuhJuh.

CLI authentication

These endpoints are used by the CLI during login. You do not need to call them directly.

Method Path Description
POST /api/v1/auth/cli-token/ Exchange credentials for an API key
GET /api/v1/auth/me/ Get current user and org memberships
GET /api/v1/auth/orgs/ List organizations

Error codes

Status Meaning
400 Bad request. Check the request body for validation errors.
401 Not authenticated. Include a valid API key or session cookie.
403 Permission denied. Your role does not allow this action. See Permissions.
404 Resource not found. Verify the ID, slug, or key in the URL.
429 Rate limited. Wait for the duration in the Retry-After header.
  • Permissions for role-based access control and feature gating
  • Agents for creating and managing AI agents
  • Tickets for the ticket lifecycle and execution pipeline
  • CLI for managing JuhJuh from your terminal
  • Pages for the knowledge base API
  • Billing for subscription plans and usage limits