Skip to content
Plune Docs
Search
Ctrl
K
Cancel
GitHub
Select theme
Dark
Light
Auto
Platform
beta
Getting started
Navigation
Concepts
What the platform keeps
The review queue
Cases
Organizing cases
The case page
The fields of a case
Filtering the list
The lifecycle of a case
Cases as Markdown
Import and export cases
Steps and snippets
Draft from code
Test plans
Requirements
Bugs
Runs
The run's report
A result in a run
Result statuses
Delete several runs
Configurations
Environments
Failed automated results
Manual runs
Storage
Files in your own bucket
AWS S3
Cloudflare R2
Other S3-compatible
CORS
Who can do what
When something is wrong
Integrations
Run tests in your CI
GitHub Actions
GitLab CI
CircleCI
Import from TestRail
Move from TestRail in a day
When something is wrong
Analytics
Saved time
Team
Companies
Members
Projects
Account
Authentication
API reference
Overview
health
Overview
Liveness + DB readiness
GET
public
Overview
One result file by a signed link from a run report - no account
GET
The public report of a run — no account
GET
auth
Overview
Request a magic-link sign-in email
POST
Verify a magic-link token → open a session
GET
Sign out — clear the session cookie
POST
Who am I — the signed-in user
GET
Set your display name, language and theme
PATCH
May this account be deleted here — and if not, why
GET
Delete your account — into the Bin
POST
What my account and my companies have used
GET
Ask for a paid tier
POST
My open requests for a paid tier
GET
Does this address sign in through its company?
GET
Start a single sign-on (SP-initiated)
GET
The service provider metadata of a company
GET
The assertion consumer service - the identity provider’s response
POST
tokens
Overview
List your CLI tokens (metadata only)
GET
Mint a CLI API token
POST
Revoke one of your tokens
DELETE
Change what a token may do
PATCH
projects
Overview
The projects you are in
GET
Create a project
POST
Rename a project
PATCH
Move a personal project into a company, for good
POST
Ask a member to take the project over
POST
Withdraw the open request
DELETE
Accept a handover: become the owner
POST
Decline a handover
POST
Read a handover: the page of «Accept / Decline»
GET
The bucket the project keeps its result files in
GET
Connect a bucket to the project, or replace the connection
PUT
Disconnect the bucket
DELETE
Check that a connection works
POST
Set the dashboard’s CORS rule in the bucket, once
POST
The CI the project starts its automated tests in
GET
Test and connect GitHub Actions, GitLab CI or CircleCI, or change the connection
PUT
Disconnect the CI
DELETE
Check the saved connection again
POST
Where the pipelines of these runs stand
GET
Start a run’s automated part in CI
POST
The TestRail the project imports from
GET
Connect a TestRail, or replace its API key
PUT
Disconnect the TestRail
DELETE
Check the saved TestRail connection
POST
The projects of the TestRail instance, with their suite and case counts
GET
Dry run: what an import of one TestRail project would do
POST
The sync from TestRail: modes, imported projects, last sync
GET
Sync changes from TestRail
POST
Set the sync mode of the entities
PUT
Dry run of a sync: what it would change
POST
The latest dry runs and imports of the project
GET
Import one TestRail project
POST
Where a dry run or an import stands, and what it did
GET
Cancel a dry run or an import
POST
Which of your projects holds this entity
GET
Who is in the project
GET
Invite an address
POST
Remove a member, or leave
DELETE
Change a member’s role
PATCH
Withdraw an invitation
DELETE
analytics
Overview
Numbers over several of your projects at once
GET
The time the estimates of the executed cases add up to
GET
One health widget of the Analytics page
GET
companies
Overview
Move a personal project into a company, for good
POST
Ask a member to take the company over
POST
Withdraw the open request
DELETE
Accept a handover: become the owner
POST
Decline a handover
POST
Read a handover: the page of «Accept / Decline»
GET
The companies you are in
GET
Create a company
POST
A company: its projects, its people, its invitations
GET
Delete a company, with every project in it
DELETE
Rename a company
PATCH
Ask an address into a company
POST
Remove somebody from a company, or leave it
DELETE
Change a company role
PATCH
Withdraw a company invitation
DELETE
Join a project of the company
POST
Add somebody from the company to one of its projects
POST
A company’s single sign-on settings
GET
Save a company’s identity provider settings
PUT
Add a domain to prove
POST
Verify a domain by its DNS record
POST
API tokens of the people on the verified domains
GET
Revoke every API token of the verified domains
DELETE
Revoke one API token of a person on a verified domain
DELETE
Revoke every API token of one person on a verified domain
DELETE
Remove a domain
DELETE
runs
Overview
List your runs (newest first)
GET
Start a run, or ingest a finished eval run
POST
Issue a run key for a launch dialog
POST
A case as this run shows it
GET
The run’s cases, as a plan lists its own
GET
Add cases to an open manual or mixed run
POST
A person opens a case of a run
POST
Delete several runs at once
POST
Read one of your runs in full
GET
Delete a run, and everything it produced
DELETE
Change what an open run declares, or what any run is for
PATCH
Compare 2 to 10 runs
GET
The few causes behind a run’s failures
GET
Put a deleted run back
POST
Launch, finish or terminate a run
POST
The results of a run, newest first
GET
Submit a batch of results to a run
POST
Add a defect link to a failed result
POST
Take a defect link off a result
DELETE
Change a manual mark
PATCH
One test across the runs it appeared in
GET
Add a screenshot or a text file to a result
POST
Announce files for a result — step 1 of 3 of sending them to the project’s bucket
POST
The bytes of a result’s file
GET
A link to read a result’s file from the project’s bucket
GET
The bytes are in the bucket — step 3 of 3 of sending a file to it
POST
Announce the files of many results at once — step 1 of 3, up to 100 files a request
POST
The bytes are in the bucket for many files — step 3 of 3, up to 100 files a request
POST
Send the screenshots and texts of many results at once, for a project without a bucket
POST
What people said about this run, oldest first
GET
Say something about this run
POST
Launch on several environments: one run each, one group
POST
The page of a run group
GET
Change the strategy of a run group
PATCH
Is the run’s public report on
GET
Turn the run’s public report on (the link is shown once)
PUT
Revoke the run’s public report
DELETE
A run’s report as an XLSX or PDF file
GET
The finished file of a large run’s export
GET
Launch a manual or mixed run again: its failures, or a copy
POST
The five status counters of one run
GET
Retest cases in place: reset their result, keep the original in history
POST
suites
Overview
List your suites as a tree
GET
Create a suite
POST
Delete a suite with everything beneath it
DELETE
Rename, re-parent, reorder or re-kind a node
PATCH
Put a deleted suite back with everything that went with it
POST
Turn a suite into a folder, moving its cases into a child suite of the same name
POST
What people said about this suite, oldest first
GET
Say something about this suite
POST
A node’s subtree as Markdown
GET
test-cases
Overview
Delete a file a person added
DELETE
The files of a test case
GET
Add a file to a test case
POST
Announce files for a test case — step 1 of 3 of sending them to the project’s bucket
POST
The files waiting on the case being marked
GET
Add a file to the case being marked
POST
Announce files for the case being marked — step 1 of 3 of sending them to the project’s bucket
POST
List your test cases
GET
Create a test case
POST
This case’s past evaluations, newest run first
GET
The revisions of this case’s content, newest first
GET
One revision with its content
GET
Put the content of a case back to a revision
POST
What people said about this case, oldest first
GET
Say something about this case
POST
Add a defect link to a case
POST
Take a defect link off a case
DELETE
Take a comment back
DELETE
Find a case by an identifier another tool uses
GET
Resolve up to 500 identifiers in one request
POST
Read one of your test cases
GET
Delete a test case
DELETE
Update a test case
PATCH
Put a deleted test case back
POST
One action over many cases
POST
The tree as one Markdown document
GET
A Markdown document back — create, update, report
POST
Cases from a CSV or an XLSX — Testomat, TestRail, Qase, Zephyr or columns of your own
POST
Cases as an XLSX — the tree, nodes or cases
GET
One case as its Markdown block
GET
Copy a case beside the original
POST
review
Overview
What a run from pasted text would send to the model
POST
Start a run: proposals of test cases from pasted text
POST
Where a run stands
GET
Cancel a run still in the queue
DELETE
One page of the review queue, newest first
GET
Queue a result for human review
POST
Decide one verdict over an explicit list of queue items
POST
Offer tests this project has no case for
POST
Ask the author for changes
POST
Approve the current revision of an item
POST
Correct a case proposal before approving it
PUT
Set the reviewers of an item
PUT
One queue entry, with its comparisons
GET
Approve or reject an item, or correct a rejection reason
PATCH
ingest
Overview
Ingest a Cairn run
POST
settings
Overview
Read this project's settings
GET
Replace the settings
PATCH
The project's AI provider settings — shaped by the caller's role
GET
Connect the project's AI provider, or replace its provider, model or credentials
PUT
Enable or disable AI, or change the model or draft language, without touching credentials
PATCH
Remove the stored credentials permanently and disable AI
DELETE
Connect or replace the fallback AI provider
PUT
Remove the fallback provider and its key
DELETE
Change the fallback provider’s model
PATCH
The project's tags with usage counts
GET
The project's sub-statuses, with the results carrying each
GET
Replace the project's own sub-statuses under one status
PUT
Rename a tag in every case that carries it
POST
Fold several tags into one that stays
POST
The Steps Database — every step of the project with its usage count
GET
Add a step by hand
POST
Delete every step no case carries
DELETE
Delete one step nobody carries
DELETE
Rename a step in every case that carries it, or change its note
PATCH
Fold several steps into one text
POST
quotas
Overview
The project’s quotas and what is left
GET
refs
Overview
Which references name a case or a suite
GET
widgets
Overview
The project’s widgets
GET
Create a widget
POST
The numbers of a draft widget
POST
One widget
GET
Archive a widget
DELETE
Change a widget
PATCH
The numbers of a saved widget
GET
snippets
Overview
The project’s snippets
GET
Create a snippet
POST
One snippet
GET
Delete a snippet
DELETE
Change a snippet
PATCH
custom-fields
Overview
The project’s custom fields
GET
Define a custom field
POST
Reorder the fields of an entity
PUT
Change a custom field
PATCH
Archive a custom field
POST
Restore an archived custom field
POST
The project’s configuration groups, with how many runs use them
GET
The project’s environment list, and what its runs report outside it
GET
Add an environment to the list
POST
Rename an environment
PATCH
Archive an environment
POST
Restore an archived environment
POST
requirements
Overview
The saved versions of the traceability matrix
GET
Save a version of the matrix
POST
One saved version of the matrix, with its content
GET
The project’s requirements
GET
Make a requirement
POST
The priority labels in use
GET
One requirement with its cases
GET
Change a requirement
PATCH
Archive a requirement
POST
Restore an archived requirement
POST
Link a case to a requirement
PUT
Unlink a case from a requirement
DELETE
What a Markdown file holds, for the mapping step of an import
POST
Import a traceability matrix as links (a dry run by default)
POST
Import requirements from a Markdown file (a dry run by default)
POST
The requirements a case covers
GET
Link a requirement to a case
PUT
Take a requirement off a case
DELETE
bugs
Overview
The project’s bugs
GET
File a bug
POST
One bug, the card
GET
Move a bug to the Bin
DELETE
Change a bug, close it or open it again
PATCH
Bring a bug back from the Bin
POST
Wait for more runs before closing a bug («Wait more»)
POST
Link cases to a bug
POST
Add evidence from another failed result
POST
The files attached to a bug
GET
Attach a file to a bug
POST
Announce files for a bug — step 1 of 3 of sending them to the project’s bucket
POST
Unlink a case from a bug
DELETE
Watch a bug
PUT
Stop watching a bug
DELETE
What people said about this bug, oldest first
GET
Say something about this bug
POST
plans
Overview
The project’s test plans
GET
Create a test plan
POST
One test plan
GET
Delete a test plan
DELETE
Change a test plan
PATCH
What the plan collects right now
GET
Start a run from the plan
POST
audit
Overview
Who changed what, newest first
GET
Every change of one session, oldest first
GET
What undoing a session would do, written nowhere
GET
Undo a whole session (a project owner, in person)
POST
Put one record back the way it was
POST
Everything that ever happened to one record
GET
bin
Overview
What was deleted and can still come back
GET
Delete forever the Bin entries named
POST
Bring several Bin entries back at once
POST
Empty the Bin — for good, in the background
POST
admin
Overview
When the purge last ran, and whether that is recent enough
GET
Delete for good every run, case, suite and company whose 30 days have passed, and make deleted accounts nobody
POST
File every automated case that has no suite, in every project, by its specRef
POST
Rebuild the tag index for every case in every project from its title
POST
Rebuild the Steps Database of every project from its live manual cases
POST
Accounts and companies by what they have used
GET
What the API sees of the caller’s address
GET
Find an account or a company and see its tier
GET
The history of one subject’s tier
GET
Grant, change, cancel or switch off a tier
POST
The queue of requests for a paid tier
GET
Close a request for a paid tier
PATCH
Switch a company’s single-sign-on requirement (or its single sign-on) off
POST
Issue a short admin token
POST
End an admin token
DELETE
Give or take the application owner role
POST
Free tier cleanup: what it would delete of one tier owner
GET
Free tier cleanup: report or delete
POST
End every session of one account
POST
ai
Overview
The project's AI provider settings — shaped by the caller's role
GET
Connect the project's AI provider, or replace its provider, model or credentials
PUT
Enable or disable AI, or change the model or draft language, without touching credentials
PATCH
Remove the stored credentials permanently and disable AI
DELETE
Connect or replace the fallback AI provider
PUT
Remove the fallback provider and its key
DELETE
Change the fallback provider’s model
PATCH
Whether a draft can be requested for this case, and the current or latest relevant one
GET
Request a draft description and precondition from the project's AI provider
POST
Accept selected fields of the pending draft, or reject it
PATCH
jobs
Overview
Dry run: what an import of one TestRail project would do
POST
Sync changes from TestRail
POST
Dry run of a sync: what it would change
POST
The latest dry runs and imports of the project
GET
Import one TestRail project
POST
Where a dry run or an import stands, and what it did
GET
Cancel a dry run or an import
POST
The project’s queue of AI operations
GET
Open a job (the producer)
POST
Report how far a job got
PATCH
Move a job — Resume, Retry, Cancel, Dismiss, or the producer’s report
PATCH
notifications
Overview
Your notifications in this project
GET
How many notifications you have not read
GET
Mark all your notifications in this project as read
POST
Mark one notification as read
POST
storage
Overview
The bucket the project keeps its result files in
GET
Connect a bucket to the project, or replace the connection
PUT
Disconnect the bucket
DELETE
Check that a connection works
POST
Set the dashboard’s CORS rule in the bucket, once
POST
integrations
Overview
The CI the project starts its automated tests in
GET
Test and connect GitHub Actions, GitLab CI or CircleCI, or change the connection
PUT
Disconnect the CI
DELETE
Check the saved connection again
POST
Where the pipelines of these runs stand
GET
Start a run’s automated part in CI
POST
The TestRail the project imports from
GET
Connect a TestRail, or replace its API key
PUT
Disconnect the TestRail
DELETE
Check the saved TestRail connection
POST
The projects of the TestRail instance, with their suite and case counts
GET
Dry run: what an import of one TestRail project would do
POST
The sync from TestRail: modes, imported projects, last sync
GET
Sync changes from TestRail
POST
Set the sync mode of the entities
PUT
Dry run of a sync: what it would change
POST
The latest dry runs and imports of the project
GET
Import one TestRail project
POST
Where a dry run or an import stands, and what it did
GET
Cancel a dry run or an import
POST
Changelog
Cairn
agent
Getting started
Concepts
ATC vs MTC
Three modes
Pilot, scorers & judge
Commands
Configuration (env)
Knowledge, prompts & checklists
Langfuse (optional)
Decision layer (optional)
Library API
Interactive TUI
Architecture & ADRs
Plune CLI
MIT
Getting started
Guides
Bring an existing suite
Files from JUnit & Allure
Results of agentic (e2e) tests
Report Playwright results as they run
Test a RAG chatbot end-to-end
Regression suite + diff
Check for drift with verify
Record case ids with ids
Import a traceability matrix
Run in CI
Switch providers
Custom assertions
Reading reports & exit codes
Sync runs to the platform
Record a Cairn run in Plune
eval-action
MIT
Getting started
Recipes
Full PR workflow from scratch
Real provider vs mock
Monorepo & matrix
Interpreting the diff
fail-on-regression as a required check
Fork pull requests
GitHub
Select theme
Dark
Light
Auto
Overview
public
Section titled “public”
Reachable with no account: the address is the credential (#1263)
Operations
Section titled “ Operations ”
GET
/public/files/{token}
GET
/public/report/{token}