@myapihq/cli 2.4.0 → 2.4.2
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/commands/crm/companies.js +1 -5
- package/dist/commands/crm/contacts.js +1 -6
- package/dist/commands/domain-validation.test.d.ts +1 -0
- package/dist/commands/domain-validation.test.js +36 -0
- package/dist/commands/domain.d.ts +14 -0
- package/dist/commands/domain.js +20 -1
- package/dist/commands/funnel-validation.test.d.ts +1 -0
- package/dist/commands/funnel-validation.test.js +86 -0
- package/dist/commands/funnel.d.ts +12 -0
- package/dist/commands/funnel.js +59 -15
- package/dist/commands/login-validation.test.js +24 -2
- package/dist/commands/login.d.ts +6 -0
- package/dist/commands/login.js +48 -17
- package/dist/commands/payments.js +12 -2
- package/dist/commands/setup.d.ts +1 -0
- package/dist/commands/setup.js +53 -4
- package/dist/commands/skill-checksum.test.d.ts +1 -0
- package/dist/commands/skill-checksum.test.js +48 -0
- package/dist/config-envkey.test.d.ts +1 -0
- package/dist/config-envkey.test.js +145 -0
- package/dist/config.js +41 -5
- package/dist/errors.js +11 -0
- package/dist/index.js +6 -1
- package/dist/sdk-transport.test.d.ts +1 -0
- package/dist/sdk-transport.test.js +138 -0
- package/dist/sdk-version.test.d.ts +1 -0
- package/dist/sdk-version.test.js +24 -0
- package/dist/skills/my-api-hq/SKILL.md +1 -1
- package/dist/skills/my-api-hq/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-audience-api/README.md +40 -0
- package/dist/skills/my-audience-api/SKILL.md +139 -0
- package/dist/skills/my-audience-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-audience-api/openapi/.gitkeep +0 -0
- package/dist/skills/my-auth-api/SKILL.md +1 -1
- package/dist/skills/my-auth-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-company-api/README.md +35 -0
- package/dist/skills/my-company-api/SKILL.md +110 -0
- package/dist/skills/my-company-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-company-api/openapi/.gitkeep +0 -0
- package/dist/skills/my-container-api/README.md +34 -0
- package/dist/skills/my-container-api/SKILL.md +77 -0
- package/dist/skills/my-container-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-container-api/openapi/.gitkeep +0 -0
- package/dist/skills/my-crm-api/SKILL.md +3 -3
- package/dist/skills/my-crm-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-database-api/SKILL.md +1 -1
- package/dist/skills/my-database-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-domain-api/SKILL.md +1 -1
- package/dist/skills/my-domain-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-email-api/SKILL.md +1 -1
- package/dist/skills/my-email-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-email-verify-api/SKILL.md +1 -1
- package/dist/skills/my-email-verify-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-function-api/SKILL.md +104 -0
- package/dist/skills/my-function-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-funnel-api/SKILL.md +2 -2
- package/dist/skills/my-funnel-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-git-api/SKILL.md +1 -1
- package/dist/skills/my-git-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-image-api/SKILL.md +1 -1
- package/dist/skills/my-image-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-llm-api/SKILL.md +6 -11
- package/dist/skills/my-llm-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-payments-api/SKILL.md +85 -0
- package/dist/skills/my-payments-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-people-api/README.md +35 -0
- package/dist/skills/my-people-api/SKILL.md +107 -0
- package/dist/skills/my-people-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-people-api/openapi/.gitkeep +0 -0
- package/dist/skills/my-pixel-api/README.md +38 -0
- package/dist/skills/my-pixel-api/SKILL.md +90 -0
- package/dist/skills/my-pixel-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-pixel-api/openapi/.gitkeep +0 -0
- package/dist/skills/my-queue-api/README.md +34 -0
- package/dist/skills/my-queue-api/SKILL.md +78 -0
- package/dist/skills/my-queue-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-queue-api/openapi/.gitkeep +0 -0
- package/dist/skills/my-storage-api/SKILL.md +1 -1
- package/dist/skills/my-storage-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-task-api/README.md +36 -0
- package/dist/skills/my-task-api/SKILL.md +74 -0
- package/dist/skills/my-task-api/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-task-api/openapi/.gitkeep +0 -0
- package/dist/skills/my-url-to/README.md +32 -0
- package/dist/skills/my-url-to/SKILL.md +55 -0
- package/dist/skills/my-url-to/claude/.claude-plugin/plugin.json +7 -0
- package/dist/skills/my-url-to/openapi/.gitkeep +0 -0
- package/dist/skills/my-webhook-api/SKILL.md +1 -1
- package/dist/skills/my-webhook-api/claude/.claude-plugin/plugin.json +1 -0
- package/dist/skills/my-workflow-api/SKILL.md +1 -1
- package/dist/skills/my-workflow-api/claude/.claude-plugin/plugin.json +1 -0
- package/package.json +8 -2
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: my-function-api
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: >
|
|
5
|
+
Deploy JavaScript functions to the MyAPI edge runtime (Cloudflare Workers). Register a function, upload a single-file JS bundle, get a live HTTP invocation URL or run it on a cron schedule. Each function gets a scoped capability key for cross-slot calls.
|
|
6
|
+
triggers: [function, deploy function, edge function, serverless, cloudflare worker, cron, scoped api key, capability key, invocation url, bundle]
|
|
7
|
+
checksum: sha256-ada0a52fdd9c0ba14ca86496e1c5c42e8b018155c3e8c83edba071fa6bd0b7e9
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MyFunctionAPI
|
|
11
|
+
|
|
12
|
+
Deploy backend code without running a server. Register a function, upload a single-file JS bundle, and it goes live on the MyAPI edge runtime (Cloudflare Workers) with a public invocation URL — or runs on a cron schedule. Each function carries a scoped capability key so it can call other MyAPI slots with its own authority.
|
|
13
|
+
|
|
14
|
+
The full loop is live: **create → deploy → invoke → inspect runs → set secrets**.
|
|
15
|
+
|
|
16
|
+
## Capabilities
|
|
17
|
+
<!-- llm:start -->
|
|
18
|
+
**Two-step lifecycle: register, then deploy.** `myapi fn create --name <slug>` persists the function record and mints a `scoped_api_key`, returned **exactly once** (save it if you need it). `myapi fn deploy <id> <bundle.js>` uploads a single-file JavaScript bundle (≤4MB); the backend wraps it with the MYAPI shim and ships it to Cloudflare Workers. After deploy the function has a live `invocation_url`.
|
|
19
|
+
|
|
20
|
+
**Scoped key = capability key.** It is **org-locked**. By default it inherits the deployer's slot grants; narrow it at create time with `--scope <slot>[,<slot>...]` (comma-separated, e.g. `--scope email,storage`) — the primary way to deploy a deliberately narrow function. Grants can never exceed the caller's, so a function never out-reaches the credential that created it. It is rejected with `403 SCOPE_FORBIDDEN` at `/hq/*`, `/admin/*`, `/internal/*`. **Deploy rotates this key** — the fresh value is printed once on every deploy. (Minting a narrow account key first — `myapi keys create --grant ...` — is only needed when the *deploy credential itself* must be constrained, e.g. handing deploy rights to another system.)
|
|
21
|
+
|
|
22
|
+
**HTTP or cron triggers.** Default is `http` — the function gets a public invocation URL once deployed. Pass `--cron "<expr>"` at create time to run on a schedule (e.g. `"0 8 * * *"`) instead.
|
|
23
|
+
|
|
24
|
+
**Secrets via Worker Secrets.** `myapi fn env <id> <name> <value>` sets a secret (Stripe key, API token, …) as a Cloudflare Worker Secret on a deployed function. The value is encrypted at rest by Cloudflare and never stored or echoed by MyAPI. The function must already be deployed.
|
|
25
|
+
|
|
26
|
+
**Inspect invocations.** `myapi fn runs <id>` lists recent invocation records (most recent first, up to 100) with status, duration, and any error message.
|
|
27
|
+
|
|
28
|
+
Name rules (validated client- and server-side, kept identical):
|
|
29
|
+
- `^[a-z0-9][a-z0-9-]{0,49}$` — kebab-case, 1-50 chars
|
|
30
|
+
- Reserved server-side: `www`, `api`, `admin`, `system`, `default`
|
|
31
|
+
<!-- llm:end -->
|
|
32
|
+
|
|
33
|
+
## Commands
|
|
34
|
+
<!-- generated:start -->
|
|
35
|
+
| Command | What it does |
|
|
36
|
+
|---|---|
|
|
37
|
+
| `myapi fn create --name <name> [--cron <expr>] [--scope <slot>[,<slot>...]]` | Register a function record + receive scoped API key (returned once). `--scope` narrows the key's slot grants |
|
|
38
|
+
| `myapi fn deploy <id> <bundle.js>` | Upload a single-file JS bundle (≤4MB) and go live; rotates the scoped key |
|
|
39
|
+
| `myapi fn env <id> <name> <value>` | Set a Worker Secret on a deployed function |
|
|
40
|
+
| `myapi fn runs <id>` | List recent invocation records (status, duration, errors) |
|
|
41
|
+
| `myapi fn list` | List functions in your org |
|
|
42
|
+
| `myapi fn get <id>` | Inspect a function (name, trigger, invocation URL) |
|
|
43
|
+
| `myapi fn delete <id>` | Soft-delete the record + revoke the scoped key |
|
|
44
|
+
<!-- generated:end -->
|
|
45
|
+
|
|
46
|
+
## Examples
|
|
47
|
+
<!-- llm:start -->
|
|
48
|
+
```bash
|
|
49
|
+
# Register an HTTP function (invocation_url is empty until you deploy)
|
|
50
|
+
myapi fn create --name my-app-api
|
|
51
|
+
# → Function created: fn_abc123
|
|
52
|
+
# Scoped API key (returned once — save it if you need it):
|
|
53
|
+
# hq_live_... (scoped keys are not visually distinct from account keys)
|
|
54
|
+
|
|
55
|
+
# Deploy a single-file JS bundle → goes live, scoped key is rotated
|
|
56
|
+
myapi fn deploy fn_abc123 ./dist/bundle.js
|
|
57
|
+
# → Deployed function fn_abc123
|
|
58
|
+
# Invocation URL: https://fn-abc123.<...>.workers.dev
|
|
59
|
+
# Scoped API key was rotated. New value (returned once): hq_live_...
|
|
60
|
+
|
|
61
|
+
# Set a secret (encrypted at rest by Cloudflare; never echoed)
|
|
62
|
+
myapi fn env fn_abc123 STRIPE_KEY sk_live_...
|
|
63
|
+
|
|
64
|
+
# Inspect recent invocations
|
|
65
|
+
myapi fn runs fn_abc123
|
|
66
|
+
|
|
67
|
+
# Register a cron function instead of HTTP
|
|
68
|
+
myapi fn create --name daily-report --cron "0 8 * * *"
|
|
69
|
+
|
|
70
|
+
# Register with a narrowed key — the function can only call email + storage
|
|
71
|
+
myapi fn create --name mailer --scope email,storage
|
|
72
|
+
|
|
73
|
+
# List + inspect
|
|
74
|
+
myapi fn list
|
|
75
|
+
myapi fn get fn_abc123
|
|
76
|
+
|
|
77
|
+
# Delete (revokes the scoped key — future calls with it return 401)
|
|
78
|
+
myapi fn delete fn_abc123
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Using the scoped key
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Save the key returned at create/deploy time
|
|
85
|
+
SCOPED_KEY="hq_live_..."
|
|
86
|
+
|
|
87
|
+
# Call slots the key was granted — works (within its org + grants)
|
|
88
|
+
curl -H "Authorization: Bearer $SCOPED_KEY" \
|
|
89
|
+
https://api.myapihq.com/database/orgs/$ORG_ID/namespaces
|
|
90
|
+
|
|
91
|
+
# Calling /hq/* with it — denied (403 SCOPE_FORBIDDEN)
|
|
92
|
+
curl -H "Authorization: Bearer $SCOPED_KEY" \
|
|
93
|
+
https://api.myapihq.com/hq/orgs
|
|
94
|
+
# → 403 {"error":{"code":"SCOPE_FORBIDDEN"}}
|
|
95
|
+
```
|
|
96
|
+
<!-- llm:end -->
|
|
97
|
+
|
|
98
|
+
## Notes
|
|
99
|
+
|
|
100
|
+
- The bundle is a **single JavaScript file** (≤4MB). Bundle your dependencies before deploy (esbuild/rollup/etc.).
|
|
101
|
+
- `--cron` is set at create time; the trigger type is fixed for the function's lifetime.
|
|
102
|
+
- Deploy rotates the scoped key on every call — re-capture the printed value if other systems use it.
|
|
103
|
+
|
|
104
|
+
Run `myapi fn --help` or `myapi fn <subcommand> --help` for full flag reference.
|
|
@@ -4,7 +4,7 @@ version: 1.0.0
|
|
|
4
4
|
description: >
|
|
5
5
|
Create and publish websites (funnels) to the edge. Push raw HTML to any slug and it goes live instantly on your org's domain or preview subdomain.
|
|
6
6
|
triggers: [funnel, landing page, website, page, publish, push, slug, html, edge, preview subdomain, makeautonomous]
|
|
7
|
-
checksum: sha256-
|
|
7
|
+
checksum: sha256-3b463d6ac52fba7d44f89195b5704b02903ffdd9a677655f9c1bff0f13b25ab4
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# MyFunnelAPI
|
|
@@ -19,7 +19,7 @@ Funnels are the publishing surface. You create a funnel under an org (one comman
|
|
|
19
19
|
|
|
20
20
|
By default, your funnel lives on a free preview subdomain (`*.makeautonomous.com`) you get with every org. To serve on a custom domain, register and assign one via **mydomainapi** first.
|
|
21
21
|
|
|
22
|
-
Every funnel auto-provisions a **webhook** at creation
|
|
22
|
+
Every funnel auto-provisions a **webhook** at creation (`org_webhook_id`), and exposes two public proxy endpoints your HTML can call without an API key: a **form submit** at `POST /funnel/funnels/{id}/submit/{slug}` (delivers through that webhook — CRM upsert + bound workflows fire automatically), and an **analytics/event ingest** for pageviews and click tracking. Bind individual slugs to other destinations with `myapi funnel form ... --capture-to webhook:<id>`.
|
|
23
23
|
<!-- llm:end -->
|
|
24
24
|
|
|
25
25
|
## Commands
|
|
@@ -4,7 +4,7 @@ version: 1.0.0
|
|
|
4
4
|
description: >
|
|
5
5
|
Hosted git repositories over HTTP. Create repos, read history (log/show/tree/blob/diff), and write atomically (commit/branch/tag/merge) — no clone needed. Real `git clone`/`push` also work over HTTPS with your API key as the password.
|
|
6
6
|
triggers: [git, repo, repository, clone, push, commit, branch, tag, merge, diff, version control, source control, vcs]
|
|
7
|
-
checksum: sha256-
|
|
7
|
+
checksum: sha256-a059c8f2b59205a1d66ecf70556b60fa3a3606044aaa54e242344ea652efb5e9
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# MyGitAPI
|
|
@@ -4,7 +4,7 @@ version: 1.0.0
|
|
|
4
4
|
description: >
|
|
5
5
|
Generate AI images from a text prompt. Async — submit a prompt, the CLI polls until the image is ready, then returns a public CDN URL. Image lands automatically in your org's storage.
|
|
6
6
|
triggers: [image, generate image, ai image, hero image, logo, illustration, watercolor, prompt, cyberpunk, ratio, aspect ratio]
|
|
7
|
-
checksum: sha256-
|
|
7
|
+
checksum: sha256-17f496ae8c575743872e87c5c3b281e621b3557ef3ff9eeb0b3d664ec4212e57
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# MyImageAPI
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: my-llm-api
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.1
|
|
4
4
|
description: >
|
|
5
5
|
Two-surface LLM primitive. Raw chat completion against self-hosted
|
|
6
6
|
open-source models (you pick the model), and objective verbs
|
|
7
7
|
(classify / extract / summarize / draft) that hide the model behind a
|
|
8
8
|
task. Pricing in cents per 1M tokens; charged from your MyAPI balance.
|
|
9
9
|
triggers: [llm, completion, chat, embed, embedding, inference, classify, extract, summarize, draft, qwen]
|
|
10
|
-
checksum: sha256-
|
|
10
|
+
checksum: sha256-6c399da099802637c68eda61ba85a23286ff3dca8f50c391e80ab442777c17c4
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# MyLLMAPI
|
|
@@ -15,9 +15,9 @@ checksum: sha256-pending
|
|
|
15
15
|
A two-surface LLM gateway:
|
|
16
16
|
|
|
17
17
|
- **Raw** — `complete` / `embed` / `models`. You pick a self-hosted catalog model (run `myapi llm models` for the live list). Proprietary models are not callable here.
|
|
18
|
-
- **Verbs** — `classify` / `extract` / `summarize` / `draft`. You ask for a task done; the model is implementation detail
|
|
18
|
+
- **Verbs** — `classify` / `extract` / `summarize` / `draft`. You ask for a task done; the model is implementation detail.
|
|
19
19
|
|
|
20
|
-
Pricing is
|
|
20
|
+
Pricing is cents per 1M tokens at the actual upstream rate, debited from your MyAPI balance.
|
|
21
21
|
|
|
22
22
|
## Capabilities
|
|
23
23
|
<!-- llm:start -->
|
|
@@ -25,10 +25,7 @@ Use this for workflow tasks — summarize a doc, classify an inbound email, extr
|
|
|
25
25
|
|
|
26
26
|
**Don't use this as your own model.** If you're an agent reading this, you already have a more capable model than what's exposed here. Reach for the LLM verbs when you're scripting a recurring step where a small/cheap model is the right tool — not for one-shot reasoning you can just do yourself.
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- **Raw `complete`** — full control: pick the model, build the `messages` array, set `max_tokens`/`temperature`/`stop`. Use when shape matters.
|
|
31
|
-
- **Verbs** — you want a *result* (label, JSON, summary, draft). Use when you don't care which model runs underneath.
|
|
28
|
+
Reach for raw `complete` when shape matters (you build the `messages` array and set `max_tokens`/`temperature`/`stop`); reach for a verb when you want a *result* and don't care which model produced it.
|
|
32
29
|
|
|
33
30
|
### Raw `complete` request
|
|
34
31
|
```json
|
|
@@ -87,7 +84,7 @@ Shared usage block on every verb:
|
|
|
87
84
|
{ "tier_used": "fast", "tokens_in": 65, "tokens_out": 37, "cost_cents": 0.005 }
|
|
88
85
|
```
|
|
89
86
|
|
|
90
|
-
The model/provider is **never** named in the verb response
|
|
87
|
+
The model/provider is **never** named in the verb response — the verb is the contract.
|
|
91
88
|
|
|
92
89
|
### OpenAI-compatible drop-in
|
|
93
90
|
|
|
@@ -103,8 +100,6 @@ r = client.chat.completions.create(model="<model-id>",
|
|
|
103
100
|
messages=[{"role":"user","content":"Hi"}])
|
|
104
101
|
```
|
|
105
102
|
|
|
106
|
-
Use raw `complete` for first-party code; the compat path for existing OpenAI/LangChain tooling.
|
|
107
|
-
|
|
108
103
|
<!-- llm:end -->
|
|
109
104
|
|
|
110
105
|
## Commands
|
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
"name": "my-llm-api",
|
|
3
3
|
"description": "Self-hosted open-source LLM: raw chat completions (you pick the model) + objective verbs (classify/extract/summarize/draft). Billed in cents per 1M tokens from your balance. Use in workflow steps, not for your own reasoning.",
|
|
4
4
|
"version": "1.0.0",
|
|
5
|
+
"status": "ga",
|
|
5
6
|
"published": true
|
|
6
7
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: my-payments-api
|
|
3
|
+
version: 1.1.0
|
|
4
|
+
description: >
|
|
5
|
+
Take payments via Stripe — one-off or recurring. Connect your own Stripe account, then create hosted Stripe Checkout URLs. No raw card data ever touches your code.
|
|
6
|
+
triggers: [payment, stripe, checkout, charge, subscription, take payments, billing, refund, recurring, sell]
|
|
7
|
+
checksum: sha256-bdf124b2a3d32c87676ad34f0a20df134099bcbebe7f9a11f05ceddf74a6b2a9
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MyPaymentsAPI
|
|
11
|
+
|
|
12
|
+
Wraps Stripe. Agents create Checkout URLs, paste them into the frontend, customers pay on Stripe-hosted pages. MyAPI never custodies funds — Stripe is the merchant of record on your connected account.
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
<!-- llm:start -->
|
|
16
|
+
**Bring your own Stripe (T0).** `myapi payments connect --stripe-key <sk_...>` links your existing Stripe account with your own secret key. The key is validated live against Stripe, stored encrypted, and never echoed. Your Stripe account stays the merchant of record. (Connect Express / MyAPI-onboarded accounts — "T1" — are not yet available; the backend returns `501 T1_DEFERRED`.)
|
|
17
|
+
|
|
18
|
+
**One verb covers one-off and recurring.** `myapi payments charge --amount 9.99` creates a one-off Checkout URL. Add `--every month` (or `--every year`) and the same verb creates a subscription Checkout URL instead. No separate `subscribe` verb. `--amount` is in **dollars** (e.g. `19` or `9.99`) and must be positive.
|
|
19
|
+
|
|
20
|
+
**Charge returns a hosted Stripe Checkout URL.** The agent sends the customer to that `checkout_url` — paste it into a frontend, an email, or a redirect. The card-entry surface is owned entirely by Stripe Checkout (SAQ-A scope only); MyAPI infra never touches raw card data.
|
|
21
|
+
|
|
22
|
+
**Optional charge fields:** `--description <text>` (line-item label), `--email <addr>` (pre-fill the customer's email), `--success-url <url>` / `--cancel-url <url>` (where Checkout redirects after the session).
|
|
23
|
+
|
|
24
|
+
**Refunds are full only.** `myapi payments refund <charge_id>` issues a full refund. Partial refunds are not supported.
|
|
25
|
+
<!-- llm:end -->
|
|
26
|
+
|
|
27
|
+
## Commands
|
|
28
|
+
<!-- generated:start -->
|
|
29
|
+
| Command | What it does |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `myapi payments connect --stripe-key <sk_...>` | Link your own Stripe account (T0 — bring your own key) |
|
|
32
|
+
| `myapi payments status` | Show the org's Stripe connection status |
|
|
33
|
+
| `myapi payments charge --amount <usd> [--every month|year] [--description <s>] [--email <addr>] [--success-url <url>] [--cancel-url <url>]` | Create a charge → hosted Stripe Checkout URL |
|
|
34
|
+
| `myapi payments list` | List charges in your org |
|
|
35
|
+
| `myapi payments get <charge_id>` | Inspect a charge |
|
|
36
|
+
| `myapi payments refund <charge_id>` | Full refund (no partial) |
|
|
37
|
+
<!-- generated:end -->
|
|
38
|
+
|
|
39
|
+
## Examples
|
|
40
|
+
<!-- llm:start -->
|
|
41
|
+
```bash
|
|
42
|
+
# ── Setup: connect your Stripe account (T0 — bring your own key) ─────────────
|
|
43
|
+
|
|
44
|
+
myapi payments connect --stripe-key sk_live_abcd1234...
|
|
45
|
+
# → Stripe connected. Your existing Stripe account stays the merchant of record.
|
|
46
|
+
|
|
47
|
+
myapi payments status
|
|
48
|
+
# → Tier / Stripe account / onboarding status
|
|
49
|
+
|
|
50
|
+
# ── Take a one-off payment ──────────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
myapi payments charge \
|
|
53
|
+
--amount 9.99 \
|
|
54
|
+
--description "Pro plan upgrade" \
|
|
55
|
+
--email customer@example.com
|
|
56
|
+
# → Charge created: pay_... — returns a hosted Stripe Checkout URL.
|
|
57
|
+
# Send the customer to that checkout_url (frontend, email, redirect).
|
|
58
|
+
|
|
59
|
+
# ── Take a recurring payment (subscription) ────────────────────────────────
|
|
60
|
+
|
|
61
|
+
myapi payments charge \
|
|
62
|
+
--amount 29 --every month \
|
|
63
|
+
--description "Pro plan" \
|
|
64
|
+
--success-url https://acme.com/thanks \
|
|
65
|
+
--cancel-url https://acme.com/pricing
|
|
66
|
+
|
|
67
|
+
# ── Lifecycle ───────────────────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
myapi payments list
|
|
70
|
+
myapi payments get <charge_id>
|
|
71
|
+
myapi payments refund <charge_id>
|
|
72
|
+
```
|
|
73
|
+
<!-- llm:end -->
|
|
74
|
+
|
|
75
|
+
## What's NOT available
|
|
76
|
+
|
|
77
|
+
- **T1 (MyAPI-onboarded Connect Express).** `connect` only accepts your own `sk_...` key today; T1 returns `501 T1_DEFERRED`.
|
|
78
|
+
- A product catalog as a MyAPI/Stripe resource — pass `--amount` inline on each charge.
|
|
79
|
+
- Coupons, discounts, promotion codes.
|
|
80
|
+
- Stripe Tax integration.
|
|
81
|
+
- Partial refunds.
|
|
82
|
+
- Multi-currency on a single charge.
|
|
83
|
+
- Customer object as a first-class resource (Stripe tracks by email; `my-crm-api` has the engagement view).
|
|
84
|
+
|
|
85
|
+
Run `myapi payments --help` or `myapi payments <subcommand> --help` for full flag reference.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "my-payments-api",
|
|
3
|
+
"description": "Take payments with Stripe Checkout. Connect your Stripe account, create one-off or recurring charges, and refund — hosted checkout, no card handling.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"status": "preview",
|
|
6
|
+
"published": true
|
|
7
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
# my-people-api
|
|
3
|
+
|
|
4
|
+
Queryable contact database for B2B targeting. Search people by industry, seniority, function, country, or keyword and get back structured results with embedded company snapshots.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
- Filter the people database by attributes (industry, seniority, function, country, ...)
|
|
9
|
+
- Fetch a single person with embedded company context
|
|
10
|
+
- Feed results into `my-audience-api` to save reusable target lists
|
|
11
|
+
- Pair with `my-email-api` for outbound campaigns
|
|
12
|
+
|
|
13
|
+
## Quickstart
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Find target prospects
|
|
17
|
+
myapi people search --industry saas --seniority vp,c_level --country US --limit 20
|
|
18
|
+
|
|
19
|
+
# Single person (with embedded company)
|
|
20
|
+
myapi people get person_01
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Authentication
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
export MYAPI_KEY=mak_...
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Requires `api_key` and `org_id` from **myapihq**.
|
|
30
|
+
|
|
31
|
+
## Documentation
|
|
32
|
+
|
|
33
|
+
Full filter contract and audience integration: see `SKILL.md`.
|
|
34
|
+
|
|
35
|
+
Run `myapi people --help` for inline reference.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: my-people-api
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: >
|
|
5
|
+
Contact database backed by the Goldfox crawl. Filter people by Goldfox confidence tier, seniority, email type, country, link confidence, plus rich behavioral company signals (has_c_level, has_careers_page, has_decision_maker, etc.). The targeting layer for outbound campaigns.
|
|
6
|
+
triggers: [people, contacts, leads, prospects, search, filter, goldfox, decision-makers, c-level, b2b targeting, corporate email]
|
|
7
|
+
checksum: sha256-a4b594a30cc06d2f40fe26c594c1cb6962d91c4dbcc0625210d45a3faa27336e
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MyPeopleAPI
|
|
11
|
+
|
|
12
|
+
A queryable contact database for B2B targeting, sourced from the **Goldfox** crawl. The data model is signal-rich: every row carries a Goldfox confidence tier, a per-link confidence score, an email type classification, and the embedded company's behavioral signals (has_c_level, has_careers_page, etc.). Filter on those signals to get high-precision target lists.
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
<!-- llm:start -->
|
|
16
|
+
The database returns people with their embedded company. Use when:
|
|
17
|
+
|
|
18
|
+
- Building an outbound list with strong precision controls (e.g. only corporate-email c_levels in DE)
|
|
19
|
+
- Filtering for buying signals (companies with careers/investors/shop pages, decision-makers present)
|
|
20
|
+
- Combining with `my-audience-api` to save a filter snapshot for reuse across campaigns
|
|
21
|
+
|
|
22
|
+
Filter contract — shared with `my-company-api` and the `filter` field of `my-audience-api`. OR within an array; AND across fields. **Empty filter = all rows with default confidence=high (Goldfox's curated tier).**
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"confidence": ["high"],
|
|
27
|
+
"country": ["US", "DE"],
|
|
28
|
+
"country_consistent": true,
|
|
29
|
+
"seniority": ["c_level", "vp_director"],
|
|
30
|
+
"email_type": ["corporate"],
|
|
31
|
+
"tld_class": ["cctld"],
|
|
32
|
+
"has_c_level": true,
|
|
33
|
+
"has_decision_maker": true,
|
|
34
|
+
"has_careers_page": true,
|
|
35
|
+
"is_registered_entity": true,
|
|
36
|
+
"min_headcount": 5,
|
|
37
|
+
"min_source_count": 3,
|
|
38
|
+
"min_link_confidence": 0.8,
|
|
39
|
+
"keyword": "platform",
|
|
40
|
+
"limit": 100,
|
|
41
|
+
"offset": 0
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Allowed values:
|
|
46
|
+
- **confidence**: `high` (default — 96.4% of dataset, no UGC) / `low` (UGC source — spot-check) / `very_low` (UGC + freemail mismatch — usually drop)
|
|
47
|
+
- **seniority**: `c_level`, `vp_director`, `manager`, `senior_ic`, `ic`
|
|
48
|
+
- **email_type**: `corporate`, `freemail`, `role_based`, `other_corporate`
|
|
49
|
+
- **tld_class**: `cctld`, `generic`, `vanity`, `low_trust`, `other`
|
|
50
|
+
- **country**: ISO 3166-1 alpha-2 (US, DE, GB, …) — consensus across TLD + address + phone
|
|
51
|
+
- **keyword**: case-insensitive substring on the row's domain (NOT name or title)
|
|
52
|
+
- **link_confidence**: 0–1 per person; 1.0 = email-domain match (definitive), 0.5 = strong, lower = weak
|
|
53
|
+
<!-- llm:end -->
|
|
54
|
+
|
|
55
|
+
## Commands
|
|
56
|
+
<!-- generated:start -->
|
|
57
|
+
| Command | What it does |
|
|
58
|
+
|---|---|
|
|
59
|
+
| `myapi people search [--confidence <csv>] [--country <csv>] [--seniority <csv>] [--email-type <csv>] [--tld-class <csv>] [--has-c-level] [--has-decision-maker] [--has-careers-page] [--has-investors-page] [--has-shop-page] [--is-registered-entity] [--country-consistent] [--keyword <text>] [--min-headcount N] [--min-source-count N] [--min-link-confidence 0..1] [--limit N] [--offset N]` | Filter people; returns id/name/email/domain/country/link_conf table |
|
|
60
|
+
| `myapi people get <person_id>` | Get a single person with embedded company |
|
|
61
|
+
<!-- generated:end -->
|
|
62
|
+
|
|
63
|
+
CSV-flag values use OR within (e.g. `--seniority c_level,vp_director` is `seniority IN (c_level, vp_director)`). Boolean flags are presence-only (`--has-c-level` enables it; omit to leave unfiltered).
|
|
64
|
+
|
|
65
|
+
## Examples
|
|
66
|
+
<!-- llm:start -->
|
|
67
|
+
```bash
|
|
68
|
+
# 1. Decision-makers in DE/FR/GB with corporate emails
|
|
69
|
+
myapi people search \
|
|
70
|
+
--seniority c_level,vp_director \
|
|
71
|
+
--country DE,FR,GB \
|
|
72
|
+
--email-type corporate \
|
|
73
|
+
--limit 20
|
|
74
|
+
|
|
75
|
+
# 2. High-precision filter: definitive link + registered entity + careers signal
|
|
76
|
+
myapi people search \
|
|
77
|
+
--min-link-confidence 0.9 \
|
|
78
|
+
--is-registered-entity \
|
|
79
|
+
--has-careers-page \
|
|
80
|
+
--country US
|
|
81
|
+
|
|
82
|
+
# 3. Single person with full company context
|
|
83
|
+
myapi people get p_MTdlc2llY2xlLmZy.0
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### End-to-end recipe — outbound campaign target list
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Build the target audience (saved filter)
|
|
90
|
+
AID=$(myapi audience create "EU decision makers w/ careers signal" \
|
|
91
|
+
--source people \
|
|
92
|
+
--filter '{"seniority":["c_level","vp_director"],"country":["DE","FR","GB"],"email_type":["corporate"],"has_careers_page":true}' \
|
|
93
|
+
--json | jq -r .id)
|
|
94
|
+
|
|
95
|
+
# Pull members for inspection
|
|
96
|
+
myapi audience members $AID --limit 100 --json > targets.json
|
|
97
|
+
```
|
|
98
|
+
<!-- llm:end -->
|
|
99
|
+
|
|
100
|
+
## Notes
|
|
101
|
+
|
|
102
|
+
- The dataset is the Goldfox crawl — multi-million-row corporate contact data with provenance signals. Filter quality matters: defaults to `confidence=high` gives 96.4% of rows by count, but it's the curated tier; widening with `confidence=low` brings UGC rows that need spot-checking.
|
|
103
|
+
- `seniority`, `email_type`, and `min_link_confidence` are people-only — silently ignored on `my-company-api` and on audiences with `--source company`.
|
|
104
|
+
- `keyword` matches the row's **domain**, not name/title. Use `--keyword acme` to find people whose domain contains "acme".
|
|
105
|
+
- For a persistent target list, use `my-audience-api` (snapshot the filter; re-evaluate on `audience refresh`).
|
|
106
|
+
|
|
107
|
+
Run `myapi people --help` for full flag reference.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "my-people-api",
|
|
3
|
+
"description": "Contact database backed by the Goldfox crawl. Filter people by confidence tier, seniority, email type, country, link confidence, plus rich behavioral company signals (has_c_level, has_careers_page, has_decision_maker). The targeting layer for outbound campaigns.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"status": "preview",
|
|
6
|
+
"published": true
|
|
7
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# my-pixel-api
|
|
2
|
+
|
|
3
|
+
Tracking pixel + identity resolution for MyAPI funnels and email. Capture visits, events, and stitch known users to anonymous sessions — the analytics layer that closes the loop between outbound campaigns and on-page behavior.
|
|
4
|
+
|
|
5
|
+
## What it does
|
|
6
|
+
|
|
7
|
+
- Per-org **visits** and **events** read from the pixel data layer
|
|
8
|
+
- **Identity resolution** — given a known identifier (email, user_id), return the anonymous sessions it's been seen in
|
|
9
|
+
- **Interactions** — fine-grained activity stream across sessions
|
|
10
|
+
- **Audience geo samples** — country/region distribution for a visitor pool
|
|
11
|
+
- Cross-domain identity bridging via the cookie-bridge pixel
|
|
12
|
+
|
|
13
|
+
## Quickstart
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
myapi pixel visits --limit 50
|
|
17
|
+
myapi pixel events --kind page_view
|
|
18
|
+
myapi pixel identity alice@example.com
|
|
19
|
+
myapi pixel interactions --since 24h
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Authentication
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
export MYAPI_KEY=mak_...
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Requires `api_key` and `org_id` from **myapihq**.
|
|
29
|
+
|
|
30
|
+
## Documentation
|
|
31
|
+
|
|
32
|
+
Visit/event shapes, identity resolution semantics, retention windows, and CRM auto-ingest contract: see `SKILL.md`.
|
|
33
|
+
|
|
34
|
+
Run `myapi pixel --help` for inline reference.
|
|
35
|
+
|
|
36
|
+
## Status
|
|
37
|
+
|
|
38
|
+
**Skill content is draft; backend wiring of the agent-facing reads is in progress.** When pixel data lands in `myapi crm contacts/{id}/events` via the planned `pixel_visit` event ingest, this skill ships as published.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: my-pixel-api
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: >
|
|
5
|
+
Tracking pixel + identity resolution for MyAPI funnels and email. Capture visits and events, resolve known users to anonymous sessions, stream interaction events for analytics. Pairs with mycrmapi for auto-ingest of pixel_visit events on known contacts.
|
|
6
|
+
triggers: [pixel, analytics, tracking, visit, event, identity, session, attribution, geo, open pixel]
|
|
7
|
+
checksum: sha256-1e8284fbf546ad1bdff32790f56f8c524a19e0b80b92cc6d612ce15295632c9f
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MyPixelAPI
|
|
11
|
+
|
|
12
|
+
A lightweight pixel data layer for funnels published via **myfunnelapi** and emails sent via **myemailapi**. Reads visits, events, identity resolutions, and interaction streams. The analytics half of the loop between outbound (email/funnel) and the CRM.
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
<!-- llm:start -->
|
|
16
|
+
|
|
17
|
+
### What lands in the pixel layer
|
|
18
|
+
|
|
19
|
+
- **Visits** — page-visit records scoped to a website host (`from_url`, `to_url`, `pixel_id`, timestamp). `--website <domain>` is required.
|
|
20
|
+
- **Events** — typed engagement events: `sent`, `open`, `click`, `page_visit`. Requires at least one filter: `--campaign-id` or `--domain`.
|
|
21
|
+
- **Interactions** — a unified timeline of visits + events. Requires at least one filter: `--website`, `--campaign-id`, or `--domain`.
|
|
22
|
+
- **Identity** — given a `pixel_id` plus the `--website <domain>` it was seen on, resolve its identity graph (`{uuid, is_resolved, nodes, …}`).
|
|
23
|
+
- **Audience** — a geographic distribution sample of the org's pixel audience (`myapi pixel audience`, no subcommand).
|
|
24
|
+
|
|
25
|
+
### Identity stitching
|
|
26
|
+
|
|
27
|
+
The cookie-bridge pixel (`/t/p`) is a cross-domain pixel used to stitch an anonymous session on one MyAPI funnel to the same browser on another. The open-pixel (`/t/o`) is the 1x1 transparent gif embedded in outbound email and resolves the email recipient's session when they open the mail.
|
|
28
|
+
|
|
29
|
+
### CRM auto-ingest (when wired)
|
|
30
|
+
|
|
31
|
+
When pixel `identify` events fire with a known email, the CRM service auto-creates / upserts a contact and writes a `pixel_visit` event on its timeline. Today this hook lives in the hypersearch service and needs to move to the integrated stack — until then, pixel data and CRM data live in separate stores.
|
|
32
|
+
|
|
33
|
+
### Retention
|
|
34
|
+
|
|
35
|
+
Pixel data lives ~90 days hot; aggregated geo/audience samples persist longer. Don't depend on individual-event-level data being available indefinitely — promote anything you need long-term into the CRM as a custom event.
|
|
36
|
+
|
|
37
|
+
### When to use
|
|
38
|
+
|
|
39
|
+
- **Campaign attribution** — did the people you emailed actually visit?
|
|
40
|
+
- **Funnel optimization** — which page is dropping off?
|
|
41
|
+
- **Audience definition** — build a Goldfox/CRM filter from observed visit behavior
|
|
42
|
+
- **Re-engagement** — pull the list of contacts whose `pixel_visit` is more than N days old
|
|
43
|
+
<!-- llm:end -->
|
|
44
|
+
|
|
45
|
+
## Commands
|
|
46
|
+
<!-- generated:start -->
|
|
47
|
+
| Command | What it does |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `myapi pixel visits --website <domain> [--from <iso>] [--to <iso>] [--limit N] [--offset N]` | Page-visit timeline scoped to a website host |
|
|
50
|
+
| `myapi pixel events (--campaign-id <id> \| --domain <domain>) [--from <iso>] [--to <iso>] [--limit N] [--offset N]` | Engagement events (sent / open / click / page_visit). Requires at least one filter: `--campaign-id` or `--domain` |
|
|
51
|
+
| `myapi pixel interactions [--website <domain>] [--campaign-id <id>] [--domain <domain>] [--from <iso>] [--to <iso>] [--limit N] [--offset N]` | Unified timeline of visits + events |
|
|
52
|
+
| `myapi pixel identity <pixel_id> --website <domain>` | Resolve a pixel ID's identity graph (returns `{uuid, is_resolved, nodes, …}`) |
|
|
53
|
+
| `myapi pixel audience` | Geographic distribution sample of your pixel audience |
|
|
54
|
+
<!-- generated:end -->
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
<!-- llm:start -->
|
|
58
|
+
```bash
|
|
59
|
+
# Page visits on a funnel host (--website is required for visits)
|
|
60
|
+
myapi pixel visits --website acme.com --limit 50
|
|
61
|
+
|
|
62
|
+
# Engagement events for a campaign (event_type: sent | open | click | page_visit)
|
|
63
|
+
myapi pixel events --campaign-id q2-launch --from 2026-06-01 --to 2026-06-30
|
|
64
|
+
|
|
65
|
+
# Events by domain instead of campaign
|
|
66
|
+
myapi pixel events --domain acme.com --limit 100
|
|
67
|
+
|
|
68
|
+
# Unified timeline (visits + events) — needs at least one filter
|
|
69
|
+
myapi pixel interactions --website acme.com
|
|
70
|
+
|
|
71
|
+
# Resolve a pixel ID's identity graph (--website is required)
|
|
72
|
+
myapi pixel identity px_abc123 --website acme.com
|
|
73
|
+
# → { "uuid": "...", "is_resolved": true, "nodes": [ ... ] }
|
|
74
|
+
|
|
75
|
+
# Geographic distribution sample of the org's pixel audience
|
|
76
|
+
myapi pixel audience
|
|
77
|
+
```
|
|
78
|
+
<!-- llm:end -->
|
|
79
|
+
|
|
80
|
+
## Notes
|
|
81
|
+
|
|
82
|
+
- **Privacy.** Pixel data captures sessions, not personal info beyond what your funnel/email forms collect. Identity resolution only works when a known identifier was passed in via your code or the cookie-bridge.
|
|
83
|
+
- **No write API for synthetic events** — the pixel records what the embedded JS/email-pixel observes. To inject custom timeline entries, use `myapi crm contacts/{id}/events` instead (when reserved-kind allows; today event writes are platform-only).
|
|
84
|
+
- **`my-crm-api` is the durable record.** Pixel data ages out at ~90 days; CRM events are permanent. If a behavioral signal matters for long-term targeting, promote it into the CRM.
|
|
85
|
+
|
|
86
|
+
Run `myapi pixel --help` for inline reference.
|
|
87
|
+
|
|
88
|
+
## Status
|
|
89
|
+
|
|
90
|
+
**Backend reads are GA; agent-facing skill content is draft.** This skill publishes (status flips from `planned` to `ga` in `services.ts`) once pixel → CRM auto-ingest is wired so the cross-primitive examples above resolve end-to-end.
|
|
File without changes
|