The Portfolio Creation endpoints allow you to create new portfolios with user signatures and from templates.
Generate Signature Request
Generates a message that must be signed by the user’s wallet to create a portfolio.
The Ethereum address of the user who will own the portfolio
Array of chain IDs where the portfolio will operate (e.g., [8453] for Base)
The account index (useful for supporting multiple portfolios from same address)
curl --request POST \
--url '/v1/portfolio/create/signature' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: your_api_key_here' \
--data '{
"userAddress": "0xYourWalletAddress",
"chainIds": [8453],
"accountIndex": 0
}'
{
"success": true,
"data": {
"userAddress": "0xYourWalletAddress",
"chainIds": [8453],
"accountIndex": 0,
"kernelVersion": "0.3.2",
"signatureAction": {
"reason": "portfolio-permission",
"type": "personal_sign",
"message": "I authorize Glider to manage my portfolio\n\n0x8ad4d95c3c3d0a1e87bfdb1d2401905db4a97d8e05e77d69e5d79397da128b81"
}
},
"correlationId": "corr_abc123",
"requestId": "req_xyz789",
"timestamp": "2023-05-21T12:34:56.789Z"
}
Create Portfolio
Creates a new portfolio using the signed message from the previous step.
The Ethereum address of the user who will own the portfolio
Array of chain IDs where the portfolio will operate
The kernel version (from signature request response)
The signature action object from the signature request response
The signature obtained from the user’s wallet
Optional template data to initialize the portfolio
curl --request POST \
--url '/v1/portfolio/create' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: your_api_key_here' \
--data '{
"userAddress": "0xYourWalletAddress",
"chainIds": [8453],
"accountIndex": 0,
"kernelVersion": "0.3.2",
"signatureAction": {
"reason": "portfolio-permission",
"type": "personal_sign",
"message": "I authorize Glider to manage my portfolio\n\n0x8ad4d95c3c3d0a1e87bfdb1d2401905db4a97d8e05e77d69e5d79397da128b81"
},
"signature": "0xYourSignatureFromWallet",
"templateData": {
"name": "70/30 ETH-USDC Portfolio",
"description": "A simple portfolio with 70% ETH and 30% USDC allocation",
"entry": {
"blockType": "weight",
"weightType": "specified-percentage",
"weightings": ["70", "30"],
"children": [
{
"blockType": "asset",
"assetId": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE:8453"
},
{
"blockType": "asset",
"assetId": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913:8453"
}
]
}
}
}'
{
"success": true,
"data": {
"portfolioId": "port_abc123",
"message": "Portfolio created successfully",
"vaults": [
{
"chainId": "8453",
"address": "0xPortfolioVaultAddress"
}
],
"template": {
"blueprintId": "tmpl_xyz789",
"editId": "edit_abc123",
"version": 1,
"name": "70/30 ETH-USDC Portfolio"
}
},
"correlationId": "corr_abc123",
"requestId": "req_xyz789",
"timestamp": "2023-05-21T12:34:56.789Z"
}
Create Portfolio from Template
Creates a new portfolio from a pre-defined template.
The ID of the template to use
The Ethereum address of the user who will own the portfolio
Array of chain IDs where the portfolio will operate
Custom name for the portfolio (overrides template name)
Custom description for the portfolio (overrides template description)
curl --request POST \
--url '/v1/portfolios/create-from-template' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: your_api_key_here' \
--data '{
"templateId": "tmpl_xyz789",
"userAddress": "0xYourWalletAddress",
"chainIds": [8453],
"name": "My Custom Template Portfolio",
"description": "Created from a template with custom name",
"accountIndex": 0
}'
{
"success": true,
"data": {
"portfolioId": "port_def456",
"message": "Portfolio created from template successfully",
"vaults": [
{
"chainId": "8453",
"address": "0xPortfolioVaultAddress"
}
],
"template": {
"blueprintId": "tmpl_xyz789",
"editId": "edit_def456",
"version": 1,
"name": "My Custom Template Portfolio"
}
},
"correlationId": "corr_abc123",
"requestId": "req_xyz789",
"timestamp": "2023-05-21T12:34:56.789Z"
}
Resign Portfolio Permission
Generates a new signable message for an existing portfolio. This is useful when session keys need to be refreshed.
The ID of the portfolio to resign
curl --request POST \
--url '/v1/portfolio/port_abc123/resign' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: your_api_key_here' \
--data '{}'
{
"success": true,
"data": {
"signatureAction": {
"reason": "portfolio-resign",
"type": "personal_sign",
"message": "I authorize Glider to manage my portfolio\n\n0x8ad4d95c3c3d0a1e87bfdb1d2401905db4a97d8e05e77d69e5d79397da128b81"
},
"signType": "personal_sign",
"userAddress": "0xYourWalletAddress",
"agentAddress": "0xAgentAddress",
"accountIndex": "0",
"chainIds": [8453],
"portfolioId": "port_abc123",
"portfolioAddresses": [
{
"chainId": 8453,
"address": "0xPortfolioVaultAddress"
}
]
},
"correlationId": "corr_abc123",
"requestId": "req_xyz789",
"timestamp": "2023-05-21T12:34:56.789Z"
}
Resubmit Signature
Submits a new signature for an existing portfolio to refresh session keys.
The signature obtained from the user’s wallet
The signature action object from the resign response
curl --request POST \
--url '/v1/portfolio/port_abc123/resubmit-signature' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: your_api_key_here' \
--data '{
"signature": "0xYourSignatureFromWallet",
"signatureAction": {
"reason": "portfolio-resign",
"type": "personal_sign",
"message": "I authorize Glider to manage my portfolio\n\n0x8ad4d95c3c3d0a1e87bfdb1d2401905db4a97d8e05e77d69e5d79397da128b81"
}
}'
{
"success": true,
"data": {
"portfolioId": "port_abc123",
"userAddress": "0xYourWalletAddress",
"message": "Portfolio signature resubmitted successfully",
"updatedAt": "2023-05-21T13:45:12.345Z",
"vaults": [
{
"chainId": 8453,
"address": "0xPortfolioVaultAddress"
}
]
},
"correlationId": "corr_abc123",
"requestId": "req_xyz789",
"timestamp": "2023-05-21T13:45:12.345Z"
}