Apillon CLI is a command-line interface for using Apillon Web3 services.
To be able to use Apillon CLI, you must register an account at Apillon.io, create a project and generate an API key with appropriate permissions. Also Node.js (version 16 or later) is required.
To install Apillon CLI run
npm install -g @apillon/cli
Afterwards you can use CLI with command
apillon <command> [options]
Alternately you don't need to install the Apillon CLI to use it. In that case run the desired command using npx
:
npx @apillon/cli <command> [options]
Note that when running without installation, you have to use
@apillon/cli
instead ofapillon
execution command.
--key <api key>
: Apillon API key (can be set via theAPILLON_API_KEY
environment variable).--secret <api secret>
: Apillon API secret (can be set via theAPILLON_API_SECRET
environment variable).--debug
: Output execution logs when running commands.-V
,--version
: Output the version number.
You can use environment variables to set an API key, and an API secret:
APILLON_API_KEY
: Apillon API key.APILLON_API_SECRET
: Apillon API secret.
If you have these variables set, you do not need to use the global options each time.
To display the help information for the CLI or a specific command, use the -h
or --help
option:
apillon -h
apillon hosting -h
npx @apillon/cli hosting deploy-website --help
For commands that return a list of results, for example apillon storage list-files
, or apillon hosting list-websites
, there are global list pagination options that are available to use:
--limit <integer>
: Page limit--order-by <string>
: Page order by (can be any property from the response data)--page <integer>
: Page number--search <string>
: Search by name or other object identifier
For example responses and for an overview of all properties, refer to the Apillon API wiki. Note: CLI responses may be dfferent from API responses.
The Apillon CLI currently supports the following commands:
Lists all websites associated with your project.
Example
apillon hosting list-websites --search "My-Website" --limit 1
Example response
{
"items": [
{
"createTime": "2023-10-25T10:41:06.000Z",
"updateTime": "2023-10-26T12:41:41.000Z",
"uuid": "5b908779-3687-4592-a073-9bebbf86afe2",
"name": "My Website",
"description": "My own website",
"domain": "https://my-website.com",
"bucketUuid": "47251013-37c6-4b30-be2b-8583dea25c4c",
"ipnsStaging": "k2k4r8ob2rf35wbmhhtzbq6nd4lhwv...",
"ipnsProduction": "k2k4r8pple7phwm9azqgxshxdzy..."
},
...
],
"total": 3
}
Retrieves information about a specific website.
Options
--uuid <string>
: UUID of the website to get details for.
Example
apillon hosting get-website --uuid "123e4567-e89b-12d3-a456-426655440000"
Deploys a website from a local folder directly to Apillon hosting production environment.
Options
<file-path>
: Path to the folder containing your website files.--uuid <string>
: UUID of the website to upload files to.-p, --preview
: Deploy to staging environment instead.
Example
apillon hosting deploy-website ./public_html --uuid "123e4567-e89b-12d3-a456-426655440000" -p
Uploads a local folder's contents to a website deployment bucket.
Options
<path>
: Path to the folder containing your website files.--uuid <string>
: UUID of the website to upload files to.
Example
apillon hosting upload ./public_html --uuid "123e4567-e89b-12d3-a456-426655440000"
Deploys a website to the specified environment, from files already uploaded to the hosting bucket.
Options
--uuid <string>
: UUID of the website to deploy.--env <integer>
: The environment to deploy to.
Available choices:
TO_STAGING = 1
STAGING_TO_PRODUCTION = 2
DIRECTLY_TO_PRODUCTION = 3
Example
apillon hosting start-deployment --uuid "123e4567-e89b-12d3-a456-426655440000" --env 1
Lists all deployments for a specific website.
Options
--uuid <string>
: UUID of the website to list deployments for.--status <integer>
: The status of the deployments (DeploymentStatus enum, optional).
Available choices:
INITIATED = 0
IN_PROCESS = 1
SUCCESSFUL = 10
FAILED = 100
--env <integer>
: The environment of the deployments (DeploymentStatus enum, optional).
Available choices:
STAGING = 2
PRODUCTION = 3
Example
apillon hosting list-deployments --uuid "58a16026-1356-405b-97f9-efcc9dfac1dd" --order-by createTime --desc true
Example response
{
"items": [
{
"createTime": "2023-11-14T12:09:20.000Z",
"updateTime": "2023-11-14T12:09:42.000Z",
"uuid": "9b677fe2-1bb1-44d9-8956-e7749452f02d",
"websiteUuid": "58a16026-1356-405b-97f9-efcc9dfac1dd",
"cid": "QmPPBMsFccJVaLwvdhSh3zMbfEvonxoNSBLVd1kWK34Nps",
"cidv1": "bafybeizpqaa5xb5r46d2voj35qtokhb3c3bekof...",
"environment": "DIRECTLY_TO_PRODUCTION",
"deploymentStatus": "SUCCESSFUL",
"size": 7162,
"number": 1
},
...
],
"total": 7
}
Retrieves information about a specific deployment.
Options
-w, --website-uuid <string>
: UUID of the website.-d, --deployment-uuid <string>
: UUID of the deployment
Example
apillon hosting get-deployment --website-uuid "123e4567-e89b-12d3-a456-426655440000" --deployment-uuid "987e6543-e21c-32f1-b123-426655441111"
Lists all storage buckets associated with your project.
Example
apillon storage list-buckets
Example response
{
"items": [
{
"createTime": "2023-11-15T09:56:53.000Z",
"updateTime": "2023-11-23T08:55:46.000Z",
"uuid": "91c57d55-e8e4-40b7-ad6a-81a82831bfb3",
"name": "My Storage Bucket",
"description": "For storing my images and videos",
"size": 23576
},
...
],
"total": 2
}
Retrieves objects (files and folders) from a specific bucket or bucket directory.
Options
-b, --bucket-uuid <string>
: UUID of the bucket to retrieve objects from.-d, --directory-uuid <string>
: UUID of the directory to retrieve objects from (optional, default root folder).--deleted
: Include objects deleted from the bucket.
Example
apillon storage list-objects --bucket-uuid "123e4567-e89b-12d3-a456-426655440000" --directory-uuid "987e6543-e21c-32f1-b123-426655441111"
Example response
{
"items": [
{
"createTime": "2023-11-23T08:55:45.000Z",
"updateTime": "2023-11-23T08:55:46.000Z",
"uuid": "14a7a891-877c-41ac-900c-7382347e1e77",
"name": "index.html",
"CID": "bafybeidzrd7p5ddj67j2mud32cbnze2c7b2pvbhn...",
"status": "AVAILABLE_ON_IPFS_AND_REPLICATED",
"directoryUuid": null,
"type": "FILE",
"link": "https://ipfs.apillon.io/ipfs/bafybeidzrd7p5ddj67j...",
"path": null,
"bucketUuid": "91c57d55-e8e4-40b7-ad6a-81a82831bfb3"
},
...
],
"total": 16
}
Retrieves files from a specific bucket.
Options
-b, --bucket-uuid <string>
: UUID of the bucket to retrieve files from.-s, --file-status <integer>
: Filter by file status (FileStatus enum, optional).
Available choices:
UPLOAD_REQUEST_GENERATED = 1
UPLOADED = 2
AVAILABLE_ON_IPFS = 3
AVAILABLE_ON_IPFS_AND_REPLICATED = 4
Example
apillon storage list-files --bucket-uuid "123e4567-e89b-12d3-a456-426655440000" -s 2
Example response
{
"items": [
{
"createTime": "2023-11-15T09:58:04.000Z",
"updateTime": "2023-11-15T09:58:10.000Z",
"name": "style.css",
"CID": "bafybeidzrd7p5ddj67j2mud32cbnze2c7b2pvbag...",
"status": "AVAILABLE_ON_IPFS_AND_REPLICATED",
"directoryUuid": null,
"type": "FILE",
"link": "https://ipfs.apillon.io/ipfs/bafybeidzrd7p...",
"path": null,
"bucketUuid": "91c57d55-e8e4-40b7-ad6a-81a82831bfb3"
},
...
],
"total": 10
}
Upload contents of a local folder to specified bucket.
Options
<folder-path>
: Path to the folder containing your files.-b, --bucket-uuid <string>
: UUID of the bucket to upload files to.-w, --wrap
: Wrap uploaded files to an IPFS directory-p, --path <string>
: Path to upload files to (e.g. main/subdir). Required when --wrap is supplied.--await
: await file CIDs to be resolved
Example
apillon storage upload ./my_folder --bucket-uuid "123e4567-e89b-12d3-a456-426655440000" --wrap --path "main/subdir"
Retrieves information about a specific file in a bucket.
Options
-b, --bucket-uuid <string>
: UUID of the bucket.-f, --file-uuid <string>
: UUID or CID of the file to retrieve.
Example
apillon storage get-file --bucket-uuid "123e4567-e89b-12d3-a456-426655440000" --file-uuid "file_uuid_or_cid"
Deletes a specific file from a bucket.
Options
-b, --bucket-uuid <string>
: UUID of the bucket.-f, --file-uuid <string>
: UUID or CID of the file to delete.
Example
apillon storage delete-file --bucket-uuid "123e4567-e89b-12d3-a456-426655440000" --file-uuid "file_uuid_or_cid"
Delete a directory from a storage bucket.
Options
-b, --bucket-uuid <string>
: UUID of the bucket.-d, --directory-uuid <string>
: UUID of the directoru to delete.
Example
apillon storage delete-directory --bucket-uuid "123e4567-e89b-12d3-a456-426655440000" --directory-uuid "2c84048c-49a1-4ed2-9e1e-8920806ae968"
Lists all IPNS records for a specific bucket.
Options
-b, --bucket-uuid <uuid>
: UUID of the bucket.
Example
apillon storage ipns list --bucket-uuid "123e4567-e89b-12d3-a456-426655440000"
Example response
{
"items": [
{
"createTime": "2023-12-06T12:29:09.000Z",
"updateTime": "2023-12-06T12:29:21.000Z",
"uuid": "80383a54-1d86-4761-a5e4-26a2fab474c9",
"name": "Images IPNS",
"description": "IPNS for images folder",
"ipnsName": "k2k4r8jp1jnlbe3qv...",
"ipnsValue": "/ipfs/QmUz4...",
"link": "https://ipfs.apillon.io/ipns/k2k4r8jp1jnlbe3qv...",
"bucketUuid": "a26184d7-acf5-4d6c-9195-465e3a7a5240"
},
{
"createTime": "2023-12-06T12:29:37.000Z",
"updateTime": "2023-12-06T12:29:52.000Z",
"uuid": "2045db5b-b347-4ea6-a4c0-4445e071180d",
"name": "JSON IPNS",
"description": "IPNS for metadata folder",
"ipnsName": "k2k4r8opkl3i2zq7bin8lis4...",
"ipnsValue": "/ipfs/QmUz5Z6RcMynfZWoC...",
"link": "https://ipfs.apillon.io/ipns/k2k4r8opkl3i2z...",
"bucketUuid": "a26184d7-acf5-4d6c-9195-465e3a7a5240"
}
],
"total": 2
}
Creates a new IPNS record for a specific bucket.
Options
-b, --bucket-uuid <uuid>
: UUID of the bucket.-n, --name <name>
: Name of the IPNS record.-d, --description <description>
: Description of the IPNS record (optional).-c, --cid <cid>
: CID to which this IPNS name will point.
Example
apillon storage ipns create --bucket-uuid "123e4567-e89b-12d3-a456-426655440000" --name "my-ipns-record" --cid "QmWX5CcNvnaVmgGBn4o82XW9uW1uLvsHQDdNrANrQeSdXm"
Retrieves information about a specific IPNS record.
Options
-b, --bucket-uuid <uuid>
: UUID of the bucket.-i, --ipns-uuid <uuid>
: UUID of the IPNS record.
Example
apillon storage ipns get --ipns-uuid "123e4567-e89b-12d3-a456-426655440000"
Publishes an IPNS record to IPFS and links it to a CID.
Options
-b, --bucket-uuid <uuid>
: UUID of the bucket.-i, --ipns-uuid <uuid>
: UUID of the IPNS record.-c, --cid <string>
: CID to which this IPNS name will point.
Example
apillon storage ipns publish --ipns-uuid "123e4567-e89b-12d3-a456-426655440000" --cid "QmWX5CcNvnaVmgGBn4o82XW9uW1uLvsHQDdNrANrQeSdXm"
Deletes an IPNS record from a specific bucket.
Options
-b, --bucket-uuid <uuid>
: UUID of the bucket.-i, --ipns-uuid <uuid>
: UUID of the IPNS record.
Example
apillon storage ipns delete --ipns-uuid "123e4567-e89b-12d3-a456-426655440000"
Lists all NFT collections owned by the project related to the API key.
Options
--status <integer>
: UUID of the collection to retrieve (CollectionStatus enum, optional).
Available choices:
CREATED = 0
DEPLOY_INITIATED = 1
DEPLOYING = 2
DEPLOYED = 3
TRANSFERRED = 4
FAILED = 5
Example
apillon nfts list-collections --status 3
Example response
{
"items": [
{
"createTime": "2023-11-20T10:21:12.000Z",
"updateTime": "2023-11-20T14:12:33.000Z",
"uuid": "2cda3a9b-01b1-4b5e-9709-7087129d55d0",
"symbol": "SE",
"name": "SpaceExplorers",
"description": "A collection of unique space exploration NFTs.",
"collectionType": "GENERIC",
"maxSupply": 1000,
"baseUri": "https://moonbeamnfts.com/collections/spaceexplorers/",
"baseExtension": ".json",
"isSoulbound": false,
"isRevokable": false,
"drop": false,
"dropPrice": 0.05,
"dropStart": 1679875200,
"dropReserve": 100,
"royaltiesFees": 5,
"royaltiesAddress": "0xaz5Bh6E56c5d3B58c944542de2bF18E7F65eED82",
"collectionStatus": "TRANSFERRED",
"contractAddress": "0x4e22162A6d0c91a088Cb57A72aB976ccA2A96B25",
"transactionHash": null,
"deployerAddress": "0xba015fgc6d80378a9a95f1687e9960857593983b",
"chain": "MOONBASE"
}
],
"total": 1
}
Retrieves information about a specific NFT collection.
Options
--uuid <collection-uuid>
: UUID of the collection to retrieve.
Example
apillon nfts get-collection --uuid "123e4567-e89b-12d3-a456-426655440000"
Creates a new NFT collection. The JSON file needs to have the property structure as type ICreateCollection for EVM and ICreateSubstrateCollection for Substrate collections. An example object can be also seen on the NFT SDK docs.
Options
<file-path>
: Path to the JSON data file for the new collection.
Example
apillon nfts create-collection ./nft-data.json
Mints NFTs for a collection with a specific UUID.
Options
--uuid <collection-uuid>
: UUID of the collection to mint NFTs to.-a, --address <string>
: Address which will receive minted NFTs.-q --quantity <integer>
: Number of NFTs to mint. (default 1).
Example
apillon nfts mint-nft --uuid "123e4567-e89b-12d3-a456-426655440000" --address "0xdAC17F958D2ee523a2206206994597C13D831ec7" --quantity 2
Nest mints NFT child collection to a parent collection with a specific UUID and parent NFT with id.
Options
-c, --parent-collection-uuid <collection-uuid>
: Parent collection UUID to which child NFTs will be minted to.-p, --parent-nft-id <string>
: Parent collection NFT id to which child NFTs will be minted to.-q, --quantity <integer>
: Number of child NFTs to mint (default 1).
Example
apillon nfts nest-mint-nft --parent-collection-uuid "123e4567-e89b-12d3-a456-426655440000" --parent-nft-id 5 --quantity 2
Burns an NFT for a collection with a specific UUID.
Options
--uuid <collection-uuid>
: Collection UUID.-t, --token-id <integer>
: NFT id which will be burned.
Example
apillon nfts burn-nft --uuid "123e4567-e89b-12d3-a456-426655440000" --token-id 123
Transfers NFT collection ownership to a new wallet address.
Options
--uuid <collection-uuid>
: Collection UUID.-a, --address <string>
: Address which you want to transfer collection ownership to.
Example
apillon nfts transfer-collection --uuid "123e4567-e89b-12d3-a456-426655440000" --address "0xdAC17F958D2ee523a2206206994597C13D831ec7"
Lists NFT transactions for a specific collection UUID.
Options
--uuid <collection-uuid>
: Collection UUID.--status <integer>
: Transaction status (TransactionStatus enum, optional).
Available choices:
PENDING = 1
CONFIRMED = 2
FAILED = 3
ERROR = 4
--type <integer>
: Transaction type (TransactionType enum, optional).
Available choices:
DEPLOY_CONTRACT = 1
TRANSFER_CONTRACT_OWNERSHIP = 2
MINT_NFT = 3
SET_COLLECTION_BASE_URI = 4
BURN_NFT = 5
NEST_MINT_NFT = 6
Example
apillon nfts list-transactions --uuid "123e4567-e89b-12d3-a456-426655440000"
Example response
{
"items": [
{
"createTime": "2023-11-20T10:21:22.000Z",
"updateTime": "2023-11-20T10:23:31.000Z",
"chainId": "MOONBEAM",
"transactionType": "DEPLOY_CONTRACT",
"transactionStatus": "CONFIRMED",
"transactionHash": "0xab99e630f9475df92768b1e5d73f4..."
},
{
"createTime": "2023-11-20T11:55:13.000Z",
"updateTime": "2023-11-20T11:57:31.000Z",
"chainId": "MOONBEAM",
"transactionType": "MINT_NFT",
"transactionStatus": "CONFIRMED",
"transactionHash": "0x1ecfeeaeddfa0a39fc2ae1ec755d27..."
},
...
],
"total": 4
}
CLI is particularly useful for CI/CD builds and pipelines.
Here's an example of how you can use the CLI tool in a CI/CD tool like GitHub Actions:
name: Deploy Website
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- name: Create dist folder
run: mkdir -p dist
- name: Copy files
run: |
cp *.html dist/
cp -r images dist/
cp -r style dist/
cp -r js dist/
####
## if you are using a framework for building web app, you can replace previous two step with the
## appropriate command for generating static webpage, like an example bellow.
## Find the correct command in your framework documentation. You may need to to change the
## name of the source folder in the last step (CLI call)
####
# - name: Build app
# run: npm run build
- name: Deploy website
env:
APILLON_API_KEY: ${{ secrets.APILLON_API_KEY }}
APILLON_API_SECRET: ${{ secrets.APILLON_API_SECRET }}
WEBSITE_UUID: ${{ secrets.WEBSITE_UUID }}
run: npx --yes @apillon/cli hosting deploy-website ./dist --uuid $WEBSITE_UUID --key $APILLON_API_KEY --secret $APILLON_API_SECRET
# Or alternatively you can use the run configuration below
# run: |
# npm i -g @apillon/cli
# apillon hosting deploy-website ./dist --uuid $WEBSITE_UUID --key $APILLON_API_KEY --secret $APILLON_API_SECRET
In this example, the GitHub Actions workflow is triggered when a push event occurs on the master branch. The workflow performs the following steps:
- Checks out the repository.
- Sets up Node.js with version 16.
- Creates a dist folder to store the website files.
- Copies the necessary files (HTML, images, styles, and JavaScript) to the dist folder.
- Deploys the website using the CLI tool. The required environment variables (APILLON_API_KEY, APILLON_API_SECRET, and WEBSITE_UUID) are provided as secrets. The npx command ensures that the latest version of the CLI tool is used.
Make sure to setup secret variables with the values from Apillon platform.
That's it! You can now use this example as a starting point to deploy your website using the CLI tool in a CI/CD pipeline with GitHub Actions.
You can also check a working example on Github