Skip to main content
This is part 4 of the Your First Plugin tutorial. Make sure you’ve completed 3. First Integration first.
Now let’s connect the node to the integration so it uses real credentials to call an external API.

Declare the integration dependency

Update the node class to reference the integration:
integrations works identically on V1 and V2 nodes. This continues the V2 GetWeatherNode from part 2 — its city input is a bindable=True config field, so call(ctx) reads self.config.city rather than taking a city argument. (A V1 node would instead receive city as a keyword argument.)

What changed

  1. integrations = {"weather_api": ["api_key"]} — declares this node depends on the weather_api integration and needs the api_key field. The platform shows a credential picker in the editor and injects the decrypted credentials into ctx for the run.
  2. ctx.get_integration_credentials("weather_api") — retrieves the decrypted credentials at runtime as a plain dict keyed by your BaseCredentials field names. Fall back with or {} and read fields with .get(...) so a missing credential is a clean, actionable failure.
  3. raise IntegrationFailedError(...) — the SDK’s typed error for credential/API problems (noxus_sdk.errors). Prefer it over a bare ValueError: the message crosses the sandbox boundary and becomes the node’s user-visible failure reason (the exception type itself does not cross, so make the message actionable).

How credentials flow

Credentials are never stored in the plugin. They’re decrypted by the platform at execution time and passed through the RemoteExecutionContext for that specific run.

Using multiple integrations

A node can depend on more than one integration:

A reusable credentials helper

Real plugins wrap credential lookup in a small helper next to the integration, so every node reads the same fields the same way. The Proxy API scraper plugin does exactly this:

Error handling for credentials

Always validate that credentials exist before using them, and raise IntegrationFailedError so the message surfaces as the node’s failure reason:

Next: Working with Files →

Read and create files from plugin nodes.