Documentation

Iyctt developer guide

Everything you need to deploy your first workflow and grow into a production-scale automation platform.

About the name. Iyctt is short for “If You Can’T Tell” — the idea that great automation should be invisible to the people it serves.

Quickstart

Deploy your first workflow in under five minutes.

$ npm i -g @iyctt/cli
$ iyctt login
$ iyctt init my-flow
$ cd my-flow && iyctt deploy

Install the CLI

The Iyctt CLI runs on Node 18+ and is distributed via npm:

npm install --global @iyctt/cli
The CLI stores credentials under ~/.config/iyctt/. On shared machines, prefer per-project tokens over global login.

Authentication

All API requests require a bearer token scoped to a project:

Authorization: Bearer sk_live_2n8fJq...

Create scoped API keys from the dashboard. Keys can be restricted to specific workflows and IP ranges.

Workflows

A workflow is a typed handler that runs on a trigger:

import { defineWorkflow } from "@iyctt/sdk";

export default defineWorkflow({
  name: "welcome-email",
  trigger: { source: "user.created" },
  async handler(event, ctx) {
    await ctx.email.send({ to: event.email, template: "welcome" });
  },
});

Webhooks

Inbound webhooks are signed with HMAC-SHA256 using a per-source secret.

Verify signatures with the SDK:

import { verifyWebhook } from "@iyctt/sdk/webhooks";

const ok = await verifyWebhook(request, env("WEBHOOK_SECRET"));
if (!ok) return new Response("unauthorized", { status: 401 });

Retries & idempotency

Every workflow invocation includes an Idempotency-Key that Iyctt uses to deduplicate replays. Failed steps back off exponentially and are checkpointed to durable state.

SettingDefaultDescription
retries.max3Maximum retry attempts per step
retries.backoffexponentialBackoff strategy (linear or exponential)
retries.jitter0.2Fractional jitter, 0.0–1.0

API reference

The API is versioned in the URL. All endpoints return JSON.

MethodPathDescription
POST/v1/flowsDeploy or update a workflow
GET/v1/flows/{name}Fetch a workflow
POST/v1/flows/{name}/runInvoke a workflow
GET/v1/runs/{run_id}Fetch a run
POST/v1/runs/{run_id}/replayReplay a failed run

Error codes

Errors follow a stable schema. Client SDKs surface them as typed exceptions.

{
  "error": {
    "code": "validation_failed",
    "message": "One or more fields are invalid.",
    "details": { "trigger": "Unknown source: github.pull" }
  }
}

Rate limits

Rate limits are enforced per project. When exceeded, the API returns 429 Too Many Requests with a Retry-After header.

The /v1/flows/{name}/run endpoint has a per-second burst limit. For bulk workloads, publish to a queue instead of invoking directly.

SDKs

  • @iyctt/sdk — TypeScript / JavaScript
  • github.com/iyctt/go-sdk — Go
  • iyctt — Python (PyPI)

All SDKs are generated from the same OpenAPI spec and released in lockstep.

Need something specific?

Our team is happy to review your architecture.

Contact us