@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.
Files changed (92) 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/login-validation.test.js +24 -2
  12. package/dist/commands/login.d.ts +6 -0
  13. package/dist/commands/login.js +48 -17
  14. package/dist/commands/payments.js +12 -2
  15. package/dist/commands/setup.d.ts +1 -0
  16. package/dist/commands/setup.js +53 -4
  17. package/dist/commands/skill-checksum.test.d.ts +1 -0
  18. package/dist/commands/skill-checksum.test.js +48 -0
  19. package/dist/config-envkey.test.d.ts +1 -0
  20. package/dist/config-envkey.test.js +145 -0
  21. package/dist/config.js +41 -5
  22. package/dist/errors.js +11 -0
  23. package/dist/index.js +6 -1
  24. package/dist/sdk-transport.test.d.ts +1 -0
  25. package/dist/sdk-transport.test.js +138 -0
  26. package/dist/sdk-version.test.d.ts +1 -0
  27. package/dist/sdk-version.test.js +24 -0
  28. package/dist/skills/my-api-hq/SKILL.md +1 -1
  29. package/dist/skills/my-api-hq/claude/.claude-plugin/plugin.json +1 -0
  30. package/dist/skills/my-audience-api/README.md +40 -0
  31. package/dist/skills/my-audience-api/SKILL.md +139 -0
  32. package/dist/skills/my-audience-api/claude/.claude-plugin/plugin.json +7 -0
  33. package/dist/skills/my-audience-api/openapi/.gitkeep +0 -0
  34. package/dist/skills/my-auth-api/SKILL.md +1 -1
  35. package/dist/skills/my-auth-api/claude/.claude-plugin/plugin.json +1 -0
  36. package/dist/skills/my-company-api/README.md +35 -0
  37. package/dist/skills/my-company-api/SKILL.md +110 -0
  38. package/dist/skills/my-company-api/claude/.claude-plugin/plugin.json +7 -0
  39. package/dist/skills/my-company-api/openapi/.gitkeep +0 -0
  40. package/dist/skills/my-container-api/README.md +34 -0
  41. package/dist/skills/my-container-api/SKILL.md +77 -0
  42. package/dist/skills/my-container-api/claude/.claude-plugin/plugin.json +7 -0
  43. package/dist/skills/my-container-api/openapi/.gitkeep +0 -0
  44. package/dist/skills/my-crm-api/SKILL.md +3 -3
  45. package/dist/skills/my-crm-api/claude/.claude-plugin/plugin.json +1 -0
  46. package/dist/skills/my-database-api/SKILL.md +1 -1
  47. package/dist/skills/my-database-api/claude/.claude-plugin/plugin.json +1 -0
  48. package/dist/skills/my-domain-api/SKILL.md +1 -1
  49. package/dist/skills/my-domain-api/claude/.claude-plugin/plugin.json +1 -0
  50. package/dist/skills/my-email-api/SKILL.md +1 -1
  51. package/dist/skills/my-email-api/claude/.claude-plugin/plugin.json +1 -0
  52. package/dist/skills/my-email-verify-api/SKILL.md +1 -1
  53. package/dist/skills/my-email-verify-api/claude/.claude-plugin/plugin.json +1 -0
  54. package/dist/skills/my-function-api/SKILL.md +104 -0
  55. package/dist/skills/my-function-api/claude/.claude-plugin/plugin.json +7 -0
  56. package/dist/skills/my-funnel-api/SKILL.md +2 -2
  57. package/dist/skills/my-funnel-api/claude/.claude-plugin/plugin.json +1 -0
  58. package/dist/skills/my-git-api/SKILL.md +1 -1
  59. package/dist/skills/my-git-api/claude/.claude-plugin/plugin.json +1 -0
  60. package/dist/skills/my-image-api/SKILL.md +1 -1
  61. package/dist/skills/my-image-api/claude/.claude-plugin/plugin.json +1 -0
  62. package/dist/skills/my-llm-api/SKILL.md +6 -11
  63. package/dist/skills/my-llm-api/claude/.claude-plugin/plugin.json +1 -0
  64. package/dist/skills/my-payments-api/SKILL.md +85 -0
  65. package/dist/skills/my-payments-api/claude/.claude-plugin/plugin.json +7 -0
  66. package/dist/skills/my-people-api/README.md +35 -0
  67. package/dist/skills/my-people-api/SKILL.md +107 -0
  68. package/dist/skills/my-people-api/claude/.claude-plugin/plugin.json +7 -0
  69. package/dist/skills/my-people-api/openapi/.gitkeep +0 -0
  70. package/dist/skills/my-pixel-api/README.md +38 -0
  71. package/dist/skills/my-pixel-api/SKILL.md +90 -0
  72. package/dist/skills/my-pixel-api/claude/.claude-plugin/plugin.json +7 -0
  73. package/dist/skills/my-pixel-api/openapi/.gitkeep +0 -0
  74. package/dist/skills/my-queue-api/README.md +34 -0
  75. package/dist/skills/my-queue-api/SKILL.md +78 -0
  76. package/dist/skills/my-queue-api/claude/.claude-plugin/plugin.json +7 -0
  77. package/dist/skills/my-queue-api/openapi/.gitkeep +0 -0
  78. package/dist/skills/my-storage-api/SKILL.md +1 -1
  79. package/dist/skills/my-storage-api/claude/.claude-plugin/plugin.json +1 -0
  80. package/dist/skills/my-task-api/README.md +36 -0
  81. package/dist/skills/my-task-api/SKILL.md +74 -0
  82. package/dist/skills/my-task-api/claude/.claude-plugin/plugin.json +7 -0
  83. package/dist/skills/my-task-api/openapi/.gitkeep +0 -0
  84. package/dist/skills/my-url-to/README.md +32 -0
  85. package/dist/skills/my-url-to/SKILL.md +55 -0
  86. package/dist/skills/my-url-to/claude/.claude-plugin/plugin.json +7 -0
  87. package/dist/skills/my-url-to/openapi/.gitkeep +0 -0
  88. package/dist/skills/my-webhook-api/SKILL.md +1 -1
  89. package/dist/skills/my-webhook-api/claude/.claude-plugin/plugin.json +1 -0
  90. package/dist/skills/my-workflow-api/SKILL.md +1 -1
  91. package/dist/skills/my-workflow-api/claude/.claude-plugin/plugin.json +1 -0
  92. package/package.json +8 -2
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: my-audience-api
3
+ version: 1.0.0
4
+ description: >
5
+ Saved audiences = named Goldfox-filter snapshots over the people or company database. Build a target list once, name it, reuse it across campaigns, refresh to re-evaluate against current data. The persistence layer on top of my-people-api + my-company-api.
6
+ triggers: [audience, segment, target list, saved filter, goldfox, lead list, abm list, refresh, members, prospect database]
7
+ checksum: sha256-5d9a2731d587c476eff2955241001fecb8481bbc5e567f06b8e9e76a079eda92
8
+ ---
9
+
10
+ # MyAudienceAPI
11
+
12
+ A saved audience is a **named filter snapshot** over the Goldfox people or company database. Instead of repeating the same filter every time you run a campaign, save it once, reference the audience by id, and call `refresh` to re-evaluate against current data when the underlying dataset grows.
13
+
14
+ ## Capabilities
15
+ <!-- llm:start -->
16
+ Use when:
17
+
18
+ - You'll target the same kind of list across multiple campaigns
19
+ - You want a stable id to feed into email campaigns, workflows, or external tools
20
+ - You need to know how many candidates match a filter without paging the whole result
21
+ - You want to refresh a list as new rows are added to the Goldfox crawl
22
+
23
+ Each audience has:
24
+ - `name` and optional `description`
25
+ - `source` — `"people"` or `"company"` (which database to filter against)
26
+ - `filter` — the canonical Goldfox filter (same shape as `my-people-api` / `my-company-api`)
27
+ - `member_count` — computed when filter is created or refreshed
28
+ - An `id` for retrieving members, refreshing, deleting
29
+
30
+ **Filter contract** (full Goldfox shape):
31
+
32
+ ```json
33
+ {
34
+ "confidence": ["high"],
35
+ "country": ["US", "DE"],
36
+ "country_consistent": true,
37
+ "seniority": ["c_level", "vp_director"], // people-source only
38
+ "email_type": ["corporate"], // people-source only
39
+ "tld_class": ["cctld"],
40
+ "has_c_level": true,
41
+ "has_decision_maker": true,
42
+ "has_careers_page": true,
43
+ "has_investors_page": false,
44
+ "has_shop_page": false,
45
+ "is_registered_entity": true,
46
+ "min_headcount": 5,
47
+ "min_source_count": 3,
48
+ "min_link_confidence": 0.8, // people-source only
49
+ "keyword": "platform",
50
+ "limit": 100,
51
+ "offset": 0
52
+ }
53
+ ```
54
+
55
+ OR within an array; AND across fields. Empty filter = all rows with `confidence=high` (Goldfox's curated default tier).
56
+
57
+ Allowed values:
58
+ - **confidence**: `high` (default) / `low` / `very_low`
59
+ - **seniority** (people only): `c_level`, `vp_director`, `manager`, `senior_ic`, `ic`
60
+ - **email_type** (people only): `corporate`, `freemail`, `role_based`, `other_corporate`
61
+ - **tld_class**: `cctld`, `generic`, `vanity`, `low_trust`, `other`
62
+ - **country**: ISO 3166-1 alpha-2
63
+
64
+ **Member fetch:** the response shape is `{ total, limit, offset, has_more, people?: […], companies?: […] }` — only one of `people` / `companies` is populated based on the audience's source. Use `--offset` to paginate.
65
+
66
+ **Refresh delta:** `audience refresh` returns `{ total, previous, delta, refreshed_at }` — detect newly-matched rows.
67
+ <!-- llm:end -->
68
+
69
+ ## Commands
70
+ <!-- generated:start -->
71
+ | Command | What it does |
72
+ |---|---|
73
+ | `myapi audience create <name> --source <people\|company> --filter '<json>' [--description <text>]` | Save a Goldfox filter as a named audience; returns id + initial member_count |
74
+ | `myapi audience list` | List all audiences in the org |
75
+ | `myapi audience get <id>` | Single audience (name, filter, member_count, timestamps) |
76
+ | `myapi audience update <id> [--name <x>] [--description <y>] [--filter '<json>']` | Patch name/description/filter; member_count re-evaluates if filter changes |
77
+ | `myapi audience delete <id>` | Remove an audience |
78
+ | `myapi audience members <id> [--limit N] [--offset N]` | Paged member snapshot (people or companies depending on source) |
79
+ | `myapi audience refresh <id>` | Re-evaluate filter against current data; returns delta vs previous count |
80
+ <!-- generated:end -->
81
+
82
+ ## Examples
83
+ <!-- llm:start -->
84
+ ```bash
85
+ # 1. Create the audience
86
+ AID=$(myapi audience create "EU decision makers w/ corporate emails" \
87
+ --source people \
88
+ --filter '{"seniority":["c_level","vp_director"],"country":["DE","FR","GB"],"email_type":["corporate"]}' \
89
+ --json | jq -r .id)
90
+
91
+ # 2. Inspect members
92
+ myapi audience members $AID --limit 20
93
+
94
+ # 3. Refresh after new Goldfox data lands
95
+ myapi audience refresh $AID
96
+ # → Refreshed. 1247 → 1289 (+42)
97
+
98
+ # 4. Update filter without losing the id
99
+ myapi audience update $AID \
100
+ --filter '{"seniority":["c_level","vp_director"],"country":["DE","FR","GB","NL"],"email_type":["corporate"]}'
101
+
102
+ # 5. Delete when done
103
+ myapi audience delete $AID
104
+ ```
105
+
106
+ ### End-to-end recipe — outbound campaign driven by an audience
107
+
108
+ ```bash
109
+ # Build with quality controls — definitive links + registered companies + careers signal
110
+ AID=$(myapi audience create "EU growth-stage decision makers" \
111
+ --source people \
112
+ --filter '{"seniority":["c_level","vp_director"],"country":["DE","FR","GB"],"email_type":["corporate"],"min_link_confidence":0.9,"has_careers_page":true,"is_registered_entity":true}' \
113
+ --json | jq -r .id)
114
+
115
+ # Pull all members as JSON
116
+ myapi audience members $AID --limit 100 --json > targets.json
117
+
118
+ # (later) Re-check before next batch
119
+ myapi audience refresh $AID
120
+ ```
121
+
122
+ ### Company-source audience (ABM)
123
+
124
+ ```bash
125
+ myapi audience create "EU growth-stage SaaS accounts" \
126
+ --source company \
127
+ --filter '{"country":["DE","FR","GB","NL"],"has_careers_page":true,"has_decision_maker":true,"is_registered_entity":true,"min_source_count":3}'
128
+ ```
129
+ <!-- llm:end -->
130
+
131
+ ## Notes
132
+
133
+ - The underlying dataset is the **Goldfox crawl** — multi-million-row corporate data with provenance signals. Defaults to `confidence=high` which is the curated tier.
134
+ - `audience refresh` is cheap and idempotent; call it before any campaign run that depends on a current list.
135
+ - `update --filter` REPLACES the whole filter (not merged). To shift one field, fetch the audience, merge in code, then update.
136
+ - Audiences are per-org. Two orgs can have audiences with the same name; ids are globally unique.
137
+ - Look before you delete: confirm the target with `myapi audience get <id>`, pass `--org` explicitly; delete verbs require `--yes` in non-interactive runs.
138
+
139
+ Run `myapi audience --help` for full flag reference.
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "my-audience-api",
3
+ "description": "Saved audiences = named filter snapshots over people/company database. Reuse across campaigns; refresh re-evaluates against current data.",
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
  Add authentication to apps you build on MyAPI — a managed OIDC identity provider for your app's END USERS (à la Kinde/Auth0). One auth tenant per org; register OIDC clients; sign users in with managed Google or the hosted login page; verify RS256 tokens against the tenant JWKS.
6
6
  triggers: [auth, authentication, login, sign-in, oidc, oauth, jwt, jwks, sso, google sign-in, user accounts, identity provider, kinde, auth0, clerk]
7
- checksum: sha256-pending
7
+ checksum: sha256-11dac8e8da70bd6bbf63fe11fae5adc038584dc23a09350b9e7b977a669aed41
8
8
  ---
9
9
 
10
10
  # MyAuthAPI
@@ -2,5 +2,6 @@
2
2
  "name": "my-auth-api",
3
3
  "description": "Managed OIDC identity provider for the end users of apps built on MyAPI. Per-org auth tenant + OIDC clients, RS256/JWKS, hosted login, managed Google sign-in. A Kinde alternative.",
4
4
  "version": "1.0.0",
5
+ "status": "ga",
5
6
  "published": true
6
7
  }
