Provider Permissions
Learn which API key permissions are required for each provider and how to create them.
Overview
Deploynix connects to multiple external providers to provision servers, manage DNS, deploy code, and store backups. Each provider requires an API key or token with specific permissions. This guide covers exactly what's needed and how to set it up.
Principle of Least Privilege
Where possible, create API keys with only the permissions listed below. Avoid using root or full-access keys. All credentials are encrypted at rest by Deploynix.
Server Providers
Server provider credentials allow Deploynix to create, manage, and delete servers on your behalf. Navigate to Settings → Server Providers to add credentials.
DigitalOcean
Credential required: API Token
Required permissions
- Full read/write access (DigitalOcean tokens are either read-only or full access — select Full Access)
What Deploynix does with this token
- Create, delete, reboot, and rebuild Droplets
- List regions, sizes, and images
- Upload and manage SSH keys
How to create the token
- Log in to the DigitalOcean Control Panel
- Navigate to API in the left sidebar
- Click Generate New Token
- Give it a descriptive name (e.g.
deploynix) - Select Full Access under scopes
- Click Generate Token and copy the token immediately — it won't be shown again
Vultr
Credential required: API Key
Required permissions
- Full access (Vultr API keys do not support granular scopes)
What Deploynix does with this key
- Create, delete, reboot, and reinstall instances
- List regions, plans, and OS images
- Upload and manage SSH keys
How to create the key
- Log in to the Vultr Customer Portal
- Navigate to Account → API
- Click Enable API if not already enabled
- Copy the API key shown
- Optionally restrict access by IP under Access Control for added security
Linode (Akamai Cloud)
Credential required: Personal Access Token
Required permissions
- Linodes — Read/Write
- Images — Read/Write
- IPs — Read/Write
- Account — Read Only
What Deploynix does with this token
- Create, delete, reboot, and rebuild Linode instances
- List regions, Linode types, and images
- Set authorized SSH keys and root password during creation
How to create the token
- Log in to Akamai Cloud Manager
- Click your username in the top right and select API Tokens
- Click Create a Personal Access Token
- Give it a label (e.g.
deploynix) - Set an expiry or select Never
- Enable the permissions listed above
- Click Create Token and copy it immediately
Hetzner Cloud
Credential required: API Token
Required permissions
- Read & Write (Hetzner tokens are scoped per project and are either read-only or read/write)
What Deploynix does with this token
- Create, delete, reboot, and rebuild servers
- List locations and server types
- Upload and manage SSH keys
How to create the token
- Log in to the Hetzner Cloud Console
- Select the project you want Deploynix to manage (or create a new one)
- Navigate to Security → API Tokens
- Click Generate API Token
- Give it a description (e.g.
deploynix) - Select Read & Write
- Click Generate API Token and copy it immediately
Hetzner Project Scope
Hetzner API tokens are scoped to a single project. If you want to manage servers in multiple projects, you'll need a separate token for each.
Amazon Web Services (AWS)
Credentials required: Access Key ID + Secret Access Key
Required IAM permissions
Create a dedicated IAM user with the following policy attached:
- ec2:RunInstances — Launch instances
- ec2:TerminateInstances — Delete instances
- ec2:RebootInstances — Reboot instances
- ec2:DescribeInstances — List and inspect instances
- ec2:DescribeRegions — List available regions
- ec2:DescribeInstanceTypes — List instance types
- ec2:DescribeImages — List AMIs
- ec2:DescribeAvailabilityZones — List availability zones
- ec2:ImportKeyPair — Upload SSH keys
- ec2:DeleteKeyPair — Remove SSH keys
- ec2:CreateSecurityGroup — Create security groups
- ec2:AuthorizeSecurityGroupIngress — Add inbound rules
- ec2:DescribeSecurityGroups — List security groups
- ec2:CreateReplaceRootVolumeTask — Replace root volumes (for OS reinstall)
- ec2:DescribeReplaceRootVolumeTasks — Monitor volume replacements
- ec2:CreateTags — Tag resources
Minimal IAM Policy (JSON)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances",
"ec2:TerminateInstances",
"ec2:RebootInstances",
"ec2:DescribeInstances",
"ec2:DescribeRegions",
"ec2:DescribeInstanceTypes",
"ec2:DescribeImages",
"ec2:DescribeAvailabilityZones",
"ec2:ImportKeyPair",
"ec2:DeleteKeyPair",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:DescribeSecurityGroups",
"ec2:CreateReplaceRootVolumeTask",
"ec2:DescribeReplaceRootVolumeTasks",
"ec2:CreateTags"
],
"Resource": "*"
}
]
}
How to create the credentials
- Log in to the AWS IAM Console
- Navigate to Users → Create user
- Enter a username (e.g.
deploynix) and click Next - Select Attach policies directly
- Click Create policy, paste the JSON above, and save it
- Attach the policy to the user and click Create user
- Navigate to the user → Security credentials → Create access key
- Select Third-party service as the use case
- Copy the Access Key ID and Secret Access Key
Never use your root AWS credentials
Always create a dedicated IAM user for Deploynix. Using root credentials gives unrestricted access to your entire AWS account.
DNS Providers
DNS provider credentials are used for DNS-01 challenges when issuing wildcard SSL certificates. Navigate to Settings → DNS Providers to add credentials.
Cloudflare
Credential required: API Token (not Global API Key)
Required permissions
- Zone → DNS → Edit
- Zone → Zone → Read (to list and look up zones)
What Deploynix does with this token
- List zones to find your domain
- Create TXT records for DNS-01 certificate challenges
- Delete TXT records after certificate issuance
How to create the token
- Log in to the Cloudflare Dashboard
- Click your profile icon → My Profile → API Tokens
- Click Create Token
- Use the Edit zone DNS template, or create a custom token:
- Set Permissions: Zone → DNS → Edit
- Set Zone Resources: Include → All Zones (or select specific zones)
- Click Continue to summary → Create Token
- Copy the token immediately
Use API Tokens, not Global API Keys
Cloudflare API Tokens are scoped and more secure than the Global API Key which grants full account access. Always prefer API Tokens.
DigitalOcean (DNS)
Credential required: API Token (same type as the server provider token)
Required permissions
- Full access (DigitalOcean tokens don't support granular scopes)
What Deploynix does with this token
- List domains managed in your DigitalOcean account
- Create and delete TXT records for DNS-01 challenges
You can reuse the same token you created for the DigitalOcean server provider if your DNS is also managed there.
Vultr (DNS)
Credential required: API Key (same type as the server provider key)
Required permissions
- Full access (Vultr API keys don't support granular scopes)
What Deploynix does with this key
- List domains managed in your Vultr account
- Create and delete TXT records for DNS-01 challenges
You can reuse the same key you created for the Vultr server provider if your DNS is also managed there.
AWS Route 53
Credentials required: Access Key ID + Secret Access Key + Region
Required IAM permissions
- route53:ListHostedZones — List hosted zones
- route53:GetHostedZone — Get zone details
- route53:ChangeResourceRecordSets — Create and delete DNS records
- route53:ListResourceRecordSets — List DNS records
Minimal IAM Policy for Route 53 (JSON)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:GetHostedZone",
"route53:ChangeResourceRecordSets",
"route53:ListResourceRecordSets"
],
"Resource": "*"
}
]
}
How to create the credentials
- Follow the same IAM user creation steps from the AWS server provider section
- Attach the Route 53 policy above instead of (or in addition to) the EC2 policy
- If you already have an IAM user for EC2, you can attach both policies to the same user
Git Providers
Git provider tokens allow Deploynix to list repositories, manage deploy keys, and set up webhooks for automatic deployments. Navigate to Settings → Git Providers to connect.
GitHub
Credential required: Personal Access Token (Fine-grained or Classic)
Required scopes (Classic token)
- repo — Full control of private repositories (list repos, manage deploy keys)
- admin:public_key — Manage deploy keys
Required permissions (Fine-grained token)
- Repository access — Select the repositories you want to deploy
- Contents — Read-only
- Metadata — Read-only
- Administration — Read and write (for deploy keys)
- Webhooks — Read and write (for automatic deployments)
How to create the token
- Log in to GitHub
- Navigate to Settings → Developer settings → Personal access tokens
- Choose Fine-grained tokens (recommended) or Tokens (classic)
- Click Generate new token
- Give it a name (e.g.
deploynix) and set an expiration - Select the permissions listed above
- Click Generate token and copy it immediately
GitLab
Credential required: Personal Access Token
Required scopes
- api — Full API access (list projects, manage deploy keys, webhooks)
- read_user — Read user profile information
How to create the token
- Log in to GitLab (or your self-hosted instance)
- Navigate to User Settings → Access Tokens
- Click Add new token
- Give it a name (e.g.
deploynix) and set an expiration - Select the api and read_user scopes
- Click Create personal access token and copy it immediately
Self-Hosted GitLab
When connecting a self-hosted GitLab instance, you'll also need to provide your instance's base URL (e.g. https://gitlab.yourcompany.com).
Bitbucket
Credential required: App Password (not a Personal Access Token)
Required permissions
- Repositories → Read
- Repositories → Admin (for deploy keys)
- Webhooks → Read and write
How to create the app password
- Log in to Bitbucket
- Click your avatar → Personal settings
- Navigate to App passwords under "Access management"
- Click Create app password
- Give it a label (e.g.
deploynix) - Select the permissions listed above
- Click Create and copy the password immediately
Backup Providers
Backup provider credentials allow Deploynix to store and retrieve database and application backups. Navigate to Settings → Backup Providers to add credentials.
AWS S3
Credentials required: Access Key + Secret Key + Region + Bucket Name
Required IAM permissions
- s3:PutObject — Upload backups
- s3:GetObject — Download backups
- s3:DeleteObject — Delete old backups
- s3:ListBucket — List backup files
Minimal IAM Policy for S3 Backups (JSON)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME"
}
]
}
How to set up
- Create an S3 bucket in the AWS S3 Console
- Create an IAM user with the policy above (replace
YOUR-BUCKET-NAMEwith your actual bucket name) - Generate an access key for the IAM user
- Enter the Access Key, Secret Key, region, and bucket name in Deploynix
DigitalOcean Spaces
Credentials required: Spaces Access Key + Secret Key + Region + Bucket + Endpoint
Required permissions
- Full read/write access to the Space (Spaces keys grant access to all Spaces in your account)
How to set up
- Create a Space in the DigitalOcean Control Panel
- Navigate to API → Spaces Keys
- Click Generate New Key
- Copy the Key and Secret
- The endpoint format is
https://REGION.digitaloceanspaces.com(e.g.https://nyc3.digitaloceanspaces.com)
Wasabi
Credentials required: Access Key + Secret Key + Region + Bucket
Required permissions
- Full read/write access to the bucket
How to set up
- Log in to the Wasabi Console
- Create a bucket in your preferred region
- Navigate to Access Keys and create a new key
- Copy the Access Key and Secret Key
- The endpoint is automatically derived from the region (e.g.
https://s3.us-east-1.wasabisys.com)
Custom S3-Compatible
Credentials required: Access Key + Secret Key + Region + Bucket + Endpoint
Required permissions
- Read/write access to the bucket (PutObject, GetObject, DeleteObject, ListBucket)
Any S3-compatible storage provider (e.g. MinIO, Backblaze B2, Cloudflare R2) can be used. Provide the endpoint URL, credentials, and bucket name. Enable Path-style URLs if your provider requires it.
Quick Reference
A summary of all provider credentials at a glance:
| Provider | Type | Credential | Key Permission |
|---|---|---|---|
| DigitalOcean | Server | API Token | Full Access |
| Vultr | Server | API Key | Full Access |
| Linode | Server | Personal Access Token | Linodes, Images, IPs: R/W |
| Hetzner | Server | API Token | Read & Write |
| AWS EC2 | Server | Access Key + Secret | EC2 (see IAM policy) |
| Cloudflare | DNS | API Token | Zone:DNS:Edit |
| DigitalOcean | DNS | API Token | Full Access |
| Vultr | DNS | API Key | Full Access |
| AWS Route 53 | DNS | Access Key + Secret | Route 53 (see IAM policy) |
| GitHub | Git | Personal Access Token | repo, admin:public_key |
| GitLab | Git | Personal Access Token | api, read_user |
| Bitbucket | Git | App Password | Repos: R + Admin, Webhooks: R/W |
| AWS S3 | Backup | Access Key + Secret | S3 bucket R/W (see IAM policy) |
| DO Spaces | Backup | Spaces Key + Secret | Full Access |
| Wasabi | Backup | Access Key + Secret | Bucket R/W |
| Custom S3 | Backup | Access Key + Secret | Bucket R/W |
Credentials Are Secure
All provider credentials are encrypted at rest using Laravel's encryption. They are never stored in plain text and are not exposed in API responses.