@myapihq/cli 2.4.1 → 2.4.3

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.
Files changed (89) hide show
  1. package/dist/commands/crm/companies.js +1 -5
  2. package/dist/commands/crm/contacts.js +1 -6
  3. package/dist/commands/domain-validation.test.d.ts +1 -0
  4. package/dist/commands/domain-validation.test.js +36 -0
  5. package/dist/commands/domain.d.ts +14 -0
  6. package/dist/commands/domain.js +20 -1
  7. package/dist/commands/funnel-validation.test.d.ts +1 -0
  8. package/dist/commands/funnel-validation.test.js +86 -0
  9. package/dist/commands/funnel.d.ts +12 -0
  10. package/dist/commands/funnel.js +59 -15
  11. package/dist/commands/payments.js +12 -2
  12. package/dist/commands/setup.d.ts +1 -0
  13. package/dist/commands/setup.js +51 -2
  14. package/dist/commands/skill-checksum.test.d.ts +1 -0
  15. package/dist/commands/skill-checksum.test.js +48 -0
  16. package/dist/config-envkey.test.d.ts +1 -0
  17. package/dist/config-envkey.test.js +145 -0
  18. package/dist/config.js +41 -5
  19. package/dist/errors.js +11 -0
  20. package/dist/index.js +6 -1
  21. package/dist/sdk-transport.test.d.ts +1 -0
  22. package/dist/sdk-transport.test.js +138 -0
  23. package/dist/sdk-version.test.d.ts +1 -0
  24. package/dist/sdk-version.test.js +24 -0
  25. package/dist/skills/my-api-hq/SKILL.md +1 -1
  26. package/dist/skills/my-api-hq/claude/.claude-plugin/plugin.json +1 -0
  27. package/dist/skills/my-audience-api/README.md +40 -0
  28. package/dist/skills/my-audience-api/SKILL.md +139 -0
  29. package/dist/skills/my-audience-api/claude/.claude-plugin/plugin.json +7 -0
  30. package/dist/skills/my-audience-api/openapi/.gitkeep +0 -0
  31. package/dist/skills/my-auth-api/SKILL.md +1 -1
  32. package/dist/skills/my-auth-api/claude/.claude-plugin/plugin.json +1 -0
  33. package/dist/skills/my-company-api/README.md +35 -0
  34. package/dist/skills/my-company-api/SKILL.md +110 -0
  35. package/dist/skills/my-company-api/claude/.claude-plugin/plugin.json +7 -0
  36. package/dist/skills/my-company-api/openapi/.gitkeep +0 -0
  37. package/dist/skills/my-container-api/README.md +34 -0
  38. package/dist/skills/my-container-api/SKILL.md +77 -0
  39. package/dist/skills/my-container-api/claude/.claude-plugin/plugin.json +7 -0
  40. package/dist/skills/my-container-api/openapi/.gitkeep +0 -0
  41. package/dist/skills/my-crm-api/SKILL.md +3 -3
  42. package/dist/skills/my-crm-api/claude/.claude-plugin/plugin.json +1 -0
  43. package/dist/skills/my-database-api/SKILL.md +1 -1
  44. package/dist/skills/my-database-api/claude/.claude-plugin/plugin.json +1 -0
  45. package/dist/skills/my-domain-api/SKILL.md +1 -1
  46. package/dist/skills/my-domain-api/claude/.claude-plugin/plugin.json +1 -0
  47. package/dist/skills/my-email-api/SKILL.md +1 -1
  48. package/dist/skills/my-email-api/claude/.claude-plugin/plugin.json +1 -0
  49. package/dist/skills/my-email-verify-api/SKILL.md +1 -1
  50. package/dist/skills/my-email-verify-api/claude/.claude-plugin/plugin.json +1 -0
  51. package/dist/skills/my-function-api/SKILL.md +104 -0
  52. package/dist/skills/my-function-api/claude/.claude-plugin/plugin.json +7 -0
  53. package/dist/skills/my-funnel-api/SKILL.md +2 -2
  54. package/dist/skills/my-funnel-api/claude/.claude-plugin/plugin.json +1 -0
  55. package/dist/skills/my-git-api/SKILL.md +1 -1
  56. package/dist/skills/my-git-api/claude/.claude-plugin/plugin.json +1 -0
  57. package/dist/skills/my-image-api/SKILL.md +1 -1
  58. package/dist/skills/my-image-api/claude/.claude-plugin/plugin.json +1 -0
  59. package/dist/skills/my-llm-api/SKILL.md +6 -11
  60. package/dist/skills/my-llm-api/claude/.claude-plugin/plugin.json +1 -0
  61. package/dist/skills/my-payments-api/SKILL.md +85 -0
  62. package/dist/skills/my-payments-api/claude/.claude-plugin/plugin.json +7 -0
  63. package/dist/skills/my-people-api/README.md +35 -0
  64. package/dist/skills/my-people-api/SKILL.md +107 -0
  65. package/dist/skills/my-people-api/claude/.claude-plugin/plugin.json +7 -0
  66. package/dist/skills/my-people-api/openapi/.gitkeep +0 -0
  67. package/dist/skills/my-pixel-api/README.md +38 -0
  68. package/dist/skills/my-pixel-api/SKILL.md +90 -0
  69. package/dist/skills/my-pixel-api/claude/.claude-plugin/plugin.json +7 -0
  70. package/dist/skills/my-pixel-api/openapi/.gitkeep +0 -0
  71. package/dist/skills/my-queue-api/README.md +34 -0
  72. package/dist/skills/my-queue-api/SKILL.md +78 -0
  73. package/dist/skills/my-queue-api/claude/.claude-plugin/plugin.json +7 -0
  74. package/dist/skills/my-queue-api/openapi/.gitkeep +0 -0
  75. package/dist/skills/my-storage-api/SKILL.md +1 -1
  76. package/dist/skills/my-storage-api/claude/.claude-plugin/plugin.json +1 -0
  77. package/dist/skills/my-task-api/README.md +36 -0
  78. package/dist/skills/my-task-api/SKILL.md +74 -0
  79. package/dist/skills/my-task-api/claude/.claude-plugin/plugin.json +7 -0
  80. package/dist/skills/my-task-api/openapi/.gitkeep +0 -0
  81. package/dist/skills/my-url-to/README.md +32 -0
  82. package/dist/skills/my-url-to/SKILL.md +55 -0
  83. package/dist/skills/my-url-to/claude/.claude-plugin/plugin.json +7 -0
  84. package/dist/skills/my-url-to/openapi/.gitkeep +0 -0
  85. package/dist/skills/my-webhook-api/SKILL.md +1 -1
  86. package/dist/skills/my-webhook-api/claude/.claude-plugin/plugin.json +1 -0
  87. package/dist/skills/my-workflow-api/SKILL.md +1 -1
  88. package/dist/skills/my-workflow-api/claude/.claude-plugin/plugin.json +1 -0
  89. 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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "my-pixel-api",