@@ -0,0 +1,35 @@
1
+ ---
2
+ # my-company-api
3
+
4
+ Queryable company database for account-based targeting and B2B firmographics. Search companies by industry, size, country, revenue, or keyword.
5
+
6
+ ## What it does
7
+
8
+ - Filter the company database by attributes (industry, employee_bucket, revenue_bucket, country, ...)
9
+ - Fetch a single company, optionally with embedded people for one-call enrichment
10
+ - Feed results into `my-audience-api` to save reusable account lists
11
+ - Complement `my-people-api` for combined account-based + contact-based targeting
12
+
13
+ ## Quickstart
14
+
15
+ ```bash
16
+ # Find target companies
17
+ myapi company search --industry fintech --country GB,DE --employee-bucket 51-200
18
+
19
+ # Single company with embedded people
20
+ myapi company get company_06 --include-people 5
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 company --help` for inline reference.
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: my-company-api
3
+ version: 1.0.0
4
+ description: >
5
+ Company database backed by the Goldfox crawl. Filter companies by Goldfox confidence tier, country/TLD consistency, behavioral page signals (has_careers_page, has_investors_page, has_shop_page, has_c_level, has_decision_maker), legal-entity status, headcount, and source-URL count. Account-based targeting and B2B firmographics.
6
+ triggers: [companies, accounts, firmographics, abm, search, filter, goldfox, careers signal, investors, c-level, shop, b2b targeting]
7
+ checksum: sha256-67dd4b65a9b0cc7acf7c1e4262bc66d2b58ff11ed227a24299924e0b620712f0
8
+ ---
9
+
10
+ # MyCompanyAPI
11
+
12
+ A queryable company database for account-based targeting and B2B firmographics, sourced from the **Goldfox** crawl. Filter by confidence tier, country consistency, behavioral page signals, and quality thresholds — get back companies with rich signal data (headcount estimates, source count, careers/investors/shop presence, legal-entity flag).
13
+
14
+ ## Capabilities
15
+ <!-- llm:start -->
16
+ Use when:
17
+
18
+ - Doing account-based targeting (pick companies first, find decision-makers second)
19
+ - Researching market segments by behavioral signals ("companies in DE with a careers page AND a c-level present")
20
+ - Combining with `my-audience-api` to save a company filter as a reusable audience
21
+
22
+ Filter contract — shared with `my-people-api` and the `filter` field of `my-audience-api`, minus people-only fields (`seniority`, `email_type`, `min_link_confidence`). OR within an array; AND across fields. **Empty filter = all rows with default confidence=high.**
23
+
24
+ ```json
25
+ {
26
+ "confidence": ["high"],
27
+ "country": ["US", "DE"],
28
+ "country_consistent": true,
29
+ "tld_class": ["cctld"],
30
+ "has_c_level": true,
31
+ "has_decision_maker": true,
32
+ "has_careers_page": true,
33
+ "has_investors_page": false,
34
+ "has_shop_page": false,
35
+ "is_registered_entity": true,
36
+ "min_headcount": 5,
37
+ "min_source_count": 3,
38
+ "keyword": "platform",
39
+ "include_people": 3,
40
+ "limit": 100,
41
+ "offset": 0
42
+ }
43
+ ```
44
+
45
+ Allowed values:
46
+ - **confidence**: `high` (default) / `low` / `very_low`
47
+ - **tld_class**: `cctld`, `generic`, `vanity`, `low_trust`, `other`
48
+ - **country**: ISO 3166-1 alpha-2; consensus across TLD + address + phone
49
+ - **keyword**: substring match on the company's domain
50
+ - **include_people**: 0–10; embed up to N people per company in the result
51
+
52
+ Behavioral signals (booleans):
53
+ - `has_c_level` — row has ≥1 person with seniority = c_level
54
+ - `has_decision_maker` — row has ≥1 person with seniority ∈ (c_level, vp_director)
55
+ - `has_careers_page` — `/careers`, `/jobs`, `/stellen`, `/karriere` etc. (growth-stage proxy)
56
+ - `has_investors_page` — `/investors`, `/ir/` (mature/public proxy)
57
+ - `has_shop_page` — `/shop`, `/store`, `/products`, `/cart` (e-commerce proxy)
58
+ - `is_registered_entity` — name has a recognized legal suffix (GmbH/Ltd/Inc/SARL/…)
59
+ - `country_consistent` — TLD + address + phone all agree on country (highest-trust geo)
60
+ <!-- llm:end -->
61
+
62
+ ## Commands
63
+ <!-- generated:start -->
64
+ | Command | What it does |
65
+ |---|---|
66
+ | `myapi company search [--confidence <csv>] [--country <csv>] [--country-consistent] [--tld-class <csv>] [--has-c-level] [--has-decision-maker] [--has-careers-page] [--has-investors-page] [--has-shop-page] [--is-registered-entity] [--keyword <text>] [--min-headcount N] [--min-source-count N] [--include-people N] [--limit N] [--offset N]` | Filter companies; returns id/domain/name/country/confidence/headcount/sources/signals table |
67
+ | `myapi company get <company_id> [--include-people N]` | Get a single company, optionally with embedded people |
68
+ <!-- generated:end -->
69
+
70
+ The `signals` column in the search table compactly shows which behavioral booleans are true (e.g. `c-level,dm,careers`).
71
+
72
+ ## Examples
73
+ <!-- llm:start -->
74
+ ```bash
75
+ # 1. Registered DE companies with a careers page (growth signal)
76
+ myapi company search --country DE --is-registered-entity --has-careers-page --limit 20
77
+
78
+ # 2. E-commerce in FR/IT — companies with shop pages
79
+ myapi company search --country FR,IT --has-shop-page --confidence high
80
+
81
+ # 3. High-source-count companies (more validated rows) with embedded people
82
+ myapi company search --min-source-count 5 --include-people 3 --json | jq '.companies[0]'
83
+
84
+ # 4. Single company with up to 5 embedded people
85
+ myapi company get auroracloud.com --include-people 5
86
+ ```
87
+
88
+ ### End-to-end recipe — ABM target account list
89
+
90
+ ```bash
91
+ # Save filter as audience (companies)
92
+ AID=$(myapi audience create "EU growth-stage SaaS" \
93
+ --source company \
94
+ --filter '{"country":["DE","FR","GB","NL"],"has_careers_page":true,"has_decision_maker":true,"min_source_count":3}' \
95
+ --json | jq -r .id)
96
+
97
+ # Pull members for outreach planning
98
+ myapi audience members $AID --limit 50 --json > accounts.json
99
+ ```
100
+ <!-- llm:end -->
101
+
102
+ ## Notes
103
+
104
+ - Goldfox confidence tiers matter: `high` (default) is the curated 96.4% of rows; widen with `low` only for spot-check work, and `very_low` rows usually get dropped.
105
+ - `seniority`, `email_type`, and `min_link_confidence` are people-only — passing them on company search is silently ignored.
106
+ - `include_people` only works on company search/get; people-source already embeds company by default.
107
+ - `keyword` is a substring match on the company's **domain** — use `--keyword stripe` to find domains containing "stripe".
108
+ - For a persistent account list, use `my-audience-api` with `--source company`.
109
+
110
+ Run `myapi company --help` for full flag reference.
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "my-company-api",
3
+ "description": "Company database backed by the Goldfox crawl. Filter companies by confidence tier, country/TLD consistency, behavioral page signals (has_careers_page, has_investors_page, has_shop_page, has_c_level, has_decision_maker), legal-entity status, headcount, and source-URL count.",
4
+ "version": "1.0.0",
5
+ "status": "preview",
6
+ "published": true
7
+ }
File without changes
@@ -0,0 +1,34 @@
1
+ ---
2
+ # my-container-api
3
+
4
+ Run containers on demand — long-running services, background workers, and scheduled jobs. The heavier-duty sibling of edge functions, for native dependencies, long execution, and full dynamic apps.
5
+
6
+ ## What it does
7
+
8
+ - Register a container and get a scoped API key (delivered to the runtime as `MYAPI_KEY`)
9
+ - Deploy a pre-built image to managed cloud infrastructure
10
+ - Three types: `service` (HTTP, scales to zero), `worker` (always-on), `job` (runs to completion, cron-capable)
11
+ - **Bind a custom domain** — serve a dynamic app at `app.yourbrand.com` over HTTPS
12
+ - Recent runtime logs
13
+
14
+ ## Quickstart
15
+
16
+ ```bash
17
+ myapi container create --name api --type service --port 8080
18
+ myapi container deploy <id> registry.example.com/my-app:v1
19
+ myapi container domain <id> app.yourbrand.com
20
+ ```
21
+
22
+ ## Authentication
23
+
24
+ ```bash
25
+ export MYAPI_KEY=mak_...
26
+ ```
27
+
28
+ Requires `api_key` + `org_id` from **myapihq**. Custom domains require the parent domain registered via **mydomainapi**.
29
+
30
+ ## Documentation
31
+
32
+ Full command reference, the custom-domain rules, and the container/funnel/function split: see `SKILL.md`.
33
+
34
+ Run `myapi container --help` for inline reference.
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: my-container-api
3
+ version: 1.0.0
4
+ description: >
5
+ Run containers on demand — long-running services, background workers, and scheduled jobs. The heavier-duty sibling of edge functions, for native deps and long execution.
6
+ triggers: [container, cloud run, dynamic app, custom domain app, service, worker, scheduled job, deploy container, docker image]
7
+ checksum: sha256-ce30765b31f9c29012dcfc13b538cf47bb90e21bc015b4cfc75c1e55b21b4d75
8
+ ---
9
+
10
+ # MyContainerAPI
11
+
12
+ A container runs a pre-built image on managed cloud infrastructure. Three types: a **service** (HTTP server, scales to zero), a **worker** (always-on background process), or a **job** (runs to completion — the only type that takes a cron schedule). Containers are the heavier-duty sibling of edge functions (`myapi fn`) — use them for native dependencies, long execution, or a full dynamic app.
13
+
14
+ ## Capabilities
15
+ <!-- llm:start -->
16
+ The lifecycle is **create → deploy → (optionally) bind a custom domain**.
17
+
18
+ - `create` registers the container and issues a **scoped API key**, returned once. The running container receives it as the `MYAPI_KEY` env var, so your code calls other MyAPI slots with no token handling. Deploy rotates this key.
19
+ - `deploy` ships a pre-built image reference to the runtime and makes the container live at a generated URL.
20
+ - `domain` puts the container on a **custom domain** — how you serve a dynamic app at `app.yourbrand.com`.
21
+
22
+ ### Custom domains (dynamic apps)
23
+
24
+ `myapi container domain <id> <domain>` binds a custom domain to a **deployed** container, served over HTTPS automatically. This is the path for a dynamic backend on a real domain — distinct from `my-funnel-api`, which serves static sites.
25
+
26
+ Get it right:
27
+
28
+ - **Deploy first.** Binding a domain to a container that has never deployed fails (422) — there is nothing running to route to.
29
+ - **Register the parent domain first.** The domain's MyAPI-managed parent must already be registered via `my-domain-api`. Binding `app.synthesisdaily.com` requires `synthesisdaily.com` registered in MyAPI; otherwise 422.
30
+ - **One domain per container.** Re-binding, or binding a hostname already taken, fails (409).
31
+ - `--remove` unbinds. `myapi container get <id>` shows the bound `custom_domain`.
32
+ <!-- llm:end -->
33
+
34
+ ## Commands
35
+ <!-- generated:start -->
36
+ | Command | What it does |
37
+ |---|---|
38
+ | `myapi container create --name <name> [--type service\|worker\|job] [--cron <expr>] [--cpu <n>] [--memory <size>] [--port <n>] [--env K=V,...]` | Register a container, get its scoped API key (once) |
39
+ | `myapi container deploy <id> <image-ref>` | Ship a pre-built image and go live (rotates the scoped key) |
40
+ | `myapi container list` | List containers in your org |
41
+ | `myapi container get <id>` | Inspect a container (status, URL, custom domain) |
42
+ | `myapi container logs <id> [--tail <n>]` | Recent runtime logs, newest first |
43
+ | `myapi container domain <id> <domain>` | Bind a custom domain (`--remove` to unbind) |
44
+ | `myapi container delete <id>` | Soft-delete and revoke its scoped API key |
45
+ <!-- generated:end -->
46
+
47
+ ## Examples
48
+ <!-- llm:start -->
49
+ ```bash
50
+ # 1. Register a service container
51
+ myapi container create --name api --type service --port 8080
52
+ # → prints a scoped API key ONCE — save it if your code needs it
53
+
54
+ # 2. Deploy a pre-built image
55
+ myapi container deploy <id> registry.example.com/my-app:v1
56
+
57
+ # 3. Serve it on a custom domain. The parent domain must already be
58
+ # registered: myapi domain register synthesisdaily.com
59
+ myapi container domain <id> app.synthesisdaily.com
60
+ # → app.synthesisdaily.com now serves the container over HTTPS
61
+
62
+ myapi container get <id> # shows status, URL, custom_domain
63
+ myapi container logs <id> --tail 100
64
+
65
+ # Unbind the custom domain
66
+ myapi container domain <id> --remove
67
+ ```
68
+ <!-- llm:end -->
69
+
70
+ ## Notes
71
+
72
+ - The scoped API key is shown **once** at create, and again (rotated) on every deploy. Save it if your code needs it.
73
+ - A `worker` is forced to ≥1 instance; a `service` scales to zero; only a `job` accepts `--cron`.
74
+ - Custom domains need a deployed container **and** a MyAPI-registered parent domain — see `my-domain-api`.
75
+ - Containers are for dynamic apps and native deps. For static sites use `my-funnel-api`; for edge functions use `my-function-api`.
76
+
77
+ Run `myapi container --help` for the full flag reference.
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "my-container-api",
3
+ "description": "Run containers on demand — long-running services, background workers, and scheduled jobs. The heavier-duty sibling of edge functions, for native deps and long execution.",
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
  The canonical store of engaged contacts + companies for an org. Auto-ingests from inbound webhooks via a configurable dot-path. Fixed lifecycle_stage enum (cold | warm | qualified | customer | churned). Append-only event timeline with reserved kinds. Soft delete + restore. Promote-from-Goldfox closes the discovery → engagement loop.
