Publishing via API
Publish plugins programmatically from your CI/CD pipeline using a Developer API key. This lets you ship a new version automatically whenever you tag a release, without opening the portal.
Create a Developer API key
Open the /developers/api-keys page and create a new key. The plaintext key is shown only once, at the moment of creation — the server keeps only a SHA-256 hash of it, so it can never be displayed again. Copy it immediately into your secret store (for example, your CI provider's encrypted secrets).
You can revoke a key at any time from the same page. Revoked or otherwise inactive keys stop working immediately.
Authenticate your requests
Send the key with every request using either of these headers:
Authorization: Bearer <key>X-Developer-Key: <key>
An invalid or inactive key returns 401. On a successful publish, the key's last_used_at timestamp is updated, so you can see when automation last ran.
Publish a plugin
Send a POST request to /api/developer/plugins. The published plugin is owned by the key's user — exactly as if you had submitted it through the portal.
Request body
| Field | Required | Notes |
|---|---|---|
slug |
Yes | Lowercase letters, numbers, and hyphens |
name |
Yes | Display name |
type |
Yes | One of snippets, lintRule, theme, dataFormatter, exportFormat, dashboard |
version |
Yes | The release version |
content |
Yes | The plugin JSON object |
uuid |
No | Existing plugin identifier |
description |
No | Short summary |
tags |
No | Discovery tags |
icon_url |
No | Icon image URL |
author_url |
No | Author or project link |
min_app_version |
No | Minimum app version required |
visibility |
No | public, private, or team |
Example
curl -X POST https://tablen.app/api/developer/plugins \
-H "Authorization: Bearer $TABLEN_DEVELOPER_KEY" \
-H "Content-Type: application/json" \
-d '{
"slug": "my-json-formatter",
"name": "My JSON Formatter",
"type": "dataFormatter",
"version": "1.2.0",
"visibility": "public",
"content": { "rules": [] }
}'
Tips for automation
- Store the key as an encrypted secret and reference it as an environment variable — never commit it to your repository.
- If a key is ever exposed, revoke it on /developers/api-keys and issue a new one.
- Bump
versionon each publish so consumers can tell releases apart. - Use
visibilityto keep work-in-progress pluginsprivateor scoped to yourteamuntil they are ready to gopublic.