@myapihq/cli 2.4.1 → 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/payments.js +12 -2
- package/dist/commands/setup.d.ts +1 -0
- package/dist/commands/setup.js +51 -2
- 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,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
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
# my-queue-api
|
|
3
|
+
|
|
4
|
+
A durable job queue. Enqueue work and have it delivered to your HTTP consumer with retry/backoff, a concurrency cap, and a dependency DAG — no broker to run.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
- Named queues, each bound to an HTTP `consumer_url`
|
|
9
|
+
- Jobs retried with backoff up to `max_attempts`, then dead-lettered
|
|
10
|
+
- `max_concurrency` cap on in-flight jobs
|
|
11
|
+
- Idempotent enqueue via `dedup_key`
|
|
12
|
+
- Delayed jobs (`delay_seconds`) and a dependency DAG (`depends_on`)
|
|
13
|
+
|
|
14
|
+
## Quickstart
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
myapi queue create thumbnails --consumer-url https://your-handler.example.com
|
|
18
|
+
myapi queue enqueue thumbnails --payload '{"asset_id":"a_123"}' --dedup-key a_123
|
|
19
|
+
myapi queue jobs thumbnails
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Authentication
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
export MYAPI_KEY=mak_...
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Requires `api_key` + `org_id` from **myapihq**.
|
|
29
|
+
|
|
30
|
+
## Documentation
|
|
31
|
+
|
|
32
|
+
Full command reference and the queue/workflow/task decision guide: see `SKILL.md`.
|
|
33
|
+
|
|
34
|
+
Run `myapi queue --help` for inline reference.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: my-queue-api
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: >
|
|
5
|
+
Durable job queue — enqueue work and have it retried against your HTTP consumer, with concurrency caps and a dependency DAG.
|
|
6
|
+
triggers: [queue, job queue, background job, enqueue, retry, async work, dead letter, delayed job, concurrency]
|
|
7
|
+
checksum: sha256-528a48bc9adcde7c48ad7208db7796ec37032f6df31bf5a2ca1f2bf63f643fe9
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MyQueueAPI
|
|
11
|
+
|
|
12
|
+
A queue is a named, durable pipeline of jobs. Each queue has an HTTP `consumer_url`; every job is POSTed there, and a 2xx response succeeds the job. Failed jobs retry with backoff up to `max_attempts`, then dead-letter.
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
<!-- llm:start -->
|
|
16
|
+
`queue` is the **durable async machine work** layer. Use it when work must run reliably, eventually — not inline with the request that triggered it.
|
|
17
|
+
|
|
18
|
+
A queue is created with:
|
|
19
|
+
|
|
20
|
+
| Field | Meaning |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `consumer_url` | HTTP(S) endpoint each job payload is POSTed to. A 2xx succeeds the job. |
|
|
23
|
+
| `max_attempts` | Retries before a job dead-letters (default 5). |
|
|
24
|
+
| `max_concurrency` | Max jobs dispatched at once (default 5). |
|
|
25
|
+
|
|
26
|
+
A job carries an arbitrary JSON `payload` (≤256 KB). Jobs support:
|
|
27
|
+
|
|
28
|
+
- `dedup_key` — idempotency: a repeated key returns the existing job.
|
|
29
|
+
- `delay_seconds` — hold the job before it becomes eligible.
|
|
30
|
+
- `depends_on` — job ids this job waits on. Immutable — a DAG by construction. A job with unsucceeded `depends_on` starts blocked.
|
|
31
|
+
|
|
32
|
+
**queue vs workflow vs task** — see `docs/orchestration-decision-guide.md`. Short version: `workflow` reacts to inbound webhooks inline; `queue` runs durable retried machine work; `task` is for work that needs an agent/human decision.
|
|
33
|
+
<!-- llm:end -->
|
|
34
|
+
|
|
35
|
+
## Commands
|
|
36
|
+
<!-- generated:start -->
|
|
37
|
+
| Command | What it does |
|
|
38
|
+
|---|---|
|
|
39
|
+
| `myapi queue create <name> --consumer-url <url> [--max-attempts <n>] [--max-concurrency <n>]` | Create a queue |
|
|
40
|
+
| `myapi queue list` | List queues in your org |
|
|
41
|
+
| `myapi queue get <name>` | Show a queue's retry/concurrency policy |
|
|
42
|
+
| `myapi queue enqueue <name> --payload <json> [--dedup-key <k>] [--delay <s>] [--depends-on <id,id>]` | Enqueue a job |
|
|
43
|
+
| `myapi queue jobs <name> [--status <s>] [--limit <n>]` | List a queue's jobs |
|
|
44
|
+
| `myapi queue job <job_id>` | Show a single job's status |
|
|
45
|
+
<!-- generated:end -->
|
|
46
|
+
|
|
47
|
+
## Examples
|
|
48
|
+
<!-- llm:start -->
|
|
49
|
+
```bash
|
|
50
|
+
# 1. Create a queue whose jobs POST to your handler
|
|
51
|
+
myapi queue create thumbnails \
|
|
52
|
+
--consumer-url https://fn.myapi.com/<org>/<fn_id> \
|
|
53
|
+
--max-attempts 5 --max-concurrency 10
|
|
54
|
+
|
|
55
|
+
# 2. Enqueue work — idempotent on --dedup-key
|
|
56
|
+
myapi queue enqueue thumbnails \
|
|
57
|
+
--payload '{"asset_id":"a_123","size":256}' \
|
|
58
|
+
--dedup-key a_123-256
|
|
59
|
+
|
|
60
|
+
# 3. A job that waits on others (DAG)
|
|
61
|
+
J1=$(myapi queue enqueue build --payload '{"step":1}' --json | jq -r .id)
|
|
62
|
+
myapi queue enqueue build --payload '{"step":2}' --depends-on $J1
|
|
63
|
+
|
|
64
|
+
# 4. Inspect
|
|
65
|
+
myapi queue jobs thumbnails --status dead
|
|
66
|
+
myapi queue job <job_id>
|
|
67
|
+
```
|
|
68
|
+
<!-- llm:end -->
|
|
69
|
+
|
|
70
|
+
## Notes
|
|
71
|
+
|
|
72
|
+
- A 2xx from the `consumer_url` succeeds the job; anything else counts as a failed attempt.
|
|
73
|
+
- After `max_attempts` a job goes to `status: dead` (the dead-letter state) — it is not retried further.
|
|
74
|
+
- Job status values: `pending`, `blocked`, `running`, `succeeded`, `dead`.
|
|
75
|
+
- `depends_on` is immutable: the DAG is declared at enqueue time.
|
|
76
|
+
- `payload` is capped at 256 KB.
|
|
77
|
+
|
|
78
|
+
Run `myapi queue --help` for the full flag reference.
|
|
File without changes
|
|
@@ -4,7 +4,7 @@ version: 1.0.0
|
|
|
4
4
|
description: >
|
|
5
5
|
Edge-hosted asset storage. Upload local files (.png/.jpg/.gif/.webp) directly, or have the server fetch from a public URL. Each asset gets a stable public CDN URL.
|
|
6
6
|
triggers: [storage, upload, ingest, asset, cdn, image hosting, file upload, get-url, download, public url]
|
|
7
|
-
checksum: sha256-
|
|
7
|
+
checksum: sha256-80f78e83d086ec5e312abbb2fc7c85a2c9a87043a94b7e4fccc13902d5455df1
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# MyStorageAPI
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
# my-task-api
|
|
3
|
+
|
|
4
|
+
An agent-task queue. File units of work, rank them by score, claim one under a lease, then resolve or fail it — the substrate for an autonomous agent loop.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
- File tasks with a short triage `description` and a full Markdown `body` tier
|
|
9
|
+
- Ranked `list` — the agent-loop hot path, with a backlog signal
|
|
10
|
+
- Lease-based `claim` / `extend` — crash-safe, auto-reverts on expiry
|
|
11
|
+
- Terminal `resolve` / `fail` / `cancel`, with dependency cascade
|
|
12
|
+
- `depends_on` DAG, `dedup_key` idempotency, `assignee` magic-link email
|
|
13
|
+
- `resolve_on` — auto-resolve when a matching platform event fires
|
|
14
|
+
|
|
15
|
+
## Quickstart
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
myapi task create "Review the vendor contract" --body @notes.md --importance high
|
|
19
|
+
myapi task list
|
|
20
|
+
myapi task get <id> --body
|
|
21
|
+
myapi task claim <id> && myapi task resolve <id>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Authentication
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
export MYAPI_KEY=mak_...
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Requires `api_key` + `org_id` from **myapihq**.
|
|
31
|
+
|
|
32
|
+
## Documentation
|
|
33
|
+
|
|
34
|
+
Full command reference, the agent loop, and the workflow/queue/task decision guide: see `SKILL.md`.
|
|
35
|
+
|
|
36
|
+
Run `myapi task --help` for inline reference.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: my-task-api
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: >
|
|
5
|
+
Agent-task queue — file units of work, rank them, claim under a lease, then resolve, fail, or cancel. The agent-loop hot path.
|
|
6
|
+
triggers: [task, task queue, agent loop, work queue, claim task, resolve task, lease, backlog, to-do, assignee]
|
|
7
|
+
checksum: sha256-ead9513eafbdd4d384a3cb297facf934f786f7067028c75cc08ef2ba1ac61cf7
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# MyTaskAPI
|
|
11
|
+
|
|
12
|
+
A task is a unit of work that needs an agent or human to act on it. Tasks are ranked by score; a worker claims one under a time-limited lease, does the work, then resolves or fails it. This is distinct from `my-workflow-api` (event→action automation) and `my-queue-api` (durable machine jobs).
|
|
13
|
+
|
|
14
|
+
## Capabilities
|
|
15
|
+
<!-- llm:start -->
|
|
16
|
+
`task` is the **"this needs a decision"** layer — the agent-loop hot path.
|
|
17
|
+
|
|
18
|
+
The loop is: **`list` → `get <id> --body` → `claim` → `resolve`/`fail`**.
|
|
19
|
+
|
|
20
|
+
- `list` returns the top open tasks ranked by score, projected to `{id, description, score}`, plus a backlog signal — `Showing N of M open task(s)`. It is deliberately small; do not expect the full task.
|
|
21
|
+
- `get <id>` returns the full task object. It does **not** fetch the Markdown body.
|
|
22
|
+
- `get <id> --body` additionally fetches the **body tier** — the full Markdown context. Read it once, when you commit to a task.
|
|
23
|
+
- `claim <id>` takes an atomic lease (default 10 min). Lease expiry auto-reverts the task to open, so a crashed worker never strands a task. Heartbeat long work with `extend`.
|
|
24
|
+
- `resolve <id>` is terminal and unblocks dependents. `fail <id> --reason` is terminal and does not auto-retry. `cancel <id>` is terminal, distinct from fail.
|
|
25
|
+
|
|
26
|
+
Task fields at creation: `description` (~100-token triage key), `body` (full Markdown), `importance`, `due`, `assignee` (emails them a magic link), `tags`, `depends_on` (immutable DAG — a task with unresolved deps starts blocked), `dedup_key` (idempotent), `resolve_on` (an event matcher — a matching platform event auto-resolves the task), `source`.
|
|
27
|
+
|
|
28
|
+
**task vs workflow vs queue** — see `docs/orchestration-decision-guide.md`.
|
|
29
|
+
<!-- llm:end -->
|
|
30
|
+
|
|
31
|
+
## Commands
|
|
32
|
+
<!-- generated:start -->
|
|
33
|
+
| Command | What it does |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `myapi task create "<description>" [--body <md\|@file>] [--importance <i>] [--due <rfc3339>] [--assignee <email>] [--tag <t,t>] [--depends-on <id,id>] [--resolve-on <event[:field=value]>]` | File a task |
|
|
36
|
+
| `myapi task list [--status <s>] [--tag <t>] [--importance <i>] [--limit <n>]` | Top open tasks, ranked |
|
|
37
|
+
| `myapi task get <id> [--body]` | Show a task; `--body` also fetches the body tier |
|
|
38
|
+
| `myapi task claim <id> [--lease <s>] [--worker <name>]` | Take an atomic lease |
|
|
39
|
+
| `myapi task extend <id> [--lease <s>]` | Heartbeat a live claim |
|
|
40
|
+
| `myapi task resolve <id>` | Resolve a task (terminal) |
|
|
41
|
+
| `myapi task fail <id> --reason "<why>"` | Fail a task (terminal) |
|
|
42
|
+
| `myapi task cancel <id>` | Cancel a task (terminal) |
|
|
43
|
+
<!-- generated:end -->
|
|
44
|
+
|
|
45
|
+
## Examples
|
|
46
|
+
<!-- llm:start -->
|
|
47
|
+
```bash
|
|
48
|
+
# File a task with full Markdown context from a file
|
|
49
|
+
myapi task create "Review the Q3 vendor contract" \
|
|
50
|
+
--body @contract-notes.md --importance high --due 2026-06-01
|
|
51
|
+
|
|
52
|
+
# The agent loop
|
|
53
|
+
myapi task list # ranked; pick the top id
|
|
54
|
+
myapi task get <id> --body # read the body, once, on commit
|
|
55
|
+
myapi task claim <id> --worker agent-7 # lease it
|
|
56
|
+
# ... do the work, heartbeat if long ...
|
|
57
|
+
myapi task extend <id>
|
|
58
|
+
myapi task resolve <id> # or: myapi task fail <id> --reason "blocked on legal"
|
|
59
|
+
|
|
60
|
+
# Event-driven: auto-resolve when a matching platform event fires
|
|
61
|
+
myapi task create "Ship once payment clears" \
|
|
62
|
+
--resolve-on payment.succeeded:order_id=o_42
|
|
63
|
+
```
|
|
64
|
+
<!-- llm:end -->
|
|
65
|
+
|
|
66
|
+
## Notes
|
|
67
|
+
|
|
68
|
+
- `list` is the hot path — it returns a small ranked projection plus `total_open`, not full tasks.
|
|
69
|
+
- The body tier is fetched only with `get --body`. Read it once, on commit, to keep the loop token-cheap.
|
|
70
|
+
- A claim is a lease: it expires (default 10 min) and auto-reverts the task to open. Heartbeat with `extend`.
|
|
71
|
+
- `resolve` unblocks dependents; `fail` cascades to dependents that can never proceed.
|
|
72
|
+
- `resolve_on` matches platform events. Today few event kinds are emitted in production — verify the kind exists before relying on it.
|
|
73
|
+
|
|
74
|
+
Run `myapi task --help` for the full flag reference.
|
|
File without changes
|