Skip to main content
This is part 3 of the Your First Plugin tutorial. Make sure you’ve completed 2. First Node first.
Integrations handle authentication with external services. When your node needs to talk to an API that requires credentials, you define an integration so users can configure their keys securely in the Noxus UI.

Define credentials and integration

Add to weather_plugin/__init__.py:

How it works

  • BaseCredentials is a Pydantic model that defines the fields users fill in (API keys, tokens, URLs, etc.). It carries a type: ClassVar[str] — the stable identifier used throughout the platform.
  • is_ready() returns True when the credentials are valid enough to use — the UI shows this status.
  • BaseIntegration[WeatherAPICredentials] ties the credentials to a display name and icon that appear in workspace control. You do not set type on the integration — the SDK derives it from the credentials class’s type automatically (BaseIntegration.__init_subclass__), so the two can never drift apart.
Every NCL display widget needs a label (ConfigPassword(label="API Key")). It has no default — a bare ConfigText() fails validation. Use ConfigPassword for secrets so the value is masked in the UI (see ClipOne / Proxy API plugins).

Register the integration

Update the plugin class:
When the plugin is installed, this integration will appear in Workspace control → Integrations where users can enter their API key. Credentials are encrypted and stored by the platform — your plugin code never stores them.

Integration anatomy

Probing readiness against the live API

BaseCredentials.is_ready() only checks that fields are filled in. To make the “connected” status reflect real authorization, override the integration’s is_ready classmethod and probe the API — this is what the ClipOne plugin does:

Credential field types

You can use any NCL display type for credential fields — every widget takes a label, and secrets should use ConfigPassword so they render masked:

Next: Use Integration in Node →

Wire the integration into your node to call a real API with credentials.