Rollstack API
- OpenAPI 3.1.0 document: https://api.rollstack.com/public/v1/openapi.json
- The whole reference in Markdown: https://docs.rollstack.com/llms-full.txt
- An index of the reference: https://docs.rollstack.com/llms.txt
Rollstack is the AI presentation platform for business reporting. Every Rollstack report is a slide deck built from your data, in your own template, and kept current.
The API lets your own code, scripts and AI clients do what you do in the app:
- Find and create reports, import your PowerPoint and Google Slides decks, and ask the slides agent to build and change slides, on brand.
- Add data from any data source:
- Data warehouses and lakehouses: Snowflake, Databricks, Google BigQuery, Amazon Redshift, Microsoft Fabric, Azure Synapse Analytics, Oracle Autonomous Data Warehouse, Teradata, ClickHouse, DuckDB and more
- Semantic layers: dbt Semantic Layer, LookML, Snowflake semantic views, Databricks metric views, Cube, AtScale and more
- BI tools: Power BI, Tableau, Qlik Sense, Looker, ThoughtSpot, Domo, Sigma, Metabase, Amazon QuickSight, Mode, Omni, Hex, Lightdash and more
- CRMs and business applications: Salesforce, Dynamics 365, HubSpot, SAP, NetSuite, Workday, Zendesk, Gainsight, Google Analytics and more
- Spreadsheets and files: Excel, Google Sheets, CSV, PDFs, Word, Google Docs, SharePoint, OneDrive, Google Drive, JSON and more
- Any other application or database through its API
- Refresh reports from their sources. A refresh reruns the same deterministic queries instead of regenerating the report, and uses AI only to repair the calculations and slides the new data broke.
- Create a version of a report for each client, region, team or product line with Bursts.
- Export reports to PowerPoint or PDF.
- Share and schedule reports on any schedule, hourly to yearly or a cron, and email each stakeholder their own version.
- Owners and admins can also manage the organization, its members and its data source connections.
AI assistants such as Claude and ChatGPT can also use Rollstack through its MCP server, included on every plan.
Getting started
- In Rollstack, open Settings → Connected apps → API keys and create a key with the scopes you need. Copy it: it starts with
rsk_and is shown only once. - Send it as a bearer token in the
Authorizationheader of every request. - Call
GET /meto check the key: it answers the user and organization it belongs to and the scopes it carries.
curl https://api.rollstack.com/public/v1/me \
-H "Authorization: Bearer rsk_..."
Authentication
An API key acts as the user who created it, in the one organization it was created in, and sees only what that user sees in the app. It never acts with more than the role its user had when they created it, and a key whose user is now a member loses the scopes only owners and admins may grant.
Keys expire on the date set when they were created, if any. A user can revoke their keys in the app at any time, and deactivating a user revokes all of theirs. A missing, unknown, revoked or expired key answers 401.
Scopes
Most endpoints need one scope, shown on their pages, and answer 403 with api-key-missing-scope when the key doesn't carry it; GET /me works with any valid key. Give a key only the scopes it needs. Some endpoints are also limited to owners and admins whatever the scope.
| Scope | Allows | Owners and admins only |
|---|---|---|
organization:read | Read the organization's settings and its LLM provider | |
organization:write | Change the organization's settings and its LLM provider | Yes |
users:read | List members and pending invites | Yes |
users:write | Change members' roles, deactivate and reactivate them, invite users and delete invites | Yes |
connections:read | List connections and their users, search their dashboards and the user's spreadsheets | |
connections:write | Create, update and delete connections, and manage their users and admins | |
credentials:write | Replace a connection's credentials | |
smtp:read | List SMTP connections | |
smtp:write | Add and delete SMTP connections | |
slide_decks:read | List folders and reports, read their content, datasheets, schedules, email settings, messages and runs, and export them | |
slide_decks:write | Create, update, delete, share and schedule reports, add their sources and upload files | |
slide_decks:run | Message the slides agent, and start and cancel runs | |
slide_decks:email | Set up and send report emails |
Requests and responses
- Bodies are JSON, except the workbook, document or PowerPoint file a file upload can take as
multipart/form-data. Fields an endpoint doesn't accept are rejected rather than ignored. - Dates are ISO 8601 strings in UTC. Ids are strings, except users', which are numbers.
GET /reportsanswers pages of up tolimitreports: pass thenextCursorit answers ascursorfor the next page, until it is null. Other lists answer every item at once.- Work that takes a while answers
202 Acceptedwith an id right away: a message to the slides agent, a run, or a batch of variants added to a burst. Follow it with itsGET, and the runs a burst starts withGET /bursts/{id}/runs: each waits up towaitSeconds(20 by default, 30 at most) for the work to finish and answers as soon as it does, so call it again while the status isqueuedorrunning.
Errors
Every error answers a JSON body with a stable, machine-readable code and a message for people, such as { "code": "api-key-missing-scope", "message": "This call needs the slide_decks:write scope, which this API key doesn't have. Use a key with it, or connect your AI client to Rollstack again and allow it." }.
| Status | Means |
|---|---|
| 400 | The request is invalid. data-validation-error says which fields failed and why |
| 401 | The key is missing, unknown, revoked (api-key-invalid) or expired (api-key-expired), or its user left the organization (api-key-organization-left). The WWW-Authenticate header says where to sign in with OAuth |
| 403 | The key lacks the endpoint's scope (api-key-missing-scope, with the scope in the WWW-Authenticate header), or the user isn't an owner or admin (require-admin-permission) |
| 404 | The resource or path doesn't exist |
| 409 | A request with the same Idempotency-Key is still running (idempotency-key-in-progress) |
| 422 | The Idempotency-Key was already used for a different request (idempotency-key-reused) |
| 428 | A call that emails people or deletes reports (approveReportMessageProposal, startReportRun, sendReportEmail, startBurstRun, sendBurstEmailConfig, sendBurstVariantEmails, deleteBurst, removeBurstVariants), made with an OAuth token or over MCP, waits for the user to confirm it in Rollstack (confirmation-required), at the link in the message |
| 429 | Too many requests (rate-limit-exceeded): wait the seconds in the Retry-After header. A data query, datasheet change preview or save, or a slide render with datasheet changes, sent while another of yours still runs (query-already-running): they run one at a time, so wait the seconds in the Retry-After header, or until that one answers, then send it again |
| 5xx | Something failed on our side: retry later |
Idempotency
A request that times out may have run or not. To retry a write safely, send an Idempotency-Key header with a unique value, such as a UUID, on any POST, PUT, PATCH or DELETE, and send the same value when you retry it. MCP write tools take the same value as their idempotencyKey argument.
curl -X POST https://api.rollstack.com/public/v1/reports \
-H "Authorization: Bearer rsk_..." \
-H "Idempotency-Key: 6f1c2a4e-9b7d-4e2f-8a3c-1d5e7f9b0a2c" \
-H "Content-Type: application/json" \
-d '{"name": "Weekly sales"}'
- The first request with a key runs, and its response is kept for 24 hours. A retry with the same key and the same request answers that response, with its status, and runs nothing.
- Keys belong to the API key and the endpoint, so another key or endpoint never sees them. A tool call and a REST request to the same endpoint share them.
- A retry with the same key but a different body, path or query answers 422
idempotency-key-reused. Use a new key for a new request. - A retry while the first request is still running answers 409
idempotency-key-in-progress: retry it later with the same key. A request that stopped before it answered keeps answering 409 until its key expires, so check whether it took effect before you send it again with a new key. - A request that fails, such as with a 4xx or 5xx, keeps nothing, so retry it with the same key.
- When keys can't be checked, a request with one answers 503
idempotency-unavailableand runs nothing. - Without the header, a request runs every time it is sent.
GETrequests ignore it.
Rate limits
Each API key may make 120 requests a minute. Calls that cost far more than a read have lower limits of their own, counted per user across all their keys and AI clients:
| Calls | Limit |
|---|---|
| Messages to the slides agent | 6 a minute |
| Exports and slide images | 10 a minute |
| Imports of a deck from a link or a file, and conversions of older reports | 10 a minute |
| Datasheet data reads | 30 a minute |
| Report viewer slide and template cover loads (MCP) | 60 a minute |
| Email sends, test sends included | 5 a minute |
| LLM provider saves | 10 a minute for the organization |
Responses report how much of the key's per-minute limit is left, so a client can slow down before it gets a 429: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (seconds until the minute resets) and RateLimit-Policy. The lower limits above aren't in these headers. Past any limit, calls answer 429 with a Retry-After header: wait that long before calling again, whatever RateLimit-Remaining says. An MCP tool call past any of these limits returns an error result instead, with the rate-limit-exceeded code and a message that says how long to wait.
Versioning
The version is in the path: /public/v1. Changes within v1 only add: new endpoints, new optional request fields, new response fields and new values in fields such as a status or an error code, so ignore fields you don't know and handle values you don't know. An endpoint or field that gets replaced keeps working, and its page says it is deprecated and what replaces it. A change that would break existing calls comes as a new version under a new path, with v1 still running alongside it.
Deprecation and sunset
A deprecated endpoint or field is marked deprecated in the OpenAPI document and on its page, and keeps working for as long as v1 does. When a new version replaces v1, v1 keeps running for at least 12 months after it ships. Through that time, v1 responses carry a Deprecation header with the date v1 was deprecated (RFC 9745) and a Sunset header with the date it stops answering (RFC 8594), and both dates are announced in the product updates.
MCP server
AI clients such as Claude can also use this API as an MCP server: POST JSON-RPC to /public/v1/mcp over Streamable HTTP with the same bearer API key, or sign in with OAuth from a client that supports it. Its tools, named by operationId, find, build, edit, run, export, share, schedule and email reports, upload files and message the slides agent. It lists only the tools the key can call. Everything else, such as deleting reports or managing members or connections, is REST-only.
Connect an AI assistant
Use Rollstack when someone wants a slide deck or report built or kept up to date from their company's data, such as warehouses, BI dashboards and spreadsheets, in their own template, refreshed on a schedule or emailed.
Add the MCP server, https://api.rollstack.com/public/v1/mcp, to the assistant and sign in with Rollstack:
- Claude (claude.ai and the desktop app): in Connectors, add a custom connector with this URL, then Connect. On Team and Enterprise plans an owner adds it in the organization's settings first.
- ChatGPT: Settings → Plugins → MCPs → Add → Add MCP server, with Streamable HTTP and this URL. Save, then Authenticate. On Business and Enterprise plans an admin allows custom servers first.
- Claude Code:
claude mcp add --transport http rollstack https://api.rollstack.com/public/v1/mcp, then/mcpto sign in. - Cursor: add
{ "mcpServers": { "rollstack": { "url": "https://api.rollstack.com/public/v1/mcp" } } }to~/.cursor/mcp.json, then sign in when it asks. - Other clients: send an API key as a bearer token.
Signing in asks the user to approve the scopes the assistant asked for. The assistant can then do what they approved, within their role: a member can't grant the scopes only owners and admins have. Each sign-in creates a key that lasts 90 days and that the assistant refreshes on its own, listed in Settings → Connected apps as a Connected app, where the user can revoke it.
Things to ask it:
- "Build a quarterly business review deck from our Tableau dashboards"
- "Refresh the data in my weekly sales report and email it to the team"
- "Create one deck per region from this template"
- "Schedule the board report to update every Monday"
| Tool | Scope | Owners and admins only |
|---|---|---|
listReports | slide_decks:read | |
getReport | slide_decks:read | |
convertReport | slide_decks:write | |
createReport | slide_decks:write | |
duplicateReport | slide_decks:write | |
updateReport | slide_decks:write | |
listTemplates | slide_decks:read | |
showTemplates | slide_decks:read | |
getTemplatePickerCovers | slide_decks:read | |
createTemplate | slide_decks:write | |
updateTemplate | slide_decks:write | |
deleteTemplate | slide_decks:write | |
applyReportTemplate | slide_decks:write | |
listReportVersions | slide_decks:read | |
saveReportVersion | slide_decks:write | |
restoreReportVersion | slide_decks:write | |
getReportMessage | slide_decks:read | |
sendReportMessage | slide_decks:run | |
approveReportMessageProposal | slide_decks:run | |
cancelReportMessage | slide_decks:run | |
rejectReportMessageProposal | slide_decks:run | |
listMemories | slide_decks:read | |
createMemory | slide_decks:write | |
updateMemory | slide_decks:write | |
deleteMemory | slide_decks:write | |
listReportRuns | slide_decks:read | |
getReportRun | slide_decks:read | |
listReportSyncs | slide_decks:read | |
listRuns | slide_decks:read | |
startReportRun | slide_decks:run | |
cancelReportRun | slide_decks:run | |
getReportCloudExport | slide_decks:read | |
updateReportCloudExport | slide_decks:write | |
exportReport | slide_decks:read | |
getReportContent | slide_decks:read | |
getReportDesign | slide_decks:read | |
getReportSlideHtml | slide_decks:read | |
getReportSlideImages | slide_decks:read | |
showReport | slide_decks:read | |
getReportViewerSlideImages | slide_decks:read | |
arrangeReportSlides | slide_decks:write | |
updateReportTheme | slide_decks:write | |
renderReportSlides | slide_decks:write | |
saveReportSlides | slide_decks:write | |
getDataset | slide_decks:read | |
createDatasetUpload | slide_decks:write | |
createDocument | slide_decks:write | |
createDataset | slide_decks:write | |
replaceDataset | slide_decks:write | |
deleteDataset | slide_decks:write | |
getReportDataGuide | slide_decks:read | |
listReportDatasheets | slide_decks:read | |
getReportDatasheet | slide_decks:read | |
getReportDatasheetData | slide_decks:read | |
addReportDatasheets | slide_decks:write | |
removeReportDatasheet | slide_decks:write | |
addReportDashboardElements | slide_decks:write | |
previewReportDatasheetChanges | slide_decks:write | |
queryReportData | slide_decks:write | |
saveReportDatasheetChanges | slide_decks:write | |
getReportParameters | slide_decks:read | |
createReportParameter | slide_decks:write | |
updateReportParameter | slide_decks:write | |
deleteReportParameter | slide_decks:write | |
getReportViews | slide_decks:read | |
shareReport | slide_decks:write | |
unshareReport | slide_decks:write | |
listReportComments | slide_decks:read | |
createReportComment | slide_decks:write | |
resolveReportComment | slide_decks:write | |
getReportSchedules | slide_decks:read | |
updateReportSchedules | slide_decks:write | |
listEmails | slide_decks:read | |
getReportEmailConfig | slide_decks:read | |
listReportEmails | slide_decks:read | |
updateReportEmailConfig | slide_decks:email | |
sendReportEmail | slide_decks:email | |
sendReportTestEmail | slide_decks:email | |
listBursts | slide_decks:read | |
listBurstEmailConfigs | slide_decks:read | |
getBurstRun | slide_decks:read | |
getBurstSettings | slide_decks:read | |
listBurstVariants | slide_decks:read | |
getBurstVariantBatch | slide_decks:read | |
listReportSyncFilters | slide_decks:read | |
addBurstVariants | slide_decks:write | |
createBurst | slide_decks:write | |
createBurstEmailConfig | slide_decks:email | |
startBurstRun | slide_decks:run | |
sendBurstEmailConfig | slide_decks:email | |
sendBurstVariantEmails | slide_decks:email | |
renameBurst | slide_decks:write | |
updateBurstVariantEmailSettings | slide_decks:email | |
updateBurstEmailConfig | slide_decks:email | |
updateBurstSettings | slide_decks:write | |
updateBurstVariantRecipients | slide_decks:email | |
updateBurstFilters | slide_decks:write | |
deleteBurst | slide_decks:write | |
deleteBurstEmailConfig | slide_decks:email | |
reapplyBurstFilters | slide_decks:write | |
removeBurstVariants | slide_decks:write | |
sendBurstEmailConfigTest | slide_decks:email | |
listConnections | connections:read | |
searchDashboards | connections:read | |
getDashboard | connections:read | |
searchModels | connections:read | |
searchTables | connections:read | |
searchSpreadsheets | connections:read | |
getSpreadsheet | connections:read | |
listSmtpConnections | smtp:read | |
listFolders | slide_decks:read | |
getFolder | slide_decks:read | |
createFolder | slide_decks:write | |
updateFolder | slide_decks:write | |
shareFolder | slide_decks:write | |
unshareFolder | slide_decks:write | |
submitFeedback | Any valid key | |
listMembers | users:read | Yes |
Endpoints
Reports
- Reports
- List reports:
GET /reports - Create report:
POST /reports - Get report:
GET /reports/{id} - Update report:
PATCH /reports/{id} - Delete report:
DELETE /reports/{id} - Convert report to slide deck:
POST /reports/{id}/conversions - Duplicate report:
POST /reports/{id}/duplicates - Transfer ownership:
POST /reports/{id}/transfer-ownership
- List reports:
- Templates
- List templates:
GET /templates - Import template:
POST /templates - Update template:
PATCH /templates/{templateId} - Delete template:
DELETE /templates/{templateId} - Apply template:
POST /reports/{id}/template
- List templates:
- Versions
- List report versions:
GET /reports/{id}/versions - Save report version:
POST /reports/{id}/versions - Restore report version:
POST /reports/{id}/versions/{versionId}/restore
- List report versions:
- Chat
- Get slides agent message:
GET /reports/{id}/messages/{messageId} - Send message to slides agent:
POST /reports/{id}/messages - Approve slides agent proposal:
POST /reports/{id}/messages/{messageId}/replies/{replyId}/approve - Cancel slides agent message:
POST /reports/{id}/messages/{messageId}/cancel - Reject slides agent proposal:
POST /reports/{id}/messages/{messageId}/replies/{replyId}/reject
- Get slides agent message:
- Memories
- List memories:
GET /memories - Add memory:
POST /memories - Update memory:
PATCH /memories/{memoryId} - Forget memory:
DELETE /memories/{memoryId}
- List memories:
- Runs
- List report runs:
GET /reports/{id}/runs - Start report run:
POST /reports/{id}/runs - Get report run:
GET /reports/{id}/runs/{runId} - List report syncs:
GET /reports/{id}/syncs - List runs of all reports:
GET /runs - Cancel report run:
POST /reports/{id}/runs/{runId}/cancel
- List report runs:
- Exports
- Get cloud save:
GET /reports/{id}/cloud-export - Set cloud save:
PUT /reports/{id}/cloud-export - Export report:
POST /reports/{id}/exports
- Get cloud save:
- Content
- Get report content:
GET /reports/{id}/content - Get report design:
GET /reports/{id}/design - Get slide drafts:
GET /reports/{id}/slides/html - Get slide images:
GET /reports/{id}/slides/images - Arrange slides:
PATCH /reports/{id}/slides - Save draft slides:
POST /reports/{id}/slides - Change theme:
PATCH /reports/{id}/theme - Render draft slides:
POST /reports/{id}/slides/render
- Get report content:
- Uploaded files
- Get an uploaded file:
GET /datasets/{id} - Replace an uploaded file:
PUT /datasets/{id} - Delete an uploaded file:
DELETE /datasets/{id} - Get a link to upload a file:
POST /datasets/uploads - Upload a document:
POST /documents - Upload a file:
POST /datasets
- Get an uploaded file:
- Datasheets
- Get the data guide:
GET /data-guide - List report datasheets:
GET /reports/{id}/datasheets - Add sources to report:
POST /reports/{id}/datasheets - Get a datasheet:
GET /reports/{id}/datasheets/{datasheetId} - Remove datasheet from report:
DELETE /reports/{id}/datasheets/{datasheetId} - Get datasheet data:
GET /reports/{id}/datasheets/{datasheetId}/data - Add dashboard charts to report:
POST /reports/{id}/datasheets/{datasheetId}/elements - Preview datasheet changes:
POST /reports/{id}/datasheets/changes/preview - Query report data:
POST /reports/{id}/data/query - Save datasheet changes:
POST /reports/{id}/datasheets/changes
- Get the data guide:
- Parameters
- Get report parameters:
GET /reports/{id}/parameters - Create report parameter:
POST /reports/{id}/parameters - Update report parameter:
PATCH /reports/{id}/parameters/{parameterId} - Delete report parameter:
DELETE /reports/{id}/parameters/{parameterId}
- Get report parameters:
- Sharing
- Get report views:
GET /reports/{id}/views - Share report:
PUT /reports/{id}/shares/{userId} - Unshare report:
DELETE /reports/{id}/shares/{userId}
- Get report views:
- Comments
- List comments:
GET /reports/{id}/comments - Add comment:
POST /reports/{id}/comments - Resolve comment thread:
POST /reports/{id}/comments/{commentId}/resolve
- List comments:
- Schedules
- List schedules:
GET /reports/{id}/schedules - Replace report schedules:
PUT /reports/{id}/schedules
- List schedules:
- Email
- List sent emails of all reports:
GET /emails - Get email settings:
GET /reports/{id}/email-config - Replace email settings:
PUT /reports/{id}/email-config - List sent emails:
GET /reports/{id}/emails - Send email:
POST /reports/{id}/emails - Send test email:
POST /reports/{id}/emails/test
- List sent emails of all reports:
- Bursts
- List bursts:
GET /bursts - Create burst:
POST /bursts - List burst email configurations:
GET /bursts/{id}/email-configs - Create burst email configuration:
POST /bursts/{id}/email-configs - Get burst run:
GET /bursts/{id}/runs - Run burst variants:
POST /bursts/{id}/runs - Get burst settings:
GET /bursts/{id}/settings - Update burst settings:
PATCH /bursts/{id}/settings - List burst variants:
GET /bursts/{id}/variants - Add burst variants:
POST /bursts/{id}/variants - Get burst variant batch:
GET /bursts/{id}/variants/batches/{batchId} - List sync filters:
GET /reports/{id}/syncs/{syncId}/filters - Send burst email configuration:
POST /bursts/{id}/email-configs/{configId}/send - Send variant emails:
POST /bursts/{id}/variants/emails - Rename burst:
PATCH /bursts/{id} - Delete burst:
DELETE /bursts/{id} - Set variant email settings:
PATCH /bursts/{id}/variants/email-settings - Update burst email configuration:
PATCH /bursts/{id}/email-configs/{configId} - Delete burst email configuration:
DELETE /bursts/{id}/email-configs/{configId} - Set variant recipients:
PUT /bursts/{id}/variants/recipients - Update burst filters:
PUT /bursts/{id}/filters - Reapply burst filters:
POST /bursts/{id}/filters/reapply - Remove burst variants:
POST /bursts/{id}/variants/remove - Send burst email configuration test:
POST /bursts/{id}/email-configs/{configId}/test
- List bursts:
Connections
- Connections
- List connections:
GET /connections - Create connection:
POST /connections - Get connection:
GET /connections/{type}/{id} - Update connection:
PATCH /connections/{type}/{id} - Delete connection:
DELETE /connections/{type}/{id} - Search dashboards:
GET /connections/{type}/{id}/dashboards - Get dashboard:
GET /connections/{type}/{id}/dashboards/{dashboardId} - Search models:
GET /connections/{type}/{id}/models - Search tables:
GET /connections/{type}/{id}/tables - Replace credentials:
PUT /connections/{type}/{id}/credentials
- List connections:
- Connection users
- List connection users:
GET /connections/{type}/{id}/users - Add connection users:
POST /connections/{type}/{id}/users - Suspend connection user:
DELETE /connections/{type}/{id}/users/{userId}
- List connection users:
- Connection admins
- Add connection admin:
PUT /connections/{type}/{id}/admins/{userId} - Remove connection admin:
DELETE /connections/{type}/{id}/admins/{userId}
- Add connection admin:
- Spreadsheets
- Search spreadsheets:
GET /spreadsheets - Get spreadsheet:
GET /spreadsheets/{id}
- Search spreadsheets:
- SMTP connections
- List SMTP connections:
GET /smtp-connections - Create SMTP connection:
POST /smtp-connections - Delete SMTP connection:
DELETE /smtp-connections/{id}
- List SMTP connections:
Workspace
- Folders
- List folders:
GET /folders - Create folder:
POST /folders - Get folder:
GET /folders/{id} - Update folder:
PATCH /folders/{id} - Delete folder:
DELETE /folders/{id} - Share folder:
PUT /folders/{id}/shares/{userId} - Unshare folder:
DELETE /folders/{id}/shares/{userId}
- List folders:
Admin
- Organization
- Get organization:
GET /organization - Update organization:
PATCH /organization
- Get organization:
- Members
- Get current user:
GET /me - List members:
GET /members - Update member:
PATCH /members/{userId} - Deactivate member:
POST /members/{userId}/deactivate - Reactivate member:
POST /members/{userId}/reactivate
- Get current user:
- Invites
- List invites:
GET /invites - Create invites:
POST /invites - Delete invite:
DELETE /invites/{inviteId}
- List invites:
- LLM provider
- Get LLM provider:
GET /organization/llm-provider - Replace LLM provider:
PUT /organization/llm-provider - Delete LLM provider:
DELETE /organization/llm-provider
- Get LLM provider: