Archived docs Get your API Key
Get started
Tutorials
Guides
Reference
Help for AI agents
🤖 AI Assistant

Connections

A Connection is a saved set of credentials that JSON2Video can use to integrate with an external service — your ElevenLabs account, an FTP server, a Replicate API token, an Azure subscription. Instead of putting credentials in every API call, you save them once in the dashboard and reference them by ID in your movie JSON.

Connections live at json2video.com/dashboard/connections.

TODO: capture screenshot of the connections panel with the "Add new connection" dialog open.

Why use Connections

  • Security: credentials never appear in API requests, logs, or your codebase. Sensitive fields are encrypted at rest.
  • Reuse: one connection serves any number of renders.
  • Rotation: rotate a key once in the dashboard; every workflow using the connection picks up the new key on the next render.
  • Auditing: see exactly what credentials your account has stored.

Connection types

Currently supported:

  • ElevenLabs — bring your own ElevenLabs API key for voice generation.
  • Replicate — your Replicate API token for image / video generation.
  • Fal — your Fal API key.
  • Azure — Azure Speech subscription credentials.
  • Black Forest Labs (Flux) — direct BFL API key.
  • FTP / SFTP — host, port, username, password for export destinations.
  • Webhook — saved webhook endpoint with optional auth header.
  • Email — pre-configured email destination (sender + recipient).

The list expands over time — check the dashboard for the current set.

Creating a connection (ElevenLabs example)

  1. Open json2video.com/dashboard/connections.
  2. Click Add new connection.
  3. Choose ElevenLabs from the type dropdown.
  4. Give it an ID — this is what you'll reference in your JSON (e.g. my-elevenlabs). Use lower-case, no spaces.
  5. Paste your ElevenLabs API key in the API key field.
  6. Click Save. The connection is encrypted and stored.

The list view now shows your new connection. Click the row to view non-sensitive fields; the API key is masked.

Using a connection in your movie JSON

Reference the connection ID on the relevant element:

{
  "type": "voice",
  "model": "elevenlabs",
  "connection": "my-elevenlabs",
  "voice": "Adam",
  "text": "Hello!"
}

For export destinations, reference the connection on the destination object:

{
  "exports": [{
    "destinations": [{
      "id": "my-sftp",
      "file": "render-__yyyy__-__mm__-__dd__.mp4"
    }]
  }]
}

When the engine sees connection or destination id, it loads the credentials from the encrypted store at render time. Your API request body never contains the actual credentials.

Overriding connection fields

You can override any single field of a connection inline. The engine merges your override on top of the saved connection:

{
  "exports": [{
    "destinations": [{
      "id": "my-sftp",
      "remote-path": "/customer/acme/__yyyy__/"
    }]
  }]
}

This uses my-sftp's host, port, username, and password, but writes to a customer-specific subdirectory. Most fields can be overridden; the type field cannot.

Best practices

  • One connection per logical service. Don't share an FTP connection between production and staging; create two.
  • Use descriptive IDs. my-elevenlabs-prod beats conn1.
  • Rotate keys regularly. If a Connection is compromised, delete it from the dashboard; every workflow using it fails fast.
  • Don't put connection IDs in public templates. If you share a template, the recipient will need to create their own connection with the same ID — or you'll need to instruct them to update the JSON.

Editing and deleting

From the connections list, click the row menu ():

  • Edit — change non-sensitive fields and re-enter sensitive ones if you want to rotate.
  • Delete — removes the connection. Workflows referencing the ID will fail until you recreate it or update the JSON.

See also