Plunk · Authentication Profile
Plunk Authentication
Authentication
Plunk secures its APIs with http across 1 declared security scheme, as derived from its OpenAPI definitions.
EmailTransactional EmailMarketingAutomationOpen-SourceSoftware-as-a-ServiceEmail APIWebhookSegmentationWorkflow-AutomationSelf-HostedDeveloper Tools
Methods: http
Schemes: 1
OAuth flows:
API key in: header
Security Schemes
ApiKeyAuth http
scheme: bearer
Source
Authentication Profile
generated: '2026-08-13'
method: searched
source: openapi/_original/plunk-api-openapi.json
docs: https://docs.useplunk.com/guides/api-keys
supersedes: >-
The 2026-07-11 derived pass, which read the hand-authored spec and reported a
single unqualified `bearerAuth` scheme. Plunk's published OpenAPI and its API
keys guide document a two-key model where the key PREFIX determines which
endpoints a credential may call — that split is the whole auth model and was
invisible in the derived file.
summary:
types: [http]
schemes: [bearer]
api_key_in: [header]
oauth2_flows: []
key_classes: 2
schemes:
- name: ApiKeyAuth
type: http
scheme: bearer
bearerFormat: API Key
header: Authorization
format: "Bearer <key>"
description: >-
API key authentication. The project is derived automatically from the key,
so no project identifier appears on any request. /v1/track requires a public
key (pk_*) and rejects a secret key with 401; every other endpoint requires a
secret key (sk_*) and rejects a public key with 401. The two key types are
not interchangeable in either direction.
sources:
- openapi/_original/plunk-api-openapi.json
applied: global
applied_note: The spec declares security ApiKeyAuth at the document root, applying to every operation.
key_classes:
- class: secret
prefix: 'sk_'
scope: >-
Every endpoint except POST /v1/track — sending email, contacts, segments,
campaigns, templates, workflows, domains, billing.
placement: server-side only
guidance: >-
Store in environment variables or the platform secret store. Never bundle
into a frontend build.
- class: public
prefix: 'pk_'
scope: POST /v1/track only
placement: browser and mobile client code
guidance: >-
Deliberately limited so events can be recorded from a client without
exposing the project's full API surface. Treat as semi-sensitive and rotate
if the tracking endpoint is being abused.
mismatch_behavior:
status: 401
code: INVALID_API_KEY
message_example: 'Invalid secret API key. This endpoint requires a secret key (sk_*), not a public key.'
missing_credential:
status: 401
code: MISSING_AUTH
rotation:
endpoint: "POST /users/@me/projects/{id}/regenerate-keys"
console: Settings -> API Keys
granularity: pair
granularity_note: >-
The two keys rotate together. There is no way to rotate one without
invalidating the other, and there is no grace period — the old keys stop
working immediately, so every consumer must be updated in one window.
recommended_triggers: [key committed to a public repository, offboarding a contractor, revoking a deployment, periodic rotation policy]
compromise_playbook:
source: https://docs.useplunk.com/guides/api-keys
steps:
- Rotate immediately.
- Audit the Activity tab for unexpected sends, contact mutations or campaign changes during the exposure window.
- Check Billing -> Consumption for usage spikes.
- Report unauthorized activity to support with the request IDs from the suspicious entries.
environment_separation:
test_mode: false
note: >-
There is NO test/live key split. pk_/sk_ is a capability split, not an
environment split, and Plunk publishes no sandbox or test-mode credentials.
The documented practice is to run separate Plunk PROJECTS for staging and
production so a leaked staging key cannot touch production data. This is why
no sandbox/ artifact exists in this repo.
oauth:
api_oauth: false
console_oauth: true
console_providers: [github, google]
console_note: >-
GET /auth/oauth-config reports which OAuth providers are configured, and
https://next-api.useplunk.com/config confirms github and google are enabled
on the hosted service. This is human sign-in to the dashboard, not API
authorization — there is no authorization server, no scopes and no token
endpoint, which is why scopes/ is deliberately absent.
self_hosting:
note: >-
Self-hosted deployments issue their own key pairs per project against their
own base URL; the model is identical because it is the same AGPL-3.0
codebase.
docs: https://docs.useplunk.com/self-hosting/introduction
Work with this as data
Every security artifact here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for security posture
4 MCP tools reach this
find_securityBrowse and filter every security artifact in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This security artifact
curl "https://apis.io/api/v1/security/plunk-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.