@elevasis/sdk 0.4.4 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.cjs +62 -5
- package/package.json +12 -11
- package/reference/_index.md +53 -0
- package/reference/cli/index.mdx +496 -0
- package/reference/deployment/api.mdx +296 -0
- package/reference/deployment/index.mdx +152 -0
- package/reference/documentation/index.mdx +91 -0
- package/reference/getting-started/index.mdx +124 -0
- package/reference/getting-started/project-structure.mdx +148 -0
- package/reference/index.mdx +105 -0
- package/reference/platform-tools/examples.mdx +186 -0
- package/reference/platform-tools/index.mdx +141 -0
- package/reference/resources/index.mdx +288 -0
- package/reference/resources/patterns.mdx +340 -0
- package/reference/resources/types.mdx +206 -0
- package/reference/roadmap/index.mdx +146 -0
- package/reference/runtime/index.mdx +140 -0
- package/reference/runtime/limits.mdx +76 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Project Structure
|
|
3
|
+
description: Each file scaffolded by elevasis init and its purpose in the development workflow
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`elevasis init` creates a complete project structure. This page explains what each file does and when you will interact with it.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Source Files
|
|
11
|
+
|
|
12
|
+
### `src/index.ts`
|
|
13
|
+
|
|
14
|
+
Your resource definitions live here. This file must export an `OrganizationResources` object as its default export. The scaffolded file contains a working echo workflow that demonstrates the `z.infer` pattern for Zod schema types.
|
|
15
|
+
|
|
16
|
+
Every resource you add -- workflows and agents -- is registered through this default export.
|
|
17
|
+
|
|
18
|
+
### `elevasis.config.ts`
|
|
19
|
+
|
|
20
|
+
Project-level configuration. The scaffolded file contains commented-out options (`defaultStatus`, `dev.port`) so you can discover available settings without having to look them up. Leave this file minimal; the platform provides sensible defaults.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Documentation
|
|
25
|
+
|
|
26
|
+
### `docs/index.mdx`
|
|
27
|
+
|
|
28
|
+
The entry point for your project's documentation. Documentation files in `docs/` are deployed alongside your code during `elevasis deploy` and rendered in the Elevasis platform UI.
|
|
29
|
+
|
|
30
|
+
Use MDX frontmatter to set page metadata:
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
---
|
|
34
|
+
title: Overview
|
|
35
|
+
description: Documentation for this project
|
|
36
|
+
order: 0
|
|
37
|
+
---
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Add more pages by creating additional `.mdx` files in `docs/`. Nested directories create sections: `docs/guides/setup.mdx` becomes a `guides/setup` page under your deployment's documentation.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Configuration Files
|
|
45
|
+
|
|
46
|
+
### `.env`
|
|
47
|
+
|
|
48
|
+
Contains your `ELEVASIS_API_KEY`. This file is gitignored. Never commit it.
|
|
49
|
+
|
|
50
|
+
### `.env.example`
|
|
51
|
+
|
|
52
|
+
A git-safe template showing which variables are needed:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
ELEVASIS_API_KEY=sk_your_key_here
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Commit this file so collaborators know what to configure.
|
|
59
|
+
|
|
60
|
+
### `.npmrc`
|
|
61
|
+
|
|
62
|
+
Sets `auto-install-peers = true`. The SDK uses Zod as a peer dependency, so this ensures Zod installs automatically.
|
|
63
|
+
|
|
64
|
+
### `tsconfig.json`
|
|
65
|
+
|
|
66
|
+
App-focused TypeScript configuration. It does not include `declaration` or `declarationMap` settings because your project is a deployable application, not a library.
|
|
67
|
+
|
|
68
|
+
### `.gitignore`
|
|
69
|
+
|
|
70
|
+
Pre-configured to exclude:
|
|
71
|
+
- `.env` -- API key
|
|
72
|
+
- `__elevasis_worker.ts` -- temporary file generated during deployment
|
|
73
|
+
- `.claude/settings.local.json` -- local Claude Code overrides
|
|
74
|
+
- `.claude/profile.json` -- your personal onboarding profile
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Claude Code Integration
|
|
79
|
+
|
|
80
|
+
The `.claude/` directory and `CLAUDE.md` give Claude Code full awareness of the SDK, CLI, and your project structure from the first session.
|
|
81
|
+
|
|
82
|
+
### `CLAUDE.md`
|
|
83
|
+
|
|
84
|
+
The most important file for AI-assisted development. It provides Claude Code with:
|
|
85
|
+
|
|
86
|
+
- **Project orientation** -- what an Elevasis SDK project is and how it works
|
|
87
|
+
- **Project structure** -- which files contain resources, documentation, and configuration
|
|
88
|
+
- **SDK patterns** -- working code examples for resource definitions, Zod schemas, and the `OrganizationResources` export
|
|
89
|
+
- **CLI reference** -- all commands with flags (`check`, `deploy`, `exec`, `resources`, `executions`, `execution`, `deployments`, `env list/set/remove`)
|
|
90
|
+
- **Development rules** -- conventions the agent should enforce (source in `src/`, docs in `docs/`, use `@elevasis/sdk` types only)
|
|
91
|
+
|
|
92
|
+
Do not remove or heavily edit `CLAUDE.md`. It is the primary context source that makes the slash commands work well.
|
|
93
|
+
|
|
94
|
+
### `.claude/settings.json`
|
|
95
|
+
|
|
96
|
+
Sets `autoCompact: false`. This prevents Claude Code from automatically compacting context during long sessions, which can lose important earlier context about your project.
|
|
97
|
+
|
|
98
|
+
### `.claude/profile.json`
|
|
99
|
+
|
|
100
|
+
Created automatically on your first Claude Code session. The agent runs a one-time onboarding flow asking about your organization, project goals, and experience level. Answers are stored here and used to personalize subsequent sessions.
|
|
101
|
+
|
|
102
|
+
This file is gitignored -- it is personal to you and not shared with collaborators.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Slash Commands
|
|
107
|
+
|
|
108
|
+
The `.claude/commands/` directory contains three commands covering the core development loop. Invoke them in Claude Code with `/docs`, `/resource`, and `/deploy`.
|
|
109
|
+
|
|
110
|
+
### `/docs` -- Documentation Assistant
|
|
111
|
+
|
|
112
|
+
Helps you write and maintain documentation in `docs/`. Three operations:
|
|
113
|
+
|
|
114
|
+
- **No arguments** -- Review existing `docs/` files, identify undocumented resources and gaps, suggest improvements
|
|
115
|
+
- **`create <page-name>`** -- Scaffold a new documentation page with correct frontmatter, populated from your resource definitions
|
|
116
|
+
- **`review`** -- Check all `docs/` files for accuracy against the actual code in `src/`, flag mismatches between documented schemas and implementation
|
|
117
|
+
|
|
118
|
+
### `/resource` -- Resource Scaffolding
|
|
119
|
+
|
|
120
|
+
Scaffolds new workflow definitions with proper types, Zod schemas, and step structure. Three operations:
|
|
121
|
+
|
|
122
|
+
- **`workflow <name>`** -- Single-step workflow with Zod input/output schemas, config object, contract, step handler, and addition to the `OrganizationResources` export
|
|
123
|
+
- **`multi-step <name>`** -- Multi-step workflow with `StepType.LINEAR` or `StepType.CONDITIONAL`, connected steps, and per-step schemas
|
|
124
|
+
- **`tool-step <name>`** -- Step that calls a platform tool via `platform.call()` with `PlatformToolError` error handling and a credential note
|
|
125
|
+
|
|
126
|
+
### `/deploy` -- Deployment Assistant
|
|
127
|
+
|
|
128
|
+
Guides you through validation and deployment. Two operations:
|
|
129
|
+
|
|
130
|
+
- **No arguments** -- Runs `elevasis check`, reports any validation errors, then runs `elevasis deploy` if check passes. Analyzes failure output and suggests fixes if the deploy fails
|
|
131
|
+
- **`status`** -- Runs `elevasis deployments` and `elevasis resources` to show current deployment state
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## File Reference
|
|
136
|
+
|
|
137
|
+
| File | When You Edit It |
|
|
138
|
+
|------|-----------------|
|
|
139
|
+
| `src/index.ts` | Adding or modifying resources |
|
|
140
|
+
| `docs/index.mdx` | Updating project documentation |
|
|
141
|
+
| `elevasis.config.ts` | Changing project-level settings |
|
|
142
|
+
| `.env` | Adding environment variables |
|
|
143
|
+
| `CLAUDE.md` | Rarely -- only to add project-specific context |
|
|
144
|
+
| `.claude/commands/*.md` | Rarely -- commands work well as scaffolded |
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
**Last Updated:** 2026-02-25
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Elevasis SDK
|
|
3
|
+
description: Build and deploy workflows, agents, and resources with the Elevasis SDK
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`@elevasis/sdk` lets you build workflows, agents, and resources in TypeScript and deploy them to the Elevasis platform with a single command. The developer experience is Vercel-style: write TypeScript, validate locally, deploy -- the platform handles execution, tool access, and observability. You never manage infrastructure. Zod 4.1 is the only peer dependency.
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
npm install @elevasis/sdk
|
|
12
|
+
elevasis init
|
|
13
|
+
elevasis deploy
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
After `elevasis init`, your project is scaffolded with a working echo workflow, config file, TypeScript setup, and a `CLAUDE.md` that gives Claude Code full awareness of the SDK. After `elevasis deploy`, your resources appear in AI Studio and are available to run immediately.
|
|
17
|
+
|
|
18
|
+
Here is a minimal workflow definition:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { WorkflowDefinition, OrganizationResources } from '@elevasis/sdk';
|
|
22
|
+
import { z } from 'zod';
|
|
23
|
+
|
|
24
|
+
const greetInput = z.object({ name: z.string() });
|
|
25
|
+
const greetOutput = z.object({ message: z.string() });
|
|
26
|
+
|
|
27
|
+
type GreetInput = z.infer<typeof greetInput>;
|
|
28
|
+
type GreetOutput = z.infer<typeof greetOutput>;
|
|
29
|
+
|
|
30
|
+
const greetWorkflow: WorkflowDefinition = {
|
|
31
|
+
id: 'greet',
|
|
32
|
+
name: 'Greet',
|
|
33
|
+
inputSchema: greetInput,
|
|
34
|
+
outputSchema: greetOutput,
|
|
35
|
+
steps: [
|
|
36
|
+
{
|
|
37
|
+
id: 'greet-step',
|
|
38
|
+
name: 'Build greeting',
|
|
39
|
+
handler: async (input: GreetInput): Promise<GreetOutput> => {
|
|
40
|
+
return { message: `Hello, ${input.name}!` };
|
|
41
|
+
},
|
|
42
|
+
next: null,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const resources: OrganizationResources = {
|
|
48
|
+
workflows: [greetWorkflow],
|
|
49
|
+
};
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## What You Can Build
|
|
53
|
+
|
|
54
|
+
- **Workflows** -- Step-based automation with typed inputs and outputs. Steps can be linear, conditional, or branching. Each step is a plain async function. Workflows are the primary resource type and are fully supported.
|
|
55
|
+
- **Agents** -- Autonomous AI resources with access to platform tools. Agent definitions are accepted by the SDK and appear in the registry, but autonomous agent execution (multi-turn tool use loops) is deferred -- see Known Limitations below.
|
|
56
|
+
|
|
57
|
+
## Platform Tools
|
|
58
|
+
|
|
59
|
+
Inside any workflow step, import `platform` from `@elevasis/sdk/worker` to call platform tools:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
import { platform } from '@elevasis/sdk/worker';
|
|
63
|
+
|
|
64
|
+
const result = await platform.call({
|
|
65
|
+
tool: 'gmail',
|
|
66
|
+
method: 'send',
|
|
67
|
+
params: { to: 'user@example.com', subject: 'Hello', body: 'World' },
|
|
68
|
+
credential: 'my-gmail-credential',
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
The platform exposes 70+ tools across 12 integration adapters -- Gmail, Slack, HubSpot, Notion, and more. Credentials are managed server-side; API keys never cross the execution boundary. LLM calls are also available via `platform.call({ tool: 'llm', ... })` with API keys resolved from platform environment variables.
|
|
73
|
+
|
|
74
|
+
See [Platform Tools](platform-tools/index.mdx) for the full catalog.
|
|
75
|
+
|
|
76
|
+
## Known Limitations
|
|
77
|
+
|
|
78
|
+
- **Agent execution is deferred** -- The worker runtime returns a failed status for agent resources. LLM calls are available via `platform.call`, but autonomous multi-turn agent loops are not yet supported.
|
|
79
|
+
- **No streaming logs** -- Execution logs are returned in the response body after completion. Real-time log streaming is not available.
|
|
80
|
+
|
|
81
|
+
## Documentation
|
|
82
|
+
|
|
83
|
+
### Getting Started
|
|
84
|
+
|
|
85
|
+
- [Getting Started](getting-started/index.mdx) - Installation, authentication, first workflow, and project structure
|
|
86
|
+
|
|
87
|
+
### Core Concepts
|
|
88
|
+
|
|
89
|
+
- [Resources](resources/index.mdx) - Workflow and agent definition patterns, Zod schemas, step types, and routing
|
|
90
|
+
- [Platform Tools](platform-tools/index.mdx) - Full catalog of 70+ tools, integration adapters, and credential management
|
|
91
|
+
|
|
92
|
+
### Reference
|
|
93
|
+
|
|
94
|
+
- [CLI Reference](cli/index.mdx) - All CLI commands: check, deploy, exec, resources, executions, env, and more
|
|
95
|
+
- [Deployment](deployment/index.mdx) - Deploy pipeline, versioning, bundle upload, and registry registration
|
|
96
|
+
- [Runtime](runtime/index.mdx) - Worker execution model, concurrency, timeouts, cancellation, and resource limits
|
|
97
|
+
|
|
98
|
+
### Developer Tools
|
|
99
|
+
|
|
100
|
+
- [Documentation](documentation/index.mdx) - Writing and deploying MDX documentation alongside your resources
|
|
101
|
+
- [Roadmap](roadmap/index.mdx) - Planned features including agent execution, streaming logs, and SDK testing utilities
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
**Last Updated:** 2026-02-25
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Integration Examples
|
|
3
|
+
description: Common platform.call() patterns for email, CRM, PDF, LLM inference, resource triggering, and storage
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Common `platform.call()` patterns ready to use in your SDK workflows. Each example shows the complete invocation including tool name, method, params, and credential (where required).
|
|
7
|
+
|
|
8
|
+
## Sending Email via Resend
|
|
9
|
+
|
|
10
|
+
Send a transactional email through your Resend account. Store your Resend API key as a credential named `resend` using the [Elevasis CLI](../cli/index.mdx).
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
const result = await platform.call({
|
|
14
|
+
tool: 'resend',
|
|
15
|
+
method: 'sendEmail',
|
|
16
|
+
credential: 'resend',
|
|
17
|
+
params: {
|
|
18
|
+
from: 'hello@yourapp.com',
|
|
19
|
+
to: 'customer@example.com',
|
|
20
|
+
subject: 'Your order is confirmed',
|
|
21
|
+
html: '<p>Thank you for your order!</p>'
|
|
22
|
+
}
|
|
23
|
+
})
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The `credential` value must match the name you used when storing the API key. Resend supports `{ apiKey }` as its credential shape.
|
|
27
|
+
|
|
28
|
+
## Creating a CRM Record via Attio
|
|
29
|
+
|
|
30
|
+
Create a contact or company record in Attio. Store your Attio API key as a credential named `attio`.
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
const result = await platform.call({
|
|
34
|
+
tool: 'attio',
|
|
35
|
+
method: 'createRecord',
|
|
36
|
+
credential: 'attio',
|
|
37
|
+
params: {
|
|
38
|
+
objectType: 'people',
|
|
39
|
+
attributes: {
|
|
40
|
+
name: [{ full_name: 'Jane Smith' }],
|
|
41
|
+
email_addresses: [{ email_address: 'jane@example.com' }],
|
|
42
|
+
company: 'Acme Corp'
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
// result.data.id is the new record ID
|
|
48
|
+
const recordId = result.data.id
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Attio exposes 11 tools covering CRUD operations, schema inspection, and notes. See the Attio adapter documentation for the full method list.
|
|
52
|
+
|
|
53
|
+
## Generating a PDF
|
|
54
|
+
|
|
55
|
+
Render a PDF from an HTML string or a registered template. No credential required -- PDF generation is a built-in platform service.
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
const pdfBuffer = await platform.call({
|
|
59
|
+
tool: 'pdf',
|
|
60
|
+
method: 'renderToBuffer',
|
|
61
|
+
params: {
|
|
62
|
+
html: `
|
|
63
|
+
<h1>Invoice #1042</h1>
|
|
64
|
+
<p>Customer: Jane Smith</p>
|
|
65
|
+
<p>Amount due: $450.00</p>
|
|
66
|
+
`,
|
|
67
|
+
options: {
|
|
68
|
+
format: 'A4',
|
|
69
|
+
margin: { top: '20mm', bottom: '20mm', left: '15mm', right: '15mm' }
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
// Upload the buffer to storage for later retrieval
|
|
75
|
+
await platform.call({
|
|
76
|
+
tool: 'storage',
|
|
77
|
+
method: 'upload',
|
|
78
|
+
params: {
|
|
79
|
+
path: 'invoices/invoice-1042.pdf',
|
|
80
|
+
data: pdfBuffer,
|
|
81
|
+
contentType: 'application/pdf'
|
|
82
|
+
}
|
|
83
|
+
})
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Making an LLM Call with Structured Output
|
|
87
|
+
|
|
88
|
+
Use the `llm` tool to call any supported model with a JSON Schema for structured output. No API keys are needed in your code -- keys are resolved server-side.
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const classification = await platform.call({
|
|
92
|
+
tool: 'llm',
|
|
93
|
+
method: 'generate',
|
|
94
|
+
params: {
|
|
95
|
+
provider: 'anthropic',
|
|
96
|
+
model: 'claude-sonnet-4-5',
|
|
97
|
+
messages: [
|
|
98
|
+
{
|
|
99
|
+
role: 'system',
|
|
100
|
+
content: 'You extract structured data from support tickets. Return valid JSON matching the schema.'
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
role: 'user',
|
|
104
|
+
content: ticketText
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
responseSchema: {
|
|
108
|
+
type: 'object',
|
|
109
|
+
properties: {
|
|
110
|
+
priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
|
|
111
|
+
category: { type: 'string', enum: ['billing', 'technical', 'account', 'other'] },
|
|
112
|
+
sentiment: { type: 'string', enum: ['positive', 'neutral', 'negative'] },
|
|
113
|
+
summary: { type: 'string' }
|
|
114
|
+
},
|
|
115
|
+
required: ['priority', 'category', 'sentiment', 'summary']
|
|
116
|
+
},
|
|
117
|
+
temperature: 0.1
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
// classification = { priority: 'high', category: 'technical', sentiment: 'negative', summary: '...' }
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Supported providers: `google`, `openai`, `anthropic`, `openrouter`. See [Platform Tools](index.mdx) for the full model list.
|
|
125
|
+
|
|
126
|
+
## Triggering Another Resource
|
|
127
|
+
|
|
128
|
+
Trigger a separate workflow or agent as a nested child execution. The call is synchronous -- your workflow waits for the child to complete and receives its output.
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
const outcome = await platform.call({
|
|
132
|
+
tool: 'execution',
|
|
133
|
+
method: 'trigger',
|
|
134
|
+
params: {
|
|
135
|
+
resourceId: 'send-welcome-sequence',
|
|
136
|
+
input: {
|
|
137
|
+
userId: newUser.id,
|
|
138
|
+
email: newUser.email,
|
|
139
|
+
plan: 'pro'
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
if (!outcome.success) {
|
|
145
|
+
throw new Error(`Child workflow failed: ${outcome.error}`)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// outcome = { success: true, executionId: '...', output: { emailsSent: 3 }, error: undefined }
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Nested executions are tracked with depth up to a maximum of 5 levels. Both the calling workflow and the child must belong to the same organization.
|
|
152
|
+
|
|
153
|
+
## Uploading to Storage
|
|
154
|
+
|
|
155
|
+
Upload a file to Elevasis-managed storage and generate a signed URL for temporary access. No credential required.
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
// Upload a processed file
|
|
159
|
+
await platform.call({
|
|
160
|
+
tool: 'storage',
|
|
161
|
+
method: 'upload',
|
|
162
|
+
params: {
|
|
163
|
+
path: `exports/${organizationSlug}/report-${Date.now()}.csv`,
|
|
164
|
+
data: csvContent,
|
|
165
|
+
contentType: 'text/csv'
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
// Generate a signed URL valid for 1 hour (3600 seconds)
|
|
170
|
+
const { signedUrl } = await platform.call({
|
|
171
|
+
tool: 'storage',
|
|
172
|
+
method: 'createSignedUrl',
|
|
173
|
+
params: {
|
|
174
|
+
path: `exports/${organizationSlug}/report-${Date.now()}.csv`,
|
|
175
|
+
expiresIn: 3600
|
|
176
|
+
}
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
// Share signedUrl with the user or include in an email
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Storage also supports `download`, `delete`, and `list` operations. Use `list` to enumerate files under a path prefix.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
**Last Updated:** 2026-02-25
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Platform Tools
|
|
3
|
+
description: Access 70+ integration adapters and platform services from your SDK workflows via platform.call()
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
`platform.call()` gives your SDK workflows access to the same 70+ tools that internal Elevasis agents use -- Gmail, Stripe, Google Sheets, PDF generation, human-in-the-loop approvals, storage, scheduling, and more. Credentials are managed server-side and never appear in your code. You pass a tool name, method, and parameters; Elevasis handles credential lookup, rate limiting, and retry transparently.
|
|
7
|
+
|
|
8
|
+
All tools share the same interface regardless of type: integration adapters (third-party APIs) and platform services (built-in Elevasis capabilities) are both called the same way.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
const result = await platform.call({
|
|
14
|
+
tool: 'resend', // tool name (integration adapter or platform service)
|
|
15
|
+
method: 'sendEmail', // method exposed by that tool
|
|
16
|
+
params: { ... }, // method-specific parameters
|
|
17
|
+
credential: 'my-resend' // credential name (integration tools only)
|
|
18
|
+
})
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`platform.call()` returns a Promise that resolves with the tool result or rejects with a `PlatformToolError` containing a message, error code, and a `retryable` flag.
|
|
22
|
+
|
|
23
|
+
## Integration Adapters
|
|
24
|
+
|
|
25
|
+
Twelve integration adapters give you access to roughly 50 tool factories covering third-party APIs. Pass the `credential` field with the name of the stored credential for that service.
|
|
26
|
+
|
|
27
|
+
| Adapter | Tools | Credential Shape |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| Attio | 11 (CRUD + schema + notes) | `{ apiKey }` |
|
|
30
|
+
| Google Sheets | 13 (read/write/filter/upsert) | OAuth2 / service account |
|
|
31
|
+
| Trello | 10 (cards/lists/checklists) | `{ apiKey, token }` |
|
|
32
|
+
| Notion | 8 (pages + blocks) | `{ token }` |
|
|
33
|
+
| Stripe | 6 (payment links + checkout) | `{ secretKey }` |
|
|
34
|
+
| Instantly | 5 (email campaigns) | `{ apiKey }` |
|
|
35
|
+
| Gmail | 2 (send email) | OAuth2 / service account |
|
|
36
|
+
| Resend | 3 (send/get email) | `{ apiKey }` |
|
|
37
|
+
| SignatureAPI | 3 (envelopes) | `{ apiKey }` |
|
|
38
|
+
| Dropbox | 2 (upload/folder) | `{ accessToken }` |
|
|
39
|
+
| Apify | 1 (run actor) | `{ token }` |
|
|
40
|
+
| Mailso | 1 (verify email) | `{ apiKey }` |
|
|
41
|
+
|
|
42
|
+
Credentials are stored in the Elevasis credentials table and injected server-side. The credential name you pass in `credential` must match the name you set when storing the credential.
|
|
43
|
+
|
|
44
|
+
## Platform Services
|
|
45
|
+
|
|
46
|
+
Nine built-in platform services are available without a `credential` field. These are Elevasis-managed capabilities.
|
|
47
|
+
|
|
48
|
+
| Tool Key | Methods | Purpose |
|
|
49
|
+
| --- | --- | --- |
|
|
50
|
+
| `email` | `send` | Send transactional email via Elevasis email service |
|
|
51
|
+
| `storage` | `upload`, `download`, `createSignedUrl`, `delete`, `list` | File storage operations |
|
|
52
|
+
| `pdf` | `render`, `renderToBuffer` | Generate PDFs from templates or HTML |
|
|
53
|
+
| `notification` | `create` | Create in-app notifications |
|
|
54
|
+
| `approval` | `create`, `deleteByMetadata` | Human-in-the-loop approval gates |
|
|
55
|
+
| `scheduler` | `createSchedule`, `updateAnchor`, `deleteSchedule`, `findByIdempotencyKey`, `deleteScheduleByIdempotencyKey`, `listSchedules`, `getSchedule`, `cancelSchedule`, `cancelSchedulesByMetadata` | Task scheduling |
|
|
56
|
+
| `lead` | Dynamic (all methods) | Lead management operations |
|
|
57
|
+
| `llm` | `generate` | LLM inference across multiple providers |
|
|
58
|
+
| `execution` | `trigger` | Trigger another resource as a nested child execution |
|
|
59
|
+
|
|
60
|
+
## LLM Tool
|
|
61
|
+
|
|
62
|
+
Call any supported LLM from your workflow with no API keys required. Keys are resolved server-side from environment variables.
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
const result = await platform.call({
|
|
66
|
+
tool: 'llm',
|
|
67
|
+
method: 'generate',
|
|
68
|
+
params: {
|
|
69
|
+
provider: 'google',
|
|
70
|
+
model: 'gemini-3-flash-preview',
|
|
71
|
+
messages: [
|
|
72
|
+
{ role: 'system', content: 'Classify this email reply.' },
|
|
73
|
+
{ role: 'user', content: emailText }
|
|
74
|
+
],
|
|
75
|
+
responseSchema: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {
|
|
78
|
+
category: { type: 'string', enum: ['interested', 'not-interested', 'bounced'] },
|
|
79
|
+
confidence: { type: 'number', minimum: 0, maximum: 1 }
|
|
80
|
+
},
|
|
81
|
+
required: ['category', 'confidence']
|
|
82
|
+
},
|
|
83
|
+
temperature: 0.2
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Supported models:**
|
|
89
|
+
|
|
90
|
+
| Provider | Models |
|
|
91
|
+
| --- | --- |
|
|
92
|
+
| `google` | `gemini-3-flash-preview` |
|
|
93
|
+
| `openai` | `gpt-5`, `gpt-5-mini` |
|
|
94
|
+
| `anthropic` | `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-4-5` |
|
|
95
|
+
| `openrouter` | `openrouter/anthropic/claude-sonnet-4.5`, `openrouter/deepseek/deepseek-v3.2`, `openrouter/x-ai/grok-4.1-fast` |
|
|
96
|
+
|
|
97
|
+
**Key params:**
|
|
98
|
+
|
|
99
|
+
- `provider` -- one of `google`, `openai`, `anthropic`, `openrouter`
|
|
100
|
+
- `model` -- model identifier from the table above
|
|
101
|
+
- `messages` -- array of `{ role, content }` objects
|
|
102
|
+
- `responseSchema` -- optional JSON Schema for structured output
|
|
103
|
+
- `temperature` -- optional, controls output randomness
|
|
104
|
+
|
|
105
|
+
## Execution Tool
|
|
106
|
+
|
|
107
|
+
Trigger another resource (workflow or agent) as a nested child of the current execution. The child runs synchronously and its result is returned. Depth is tracked automatically up to a maximum of 5 levels to prevent infinite recursion.
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
const result = await platform.call({
|
|
111
|
+
tool: 'execution',
|
|
112
|
+
method: 'trigger',
|
|
113
|
+
params: {
|
|
114
|
+
resourceId: 'my-other-workflow',
|
|
115
|
+
input: { key: 'value' }
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
// result = { success: true, executionId: '...', output: { ... }, error: undefined }
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The invoked resource must belong to the same organization. The `organizationId` is always taken from the parent execution context -- you cannot invoke resources across organizations.
|
|
122
|
+
|
|
123
|
+
## Managing Environment Variables
|
|
124
|
+
|
|
125
|
+
Use the `elevasis env` CLI to manage environment variables for your deployed workers:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
elevasis env list
|
|
129
|
+
elevasis env set KEY value
|
|
130
|
+
elevasis env remove KEY
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Environment variables set this way are injected into your worker process at startup and are available via `process.env`.
|
|
134
|
+
|
|
135
|
+
## Documentation
|
|
136
|
+
|
|
137
|
+
- [Integration Examples](examples.mdx) - Common `platform.call()` patterns with working code for email, CRM, PDF, LLM, and more
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
**Last Updated:** 2026-02-25
|