3
+ "description": "Tracking pixel + identity resolution. Capture visits, events, and stitch known users to anonymous sessions.",
4
+ "version": "1.0.0",
5
+ "status": "preview",
6
+ "published": true
7
+ }
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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "my-queue-api",
3
+ "description": "Durable job queue — enqueue work and have it retried against your HTTP consumer, with concurrency caps and a dependency DAG.",
4
+ "version": "1.0.0",
5
+ "status": "preview",
6
+ "published": true
7
+ }
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-pending
7
+ checksum: sha256-80f78e83d086ec5e312abbb2fc7c85a2c9a87043a94b7e4fccc13902d5455df1
8
8
  ---
9
9
 
10
10
  # MyStorageAPI
@@ -2,5 +2,6 @@
2
2
  "name": "my-storage-api",
3
3
  "description": "Edge-hosted asset storage. Upload local files or ingest from URLs, each gets a stable public CDN URL.",
4
4
  "version": "1.0.0",
5
+ "status": "ga",
5
6
  "published": true
6
7
  }
@@ -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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "my-task-api",
3
+ "description": "Agent-task queue — file units of work, rank them, claim under a lease, then resolve, fail, or cancel. The agent-loop hot path.",
4
+ "version": "1.0.0",
5
+ "status": "preview",
6
+ "published": true
7
+ }
File without changes