6
6
  triggers: [crm, contact, company, lead, engagement, pipeline, lifecycle, qualified, customer, webhook ingest, promote]
7
- checksum: sha256-pending
7
+ checksum: sha256-0ee12d579c51b300ff227a094c2082a2c6f3bf83d2d97ab16cb2f47ad3667fd6
8
8
  ---
9
9
 
10
10
  # MyCRMAPI
@@ -69,11 +69,11 @@ If a contact doesn't exist for the matched email, it's auto-created with `source
69
69
 
70
70
  ### Goldfox enrichment (deferred)
71
71
 
72
- A CRM contact promoted from Goldfox carries a `goldfox_person_id` reference. In v2 the GET response will join to Goldfox live, embedding the latest row inline as `goldfox_person`. Today that field is null until the BQ get-by-id helper lands. Search filters that hit Goldfox-only fields are not yet wired into CRM search.
72
+ A contact promoted from Goldfox carries a `goldfox_person_id`. In v2 the GET response will join live, embedding the row as `goldfox_person`; today that field is null. Goldfox-only fields are not yet filterable in CRM search.
73
73
 
74
74
  ### Search filter — re-engagement semantics
75
75
 
76
- `--max-last-engagement-days N` returns contacts last engaged *more than* N days ago. This intentionally **includes contacts with no engagement at all** (promoted-but-never-emailed Goldfox leads), because those are exactly the natural targets of a re-engagement campaign. If you want to distinguish "never tried" from "tried and went cold," layer `--source goldfox` (never engaged after promotion) or post-filter the JSON.
76
+ `--max-last-engagement-days N` returns contacts last engaged *more than* N days ago, and intentionally **includes contacts with no engagement at all** (promoted-but-never-emailed Goldfox leads) the natural targets of a re-engagement campaign. To separate "never tried" from "tried and went cold," layer `--source goldfox` or post-filter the JSON.
77
77
 
78
78
  ### Failure modes
79
79
 
@@ -2,5 +2,6 @@
2
2
  "name": "my-crm-api",
3
3
  "description": "The canonical store of engaged people + companies. Auto-ingest from inbound webhooks (configurable dot-path). Fixed lifecycle_stage enum, soft delete, event timeline.",
4
4
  "version": "1.0.0",
5
+ "status": "ga",
5
6
  "published": true
6
7
  }
@@ -4,7 +4,7 @@ version: 1.0.0
4
4
  description: >
5
5
  Per-org KV store with named namespaces, JSON values up to 256 KB, prefix-scan listing, and compare-and-swap via etag. The substrate for any stateful agent-built app on MyAPI — user tables, session stores, idempotency keys, per-user lookup maps.
6
6
  triggers: [database, kv, key value, namespace, store, state, etag, cas, session, idempotency]
7
- checksum: sha256-pending
7
+ checksum: sha256-247b0efe4af6d1eebc320a11b9b7ce3f5b1aa6a2f86fa80631bb3fec1e0a8d22
8
8
  ---
9
9
 
10
10
  # MyDatabaseAPI
@@ -2,5 +2,6 @@
2
2
  "name": "my-database-api",
3
3
  "description": "Per-org KV store with namespaces + compare-and-swap. JSON values up to 256 KB. The substrate for stateful agent-built apps.",
4
4
  "version": "1.0.0",
5
+ "status": "ga",
5
6
  "published": true
6
7
  }
@@ -4,7 +4,7 @@ version: 1.0.0
4
4
  description: >
5
5
  Register new domains and manage edge settings. Required before a funnel can go live on a custom URL.
6
6
  triggers: [domain, register domain, dns, custom domain, edge, cdn, security level, browser check, renew, namecheap]
7
- checksum: sha256-pending
7
+ checksum: sha256-067ab2cc412c1f1f34aaeeec5890f9eb77f680f5b2d1c847e376336702cd8344
8
8
  ---
9
9
 
10
10
  # MyDomainAPI
@@ -2,5 +2,6 @@
2
2
  "name": "my-domain-api",
3
3
  "description": "Domain registration and check with automated DNS and email infrastructure.",
4
4
  "version": "1.0.0",
5
+ "status": "ga",
5
6
  "published": true
6
7
  }
@@ -4,7 +4,7 @@ version: 1.0.0
4
4
  description: >
5
5
  Send transactional and bulk email from your own domain. Create mailboxes, send/receive messages, generate AI templates, and manage warmup.
6
6
  triggers: [email, mailbox, send email, transactional email, template, warmup, inbox, outbox, ses, sender reputation]
7
- checksum: sha256-pending
7
+ checksum: sha256-fa1eb6ee9e24935266643ceeecf7a748747b23377a0bfe256f76b71b62bd6349
8
8
  ---
9
9
 
10
10
  # MyEmailAPI
@@ -2,5 +2,6 @@
2
2
  "name": "my-email-api",
3
3
  "description": "Send transactional and bulk email from your own domain. Mailboxes, AI templates, and warmup.",
4
4
  "version": "1.0.0",
5
+ "status": "ga",
5
6
  "published": true
6
7
  }
@@ -4,7 +4,7 @@ version: 1.0.0
4
4
  description: >
5
5
  Synchronous single-address email verification — syntax + DNS + Microsoft GetCredentialType probe. Returns a verdict in <1s for ~50% of inputs; the rest get verdict='unknown' with smtp_recommended=true. The pre-send quality gate for any outbound campaign.
6
6
  triggers: [email verify, email validation, deliverability, smtp, syntax check, dns mx, microsoft, mx lookup, bounce prevention]
7
- checksum: sha256-pending
7
+ checksum: sha256-a8f4d3fa04436c997d02d1d33f262190166e59e3e890b1c40a877bbd49ad3f00
8
8
  ---
9
9
 
10
10
  # MyEmailVerifyAPI
@@ -2,5 +2,6 @@
2
2
  "name": "my-email-verify-api",
3
3
  "description": "Sync single-address email verification — syntax + DNS + Microsoft probe. Pre-send quality gate for outbound.",
4
4
  "version": "1.0.0",
5
+ "status": "ga",
5
6
  "published": true
6
7
  }