outrank-cli 0.1.1 → 0.3.0
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/README.md +218 -25
- package/SKILL.md +439 -282
- package/package.json +1 -1
- package/src/commands/keywords.js +17 -24
- package/src/commands/products.js +711 -2
- package/src/index.js +5 -1
package/SKILL.md
CHANGED
|
@@ -1,82 +1,124 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: outrank
|
|
3
|
-
description: Drive the Outrank agent API from the terminal via outrank-cli. Use when the user asks to list/create/update Outrank products, inspect or manage keyword plans, inspect or edit articles, manage article settings, target audiences, competitors, Google Search Console connections, or quote/buy product slots. Requires outrank-cli on PATH and an Outrank API key (env OUTRANK_API_KEY or stored via auth login).
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Outrank Skill
|
|
7
|
-
|
|
8
|
-
Use `outrank-cli` to drive Outrank from the terminal. The CLI is JSON-first and every command returns `agent_guidance`, so read that field after each step and let it steer the next call.
|
|
9
|
-
|
|
10
|
-
In human-facing responses, call `products get` / `products update` the product's General settings. These cover the non-editorial product basics such as name, URL, description, sitemap URL, blog root URL, publishing cadence,
|
|
11
|
-
|
|
12
|
-
In human-facing responses, call product `output-settings` article settings or article preferences. Use `output-settings` only when you are quoting the literal CLI command or API path.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
---
|
|
2
|
+
name: outrank
|
|
3
|
+
description: Drive the Outrank agent API from the terminal via outrank-cli. Use when the user asks to list/create/update Outrank products, inspect or manage publishing integrations, inspect or manage keyword plans, inspect or edit articles, manage article settings, target audiences, competitors, Google Search Console connections, internal linking configuration, or quote/buy product slots. Requires outrank-cli on PATH and an Outrank API key (env OUTRANK_API_KEY or stored via auth login).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Outrank Skill
|
|
7
|
+
|
|
8
|
+
Use `outrank-cli` to drive Outrank from the terminal. The CLI is JSON-first and every command returns `agent_guidance`, so read that field after each step and let it steer the next call.
|
|
9
|
+
|
|
10
|
+
In human-facing responses, call `products get` / `products update` the product's General settings. These cover the non-editorial product basics such as name, URL, description, sitemap URL, blog root URL, publishing cadence, and similar core product fields.
|
|
11
|
+
|
|
12
|
+
In human-facing responses, call product `output-settings` article settings or article preferences. Use `output-settings` only when you are quoting the literal CLI command or API path.
|
|
13
|
+
Use `products backlinks ...` for backlink exchange settings, credits, review queues, and reverification actions.
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
16
17
|
1. If `OUTRANK_API_KEY` is not set, ask the human for an Outrank API key from `https://outrank.so/dashboard/settings/api-keys`.
|
|
17
|
-
2. Store it with `outrank-cli auth login <api-key>`.
|
|
18
|
-
3. Verify access with `outrank-cli auth whoami`.
|
|
19
|
-
4. If a command fails with auth errors, tell the human exactly how to refresh the key, then retry.
|
|
20
|
-
5. If the environment blocks writes to the default home directory, set `OUTRANK_CONFIG_DIR` to a writable folder before using `auth login`.
|
|
18
|
+
2. Store it with `outrank-cli auth login <api-key>`.
|
|
19
|
+
3. Verify access with `outrank-cli auth whoami`.
|
|
20
|
+
4. If a command fails with auth errors, tell the human exactly how to refresh the key, then retry.
|
|
21
|
+
5. If the environment blocks writes to the default home directory, set `OUTRANK_CONFIG_DIR` to a writable folder before using `auth login`.
|
|
21
22
|
6. If the API is hosted on a non-default Outrank deployment, set `OUTRANK_BASE_URL=<deployment-url>`. Use `--base-url <deployment-url>` only as a per-command override when needed.
|
|
22
|
-
|
|
23
|
-
## Discovery
|
|
24
|
-
|
|
25
|
-
Run `outrank-cli --help` first if you need the command tree.
|
|
26
|
-
|
|
27
|
-
Run group help when needed:
|
|
28
|
-
|
|
29
|
-
- `outrank-cli auth --help`
|
|
30
|
-
- `outrank-cli products --help`
|
|
31
|
-
- `outrank-cli keywords --help`
|
|
32
|
-
- `outrank-cli articles --help`
|
|
33
|
-
- `outrank-cli subscription --help`
|
|
34
|
-
- `outrank-cli usage --help`
|
|
35
|
-
- `outrank-cli billing --help`
|
|
36
|
-
- `outrank-cli auth status`
|
|
37
|
-
|
|
38
|
-
Prefer inspecting before mutating:
|
|
39
|
-
|
|
40
|
-
- `outrank-cli products list --limit 20`
|
|
41
|
-
- `outrank-cli products get <productId>` for General settings
|
|
42
|
-
- `outrank-cli products output-settings get <productId>`
|
|
43
|
-
- `outrank-cli keywords list --product <productId> --scope all`
|
|
44
|
-
- `outrank-cli articles list --product <productId>`
|
|
45
|
-
- `outrank-cli articles get <articleId>`
|
|
46
|
-
- `outrank-cli articles get-content <articleId>`
|
|
47
|
-
- `outrank-cli articles upload-image --file <path> --article <articleId>`
|
|
48
|
-
- `outrank-cli articles upload-featured-image <articleId> --file <path>`
|
|
49
|
-
- `outrank-cli keywords export --product <productId>`
|
|
23
|
+
|
|
24
|
+
## Discovery
|
|
25
|
+
|
|
26
|
+
Run `outrank-cli --help` first if you need the command tree.
|
|
27
|
+
|
|
28
|
+
Run group help when needed:
|
|
29
|
+
|
|
30
|
+
- `outrank-cli auth --help`
|
|
31
|
+
- `outrank-cli products --help`
|
|
32
|
+
- `outrank-cli keywords --help`
|
|
33
|
+
- `outrank-cli articles --help`
|
|
34
|
+
- `outrank-cli subscription --help`
|
|
35
|
+
- `outrank-cli usage --help`
|
|
36
|
+
- `outrank-cli billing --help`
|
|
37
|
+
- `outrank-cli auth status`
|
|
38
|
+
|
|
39
|
+
Prefer inspecting before mutating:
|
|
40
|
+
|
|
41
|
+
- `outrank-cli products list --limit 20`
|
|
42
|
+
- `outrank-cli products get <productId>` for General settings
|
|
43
|
+
- `outrank-cli products output-settings get <productId>`
|
|
44
|
+
- `outrank-cli keywords list --product <productId> --scope all`
|
|
45
|
+
- `outrank-cli articles list --product <productId>`
|
|
46
|
+
- `outrank-cli articles get <articleId>`
|
|
47
|
+
- `outrank-cli articles get-content <articleId>`
|
|
48
|
+
- `outrank-cli articles upload-image --file <path> --article <articleId>`
|
|
49
|
+
- `outrank-cli articles upload-featured-image <articleId> --file <path>`
|
|
50
|
+
- `outrank-cli keywords export --product <productId>`
|
|
50
51
|
- `outrank-cli products target-audiences list <productId>`
|
|
51
52
|
- `outrank-cli products competitors list <productId>`
|
|
53
|
+
- `outrank-cli products integrations providers`
|
|
54
|
+
- `outrank-cli products integrations list <productId>`
|
|
55
|
+
- `outrank-cli products integrations get <productId> <integrationId>`
|
|
56
|
+
- `outrank-cli products integrations prepare wordpress-plugin <productId>`
|
|
57
|
+
- `outrank-cli products integrations connect wordpress-com <productId> --json-file wordpress-com-connect.json`
|
|
58
|
+
- `outrank-cli products integrations connect notion <productId>`
|
|
59
|
+
- `outrank-cli products integrations poll wordpress-com <productId> --attempt-id <attempt-id>`
|
|
60
|
+
- `outrank-cli products integrations poll notion <productId> --attempt-id <attempt-id>`
|
|
61
|
+
- `outrank-cli products integrations notion databases <productId> <integrationId>`
|
|
62
|
+
- `outrank-cli products integrations notion schema <productId> <integrationId> <databaseId>`
|
|
63
|
+
- `outrank-cli products integrations webflow sites --json-file webflow-sites.json`
|
|
64
|
+
- `outrank-cli products integrations webflow collections --json-file webflow-collections.json`
|
|
65
|
+
- `outrank-cli products integrations webflow fields --json-file webflow-fields.json`
|
|
66
|
+
- `outrank-cli products integrations webflow items --json-file webflow-items.json`
|
|
67
|
+
- `outrank-cli products integrations framer collections --json-file framer-collections.json`
|
|
68
|
+
- `outrank-cli products integrations framer fields --json-file framer-fields.json`
|
|
52
69
|
- `outrank-cli products gsc status <productId>`
|
|
53
70
|
- `outrank-cli products gsc accounts <productId>`
|
|
54
71
|
- `outrank-cli products gsc performance <productId>`
|
|
72
|
+
- `outrank-cli products linking sources get <productId>`
|
|
73
|
+
- `outrank-cli products linking targets list <productId>`
|
|
74
|
+
- `outrank-cli products linking target-config get <productId>`
|
|
75
|
+
- `outrank-cli products backlinks get <productId>`
|
|
76
|
+
- `outrank-cli products backlinks credits <productId>`
|
|
77
|
+
- `outrank-cli products backlinks earned <productId>`
|
|
78
|
+
- `outrank-cli products backlinks unverified <productId>`
|
|
79
|
+
- `outrank-cli products backlinks subscription <productId>`
|
|
55
80
|
- `outrank-cli subscription status`
|
|
56
81
|
- `outrank-cli usage stats`
|
|
57
|
-
|
|
58
|
-
Interpret `auth whoami` carefully:
|
|
59
|
-
|
|
60
|
-
- `organization.product_count` may represent purchased product slots, not the literal number of rows returned by `products list`.
|
|
61
|
-
|
|
62
|
-
## Write pattern
|
|
63
|
-
|
|
64
|
-
For complex writes, prefer JSON via file or stdin over long shell escaping.
|
|
65
|
-
|
|
66
|
-
Accepted input forms:
|
|
67
|
-
|
|
68
|
-
- `--json '{...}'`
|
|
69
|
-
- `--json-file payload.json`
|
|
70
|
-
- `--json-stdin`
|
|
71
|
-
|
|
72
|
-
Write commands currently supported:
|
|
73
|
-
|
|
74
|
-
- `outrank-cli products create --json-file product.json`
|
|
75
|
-
After create, the initial ~30-day keyword plan is queued automatically. Poll with `outrank-cli keywords generation-status --product <productId>` and then inspect `outrank-cli keywords list --product <productId>`.
|
|
76
|
-
- `outrank-cli products update <productId> --json-file patch.json` for General settings
|
|
82
|
+
|
|
83
|
+
Interpret `auth whoami` carefully:
|
|
84
|
+
|
|
85
|
+
- `organization.product_count` may represent purchased product slots, not the literal number of rows returned by `products list`.
|
|
86
|
+
|
|
87
|
+
## Write pattern
|
|
88
|
+
|
|
89
|
+
For complex writes, prefer JSON via file or stdin over long shell escaping.
|
|
90
|
+
|
|
91
|
+
Accepted input forms:
|
|
92
|
+
|
|
93
|
+
- `--json '{...}'`
|
|
94
|
+
- `--json-file payload.json`
|
|
95
|
+
- `--json-stdin`
|
|
96
|
+
|
|
97
|
+
Write commands currently supported:
|
|
98
|
+
|
|
99
|
+
- `outrank-cli products create --json-file product.json`
|
|
100
|
+
After create, the initial ~30-day keyword plan is queued automatically. Poll with `outrank-cli keywords generation-status --product <productId>` and then inspect `outrank-cli keywords list --product <productId>`.
|
|
101
|
+
- `outrank-cli products update <productId> --json-file patch.json` for General settings
|
|
77
102
|
- `outrank-cli products output-settings update <productId> --json-file output-settings.json`
|
|
78
103
|
- `outrank-cli products target-audiences replace <productId> --json-file target-audiences.json`
|
|
79
104
|
- `outrank-cli products competitors replace <productId> --json-file competitors.json`
|
|
105
|
+
- `outrank-cli products integrations validate <provider> --json-file integration.json`
|
|
106
|
+
- `outrank-cli products integrations create <productId> --json-file integration-create.json`
|
|
107
|
+
- `outrank-cli products integrations update <productId> <integrationId> --json-file integration-update.json`
|
|
108
|
+
- `outrank-cli products integrations test <productId> <integrationId>`
|
|
109
|
+
- `outrank-cli products integrations delete <productId> <integrationId>`
|
|
110
|
+
- `outrank-cli products integrations connect wordpress-com <productId> --json-file wordpress-com-connect.json`
|
|
111
|
+
- `outrank-cli products integrations poll wordpress-com <productId> --attempt-id <attempt-id>`
|
|
112
|
+
- `outrank-cli products integrations connect notion <productId>`
|
|
113
|
+
- `outrank-cli products integrations poll notion <productId> --attempt-id <attempt-id>`
|
|
114
|
+
- `outrank-cli products integrations notion databases <productId> <integrationId>`
|
|
115
|
+
- `outrank-cli products integrations notion schema <productId> <integrationId> <databaseId>`
|
|
116
|
+
- `outrank-cli products integrations webflow sites --json-file webflow-sites.json`
|
|
117
|
+
- `outrank-cli products integrations webflow collections --json-file webflow-collections.json`
|
|
118
|
+
- `outrank-cli products integrations webflow fields --json-file webflow-fields.json`
|
|
119
|
+
- `outrank-cli products integrations webflow items --json-file webflow-items.json`
|
|
120
|
+
- `outrank-cli products integrations framer collections --json-file framer-collections.json`
|
|
121
|
+
- `outrank-cli products integrations framer fields --json-file framer-fields.json`
|
|
80
122
|
- `outrank-cli products gsc connect <productId>`
|
|
81
123
|
- `outrank-cli products gsc reconnect <productId>`
|
|
82
124
|
- `outrank-cli products gsc disconnect <productId>`
|
|
@@ -84,113 +126,125 @@ Write commands currently supported:
|
|
|
84
126
|
- `outrank-cli products gsc search-analytics <productId> --dimensions query,page --limit 50`
|
|
85
127
|
- `outrank-cli products gsc inspect-url <productId> --url https://example.com/blog/post`
|
|
86
128
|
- `outrank-cli products gsc cannibalization <productId>`
|
|
129
|
+
- `outrank-cli products linking sources update <productId> --json-file linking-sources.json`
|
|
130
|
+
- `outrank-cli products linking detect <productId>`
|
|
131
|
+
- `outrank-cli products linking target-config update <productId> --json-file target-config.json`
|
|
132
|
+
- `outrank-cli products linking targets add-manual <productId> --json-file manual-target.json`
|
|
133
|
+
- `outrank-cli products linking targets upsert <productId> --json-file target-upsert.json`
|
|
134
|
+
- `outrank-cli products linking targets clear-customizations <productId> <targetId>`
|
|
135
|
+
- `outrank-cli products linking targets delete <productId> <targetId>`
|
|
136
|
+
- `outrank-cli products backlinks update <productId> --json-file backlinks.json`
|
|
137
|
+
- `outrank-cli products backlinks check-removal <productId> <backlinkId>`
|
|
138
|
+
- `outrank-cli products backlinks reverify <productId> <backlinkId>`
|
|
139
|
+
- `outrank-cli products backlinks subscribe-quote <productId> --plan premium|enterprise`
|
|
87
140
|
- `outrank-cli keywords add --product <productId> --json-file keywords.json`
|
|
88
|
-
- `outrank-cli keywords
|
|
89
|
-
- `outrank-cli keywords bulk-
|
|
90
|
-
- `outrank-cli
|
|
91
|
-
- `outrank-cli articles update
|
|
92
|
-
- `outrank-cli articles
|
|
93
|
-
- `outrank-cli articles
|
|
94
|
-
- `outrank-cli articles
|
|
95
|
-
- `outrank-cli articles upload-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
- `outrank-cli products
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
- use `data._meta.
|
|
125
|
-
- use `data._meta.fields.<field>.
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
-
|
|
134
|
-
-
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
-
|
|
144
|
-
- whether to
|
|
145
|
-
- whether to
|
|
146
|
-
- whether to
|
|
147
|
-
- whether to include
|
|
148
|
-
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
- what
|
|
178
|
-
-
|
|
179
|
-
- which
|
|
180
|
-
- which
|
|
181
|
-
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
141
|
+
- `outrank-cli keywords update <keywordId> --json-file keyword-update.json`
|
|
142
|
+
- `outrank-cli keywords bulk-reschedule --json-file keyword-reschedule.json`
|
|
143
|
+
- `outrank-cli keywords bulk-delete --json-file keyword-delete.json`
|
|
144
|
+
- `outrank-cli articles update <articleId> --json-file article-patch.json`
|
|
145
|
+
- `outrank-cli articles update-content <articleId> --json-file article-content.json`
|
|
146
|
+
- `outrank-cli articles replace <articleId> --json-file replace.json`
|
|
147
|
+
- `outrank-cli articles bulk-replace --json-file bulk-replace.json`
|
|
148
|
+
- `outrank-cli articles upload-image --file local-image.png --article <articleId>`
|
|
149
|
+
- `outrank-cli articles upload-featured-image <articleId> --file hero.jpg`
|
|
150
|
+
|
|
151
|
+
Billing-management helper:
|
|
152
|
+
|
|
153
|
+
- `outrank-cli billing portal-url`
|
|
154
|
+
|
|
155
|
+
## New-product preflight
|
|
156
|
+
|
|
157
|
+
When the human asks to create or add a new product, do not jump straight to `products create` or a billing purchase.
|
|
158
|
+
|
|
159
|
+
Treat product creation as blocked until you have either:
|
|
160
|
+
|
|
161
|
+
1. Collected the key product and article-settings inputs, or
|
|
162
|
+
2. Explicit human approval to keep the current defaults for anything they did not specify.
|
|
163
|
+
|
|
164
|
+
Ask for missing information explicitly. Do not silently rely on defaults for editorial behavior.
|
|
165
|
+
When the account already has products, inspect at least one existing product's article settings first so you can see the current backend's actual setting keys before you ask the human to configure a new one.
|
|
166
|
+
|
|
167
|
+
Use this inspection pattern before asking article-setting questions:
|
|
168
|
+
|
|
169
|
+
- `outrank-cli products list --limit 20`
|
|
170
|
+
- `outrank-cli products output-settings get <existingProductId>`
|
|
171
|
+
|
|
172
|
+
Use the returned `output-settings` object as the authoritative checklist of fields currently visible through the live API for that account. Do not rely on a hardcoded short list if the live object contains more agent-visible settings. Do not infer dashboard-only or internal generation fields that are intentionally hidden from the agent API, including `outline`, `outrank_prompt`, and `not_included_words`.
|
|
173
|
+
|
|
174
|
+
When the response includes `data._meta`:
|
|
175
|
+
|
|
176
|
+
- if `data._human` is present, use that as the default source for any human-facing summary
|
|
177
|
+
- use `data._meta.sections` to decide which settings to show humans and how to group them
|
|
178
|
+
- use `data._meta.fields.<field>.label` and `.description` instead of inventing meanings from snake_case names
|
|
179
|
+
- use `data._meta.fields.<field>.options` for enum choices and `constraints` for numeric/color limits before proposing or writing a new value
|
|
180
|
+
- treat `data._meta.hidden_from_human_summary_fields` as bookkeeping fields that usually should not be surfaced in prose
|
|
181
|
+
- if a field is missing from `data._meta.fields`, do not guess what it means; say the live API did not define that field's semantics clearly
|
|
182
|
+
- never mention database table names, raw API field names, raw enum keys, or internal ids in normal human-facing explanations unless the user explicitly asks for implementation details
|
|
183
|
+
|
|
184
|
+
Minimum product brief to collect before creation:
|
|
185
|
+
|
|
186
|
+
- product name
|
|
187
|
+
- canonical website URL
|
|
188
|
+
- product description
|
|
189
|
+
- target audiences
|
|
190
|
+
- competitor set
|
|
191
|
+
- language
|
|
192
|
+
- keyword region
|
|
193
|
+
|
|
194
|
+
Article settings to confirm before creation or immediately before the first write:
|
|
195
|
+
|
|
196
|
+
- tone and style
|
|
197
|
+
- whether to auto-publish
|
|
198
|
+
- whether to include a table of contents
|
|
199
|
+
- whether to mention similar products
|
|
200
|
+
- whether to include CTAs
|
|
201
|
+
- whether to include YouTube videos, if that field exists in the inspected article settings
|
|
202
|
+
- featured-image style, article-image style, or similar image fields, if those fields exist in the inspected article settings
|
|
203
|
+
|
|
204
|
+
The list above is a minimum reminder, not the full agent-visible schema. If the inspected live output-settings object includes additional visible fields, ask about those too. Do not ask the human to configure hidden internal fields that are absent from the live object.
|
|
205
|
+
|
|
206
|
+
For preset-backed fields, do not ask for free-form prose unless the backend clearly accepts arbitrary text. Many settings are select-style options. Examples may include tone, image style, or featured-image style.
|
|
207
|
+
|
|
208
|
+
If the live API or current repo context does not expose the full allowed option list for a preset-backed field:
|
|
209
|
+
|
|
210
|
+
- do not pretend the value is free-form
|
|
211
|
+
- ask the human for the exact option label they want as it appears in Outrank
|
|
212
|
+
- if helpful, show the current value from an existing product as a reference point
|
|
213
|
+
- say clearly when the CLI exposes the field's current value but not the full enum catalog
|
|
214
|
+
|
|
215
|
+
Business-critical settings that may matter before article generation:
|
|
216
|
+
|
|
217
|
+
- blog URL or publishing destination
|
|
218
|
+
- internal linking preferences
|
|
219
|
+
- image style or image-generation preferences
|
|
220
|
+
- article examples or brand-writing examples
|
|
221
|
+
- publishing workflow preferences such as draft-first vs direct publish
|
|
222
|
+
|
|
223
|
+
If the human has not provided those business-critical settings yet, say so clearly. Explain which of them are currently exposed by `outrank-cli` and which are not. Internal linking is exposed through the `products linking ...` subtree. For settings that are not yet supported by the current CLI surface, do not invent commands. Instead, ask the human whether to:
|
|
224
|
+
|
|
225
|
+
- proceed with existing/default Outrank settings for now, or
|
|
226
|
+
- stop product creation until those settings are provided and/or configured elsewhere
|
|
227
|
+
|
|
228
|
+
Before any billing or create step, present a short confirmation summary that includes:
|
|
229
|
+
|
|
230
|
+
- what will be created
|
|
231
|
+
- what competitors and audiences will be set
|
|
232
|
+
- which article settings will be written
|
|
233
|
+
- which fields were confirmed from the live output-settings schema versus inferred from docs/examples
|
|
234
|
+
- which important settings are still defaulting because they were not provided or are not yet exposed in the CLI
|
|
235
|
+
- whether a real billing charge approval is still required
|
|
236
|
+
|
|
237
|
+
## Product workflow
|
|
238
|
+
|
|
185
239
|
For a new product:
|
|
186
|
-
|
|
187
|
-
1. Gather the new-product preflight inputs above. If anything important is missing, ask the human before continuing.
|
|
188
|
-
2. If another paid product slot is needed, quote the billing change before creating anything.
|
|
189
|
-
3. After the human approves the plan, create it with `products create`.
|
|
190
|
-
4. Read the returned `agent_guidance`.
|
|
191
|
-
5. Tune article behavior with `products output-settings update`.
|
|
192
|
-
6. Replace the target-audience set with `products target-audiences replace`.
|
|
193
|
-
7. Replace the competitor set with `products competitors replace`.
|
|
240
|
+
|
|
241
|
+
1. Gather the new-product preflight inputs above. If anything important is missing, ask the human before continuing.
|
|
242
|
+
2. If another paid product slot is needed, quote the billing change before creating anything.
|
|
243
|
+
3. After the human approves the plan, create it with `products create`.
|
|
244
|
+
4. Read the returned `agent_guidance`.
|
|
245
|
+
5. Tune article behavior with `products output-settings update`.
|
|
246
|
+
6. Replace the target-audience set with `products target-audiences replace`.
|
|
247
|
+
7. Replace the competitor set with `products competitors replace`.
|
|
194
248
|
8. Re-read the product, article settings, target audiences, and competitors to confirm the final state.
|
|
195
249
|
|
|
196
250
|
When you only need a small change, use `products update` rather than recreating the product.
|
|
@@ -223,24 +277,117 @@ Important behavior:
|
|
|
223
277
|
- `cannibalization` highlights queries where multiple pages from the same site compete against each other.
|
|
224
278
|
- Use `reconnect` when the status shows an expired token or refresh failure.
|
|
225
279
|
- Use `disconnect` to remove the product's Search Console connection.
|
|
226
|
-
|
|
227
|
-
##
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
- `outrank-cli
|
|
238
|
-
|
|
239
|
-
- `outrank-cli
|
|
240
|
-
- `outrank-cli
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
280
|
+
|
|
281
|
+
## Linking workflow
|
|
282
|
+
|
|
283
|
+
Use the product-scoped linking commands when the human needs to define where Outrank should discover internal-link candidates, inspect detected URLs, save a priority list, or constrain linking behavior.
|
|
284
|
+
|
|
285
|
+
Recommended flow:
|
|
286
|
+
|
|
287
|
+
1. Inspect current source settings with `outrank-cli products linking sources get <productId>`.
|
|
288
|
+
2. Save or change the primary source with `outrank-cli products linking sources update <productId> --json-file linking-sources.json`.
|
|
289
|
+
3. Re-run discovery with `outrank-cli products linking detect <productId>`.
|
|
290
|
+
4. Review saved targets with `outrank-cli products linking targets list <productId>`.
|
|
291
|
+
5. Add missing on-domain URLs with `outrank-cli products linking targets add-manual <productId> --json-file manual-target.json`.
|
|
292
|
+
6. Prioritize or add anchor text with `outrank-cli products linking targets upsert <productId> --json-file target-upsert.json`.
|
|
293
|
+
7. Inspect product-wide behavior with `outrank-cli products linking target-config get <productId>`.
|
|
294
|
+
8. Enable or relax priority-only behavior with `outrank-cli products linking target-config update <productId> --json-file target-config.json`.
|
|
295
|
+
9. Clear stale anchor-text overrides with `outrank-cli products linking targets clear-customizations <productId> <targetId>`.
|
|
296
|
+
10. Delete stale targets with `outrank-cli products linking targets delete <productId> <targetId>`.
|
|
297
|
+
|
|
298
|
+
Important behavior:
|
|
299
|
+
|
|
300
|
+
- Linking writes are gated by the product's backlink subscription. If the API returns `subscription_management_url`, stop retrying and ask the human to manage that billing change in the dashboard.
|
|
301
|
+
- `source_type` is not free-form. Use the exact backend values: `sitemap`, `root_url`, or `integration`.
|
|
302
|
+
- `additional_linking_sources` is a replacement list, not a patch. Keep existing items you still want.
|
|
303
|
+
- Manual and upserted target URLs must stay on the product's own domain.
|
|
304
|
+
- `only_prioritized` may fail until enough prioritized targets exist. If the API returns a conflict, add or prioritize more URLs first.
|
|
305
|
+
- `clear-customizations` only clears custom anchor text. It does not delete the target.
|
|
306
|
+
|
|
307
|
+
## Backlinks workflow
|
|
308
|
+
|
|
309
|
+
Use the product-scoped backlink commands when the human needs to inspect or change backlink exchange participation, review earned placements, work through unverified items, or inspect subscription state.
|
|
310
|
+
|
|
311
|
+
Recommended flow:
|
|
312
|
+
|
|
313
|
+
1. Inspect current settings with `outrank-cli products backlinks get <productId>`.
|
|
314
|
+
2. Inspect credits with `outrank-cli products backlinks credits <productId>`.
|
|
315
|
+
3. Review earned backlinks with `outrank-cli products backlinks earned <productId> --limit 20`.
|
|
316
|
+
4. Add `--include-article` or `--include-summary` on the earned list when the human needs more article context.
|
|
317
|
+
5. Review the unverified queue with `outrank-cli products backlinks unverified <productId> --limit 20`.
|
|
318
|
+
6. Update settings with `outrank-cli products backlinks update <productId> --json-file backlinks.json`.
|
|
319
|
+
7. Trigger a removal check with `outrank-cli products backlinks check-removal <productId> <backlinkId>`.
|
|
320
|
+
8. Trigger a reverification with `outrank-cli products backlinks reverify <productId> <backlinkId>`.
|
|
321
|
+
9. Inspect the current backlink subscription with `outrank-cli products backlinks subscription <productId>`.
|
|
322
|
+
10. Quote a plan with `outrank-cli products backlinks subscribe-quote <productId> --plan premium|enterprise`.
|
|
323
|
+
|
|
324
|
+
Important behavior:
|
|
325
|
+
|
|
326
|
+
- Do not use `products update` for `backlinks_enabled` or `min_backlink_domain_rating`.
|
|
327
|
+
- Backlink writes are blocked when the product is hidden for inappropriate content, but reads still work.
|
|
328
|
+
- Setting `min_domain_rating` requires an active backlink subscription.
|
|
329
|
+
- `subscribe-quote` is read-only. Purchasing or changing the add-on still requires dashboard checkout.
|
|
330
|
+
- `earned` uses cursor pagination through `data.next_cursor`.
|
|
331
|
+
- `unverified` is the deduped article-level manual-review stream.
|
|
332
|
+
|
|
333
|
+
## Integrations workflow
|
|
334
|
+
|
|
335
|
+
Use the current integrations commands when the human needs to inspect connected publishing integrations, validate direct credentials, run the WordPress.com or Notion OAuth handoff, inspect discovery data for Notion, Webflow, or Framer, test a saved integration row, or remove a stale one.
|
|
336
|
+
|
|
337
|
+
Recommended flow:
|
|
338
|
+
|
|
339
|
+
1. Inspect connected integrations with `outrank-cli products integrations list <productId>`.
|
|
340
|
+
2. Inspect provider availability with `outrank-cli products integrations providers`.
|
|
341
|
+
3. For webhook, ask only for `endpoint` and `access_token`. Outrank sends `Authorization: Bearer <access_token>` on each request. Do not ask for an HMAC secret because the current webhook integration does not implement HMAC signing.
|
|
342
|
+
4. For WordPress Plugin, do not ask the human to invent or provide an `api_key`. Start with `outrank-cli products integrations prepare wordpress-plugin <productId>` to generate the integration token, then tell the human to paste that token into the installed plugin and save it in WordPress.
|
|
343
|
+
5. For WordPress.com, start with `outrank-cli products integrations connect wordpress-com <productId> --json-file wordpress-com-connect.json`, tell the human to open the returned `connect_url`, then poll with `outrank-cli products integrations poll wordpress-com <productId> --attempt-id <attempt-id>` until the handoff completes.
|
|
344
|
+
6. For Notion, start with `outrank-cli products integrations connect notion <productId>`, tell the human to open the returned `connect_url`, then poll with `outrank-cli products integrations poll notion <productId> --attempt-id <attempt-id>` until the handoff completes.
|
|
345
|
+
7. After Notion OAuth completes, list databases with `outrank-cli products integrations notion databases <productId> <integrationId>`, inspect one schema with `... notion schema <productId> <integrationId> <databaseId>`, then update the saved integration row with `name`, `database_id`, and `fields`.
|
|
346
|
+
8. For Shopify, start with `outrank-cli products integrations validate shopify --json '{"access_token":"shpat_xxx"}'`. The response returns `shop_name` and the available blogs, which the agent should use to build the create payload instead of guessing them or asking the human for the store name first.
|
|
347
|
+
9. For Webflow, start with `outrank-cli products integrations validate webflow --json-file webflow-sites.json`, then use `webflow sites`, `webflow collections`, `webflow fields`, and `webflow items` to build the exact create or update payload for the chosen CMS collection.
|
|
348
|
+
10. For Framer, use only the newer Server API flow. Start with `outrank-cli products integrations validate framer --json-file framer-validate.json`, then use `framer collections` and `framer fields` when the human wants to publish into an existing editable collection. Do not use or mention the older plugin-based setup.
|
|
349
|
+
11. For Next.js Blog, do not ask the human for credentials first. Run `outrank-cli products integrations create <productId> --json '{"provider":"nextjs-blog"}'` and treat the returned `data.secrets.api_key` as a one-time secret that must be saved immediately.
|
|
350
|
+
12. For Wix, use a direct credential flow with `site_id`, `api_key`, and `publish_status`. Validate first, then create or update directly; there is no OAuth or prepare step.
|
|
351
|
+
13. Validate webhook, Ghost, Shopify, Webflow, Wix, Framer, or WordPress Plugin credentials before saving with `outrank-cli products integrations validate <provider> --json-file integration.json`.
|
|
352
|
+
14. Create a webhook, Ghost, Shopify, Webflow, Wix, Framer, WordPress Plugin, or Next.js Blog integration with `outrank-cli products integrations create <productId> --json-file integration-create.json`.
|
|
353
|
+
14. Inspect one row with `outrank-cli products integrations get <productId> <integrationId>`.
|
|
354
|
+
15. Update a saved webhook, Ghost, Shopify, Webflow, Wix, WordPress Plugin, or Notion integration with `outrank-cli products integrations update <productId> <integrationId> --json-file integration-update.json`.
|
|
355
|
+
16. Test a saved webhook, Ghost, Shopify, Webflow, Wix, Framer, WordPress Plugin, or Notion integration with `outrank-cli products integrations test <productId> <integrationId>`.
|
|
356
|
+
17. If the integration is stale or wrong, remove it with `outrank-cli products integrations delete <productId> <integrationId>`.
|
|
357
|
+
|
|
358
|
+
Important behavior:
|
|
359
|
+
|
|
360
|
+
- V2 products are intended to keep exactly one publishing integration. If `list` returns multiple rows, treat the extras as likely legacy V1 leftovers and inspect before deleting.
|
|
361
|
+
- `create` currently supports `webhook`, `ghost`, `shopify`, `webflow`, `wix`, `wordpress-plugin`, and `nextjs-blog` first. Other providers may appear in `providers`, but if their create/update/test capabilities are absent there, do not invent those writes.
|
|
362
|
+
- `wordpress-plugin` should usually start with `prepare`, not with a question asking the human for an integration token. The prepare response includes the generated token plus suggested validate/create payloads.
|
|
363
|
+
- `wordpress-com` should use `connect` plus `poll`, not `create`. The connect payload mirrors the dashboard flow with `name` and `publish_status`, then the human completes browser OAuth.
|
|
364
|
+
- `notion` should use `connect` plus `poll`, not `create`. OAuth only stores the access token row. The agent still needs to list databases, inspect schema, and PATCH the saved row with `name`, `database_id`, and `fields` before the integration is publish-ready.
|
|
365
|
+
- `shopify` should start with validation. The agent should not ask the human to guess `shop_name` or `blog_id` before `validate` returns them.
|
|
366
|
+
- `webflow` should use validation plus discovery before create. The agent should not guess `site_id`, `collection_id`, or Webflow field mappings.
|
|
367
|
+
- `framer` should use the newer Server API flow only. The agent should not mention the older Framer plugin flow. Validate the project URL and Server API key first, then use `framer collections` and `framer fields` only when the human chooses an existing editable collection. There is no separate plugin-config step in the agent surface.
|
|
368
|
+
- `wix` uses direct validate/create/update/test with a site UUID plus API key. The agent should validate `site_id` and `api_key` before create or after credentials change.
|
|
369
|
+
- `nextjs-blog` create returns a one-time API key. The agent must surface and preserve it immediately because later reads only show that a hash exists, not the plain secret.
|
|
370
|
+
- deleting the current active integration clears the product integration fields automatically
|
|
371
|
+
- `validate` tests unsaved credentials without persisting a row, while `test` re-checks a saved integration row
|
|
372
|
+
- the current CLI surface still does not expose create, update, or test for some providers, and only WordPress.com and Notion currently expose an OAuth connect flow; if the human asks for unsupported operations, say they are not shipped in this CLI yet instead of inventing commands
|
|
373
|
+
|
|
374
|
+
## Keyword workflow
|
|
375
|
+
|
|
376
|
+
Keyword plans have two buckets:
|
|
377
|
+
|
|
378
|
+
- scheduled keywords: already on the content calendar
|
|
379
|
+
- stored keywords: unscheduled inventory waiting to be promoted into the plan
|
|
380
|
+
|
|
381
|
+
Inspect before mutating:
|
|
382
|
+
|
|
383
|
+
- `outrank-cli keywords list --product <productId> --scope scheduled`
|
|
384
|
+
- `outrank-cli keywords list --product <productId> --scope stored`
|
|
385
|
+
- `outrank-cli keywords list --product <productId> --scope all`
|
|
386
|
+
- `outrank-cli keywords export --product <productId>`
|
|
387
|
+
- `outrank-cli keywords generation-status --product <productId>`
|
|
388
|
+
|
|
389
|
+
Use the returned `data.scope`, `data.scheduled`, and `data.stored` structure literally. Do not invent a different keyword model.
|
|
390
|
+
|
|
244
391
|
When the user asks for keyword ideas:
|
|
245
392
|
|
|
246
393
|
- use `outrank-cli keywords suggest --product <productId> --theme "<theme>"` for related-keyword exploration around a theme or seed term
|
|
@@ -254,95 +401,105 @@ Before `keywords generate`:
|
|
|
254
401
|
- if the human did not specify how many keywords to generate, ask them
|
|
255
402
|
- the allowed range is 5-30, but the real maximum depends on free scheduler slots
|
|
256
403
|
- check `outrank-cli keywords generation-status --product <productId>` when you need the current slot capacity
|
|
257
|
-
|
|
258
|
-
To add keywords:
|
|
259
|
-
|
|
260
|
-
- for direct adds, use `outrank-cli keywords add --product <productId> --json-file keywords.json`
|
|
261
|
-
- for promoting existing stored keywords, include `stored_keyword_ids` in that JSON payload
|
|
262
|
-
|
|
263
|
-
Important behavior to remember:
|
|
264
|
-
|
|
265
|
-
- add is idempotent where possible; existing scheduled keywords come back as existing rather than being duplicated
|
|
266
|
-
- stored keywords are unscheduled inventory, not disabled scheduled keywords
|
|
267
|
-
- stored keywords are read-only inventory; they can be promoted into the plan but not deleted directly
|
|
268
|
-
- auto-scheduling respects the backend's real planner logic, including publish days and pending downgrade limits
|
|
269
|
-
- if keyword generation status says writes are blocked, treat both scheduled and stored keywords as read-only until the blocker clears
|
|
270
|
-
- if the main subscription is `past_due`, keyword mutations are blocked and only reads are allowed
|
|
271
|
-
- scheduled keywords with created or pre-created articles are read-only
|
|
272
|
-
- keywords in `generating_article` are read-only until generation finishes
|
|
273
|
-
- past keywords are read-only except past `scheduled` or `disabled` keywords without an article, which may still be rescheduled
|
|
274
|
-
- if the response reports skipped keywords, explain the actual skip reason to the human instead of pretending the add fully succeeded
|
|
275
|
-
|
|
276
|
-
For schedule changes:
|
|
277
|
-
|
|
278
|
-
- check writability first when there is any doubt: `outrank-cli keywords generation-status --product <productId>`
|
|
279
|
-
-
|
|
280
|
-
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
- `outrank-cli
|
|
285
|
-
- `outrank-cli
|
|
286
|
-
-
|
|
287
|
-
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
-
|
|
293
|
-
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
- `outrank-cli
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
- `outrank-cli
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
-
|
|
319
|
-
-
|
|
320
|
-
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
-
|
|
325
|
-
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
##
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
404
|
+
|
|
405
|
+
To add keywords:
|
|
406
|
+
|
|
407
|
+
- for direct adds, use `outrank-cli keywords add --product <productId> --json-file keywords.json`
|
|
408
|
+
- for promoting existing stored keywords, include `stored_keyword_ids` in that JSON payload
|
|
409
|
+
|
|
410
|
+
Important behavior to remember:
|
|
411
|
+
|
|
412
|
+
- add is idempotent where possible; existing scheduled keywords come back as existing rather than being duplicated
|
|
413
|
+
- stored keywords are unscheduled inventory, not disabled scheduled keywords
|
|
414
|
+
- stored keywords are read-only inventory; they can be promoted into the plan but not deleted directly
|
|
415
|
+
- auto-scheduling respects the backend's real planner logic, including publish days and pending downgrade limits
|
|
416
|
+
- if keyword generation status says writes are blocked, treat both scheduled and stored keywords as read-only until the blocker clears
|
|
417
|
+
- if the main subscription is `past_due`, keyword mutations are blocked and only reads are allowed
|
|
418
|
+
- scheduled keywords with created or pre-created articles are read-only
|
|
419
|
+
- keywords in `generating_article` are read-only until generation finishes
|
|
420
|
+
- past keywords are read-only except past `scheduled` or `disabled` keywords without an article, which may still be rescheduled
|
|
421
|
+
- if the response reports skipped keywords, explain the actual skip reason to the human instead of pretending the add fully succeeded
|
|
422
|
+
|
|
423
|
+
For schedule changes:
|
|
424
|
+
|
|
425
|
+
- check writability first when there is any doubt: `outrank-cli keywords generation-status --product <productId>`
|
|
426
|
+
- `keywords list` uses planner-first ordering for scheduled results, so page 1 prioritizes upcoming scheduled items before past ones
|
|
427
|
+
- confirm keyword presence with `outrank-cli keywords list --product <productId> --scope scheduled --q "<keyword>"`; if `next_offset` is not `null`, keep paging before claiming it is missing
|
|
428
|
+
- keyword records return top-level `article_type`, `article_subtype`, `expected_length`, and label fields; use those directly for article-type or expected-length questions instead of checking product output-settings
|
|
429
|
+
- update one keyword's mutable fields: `outrank-cli keywords update <keywordId> --json '{"instructions":"..."}'`
|
|
430
|
+
- answer or replace the keyword's quality questions with `outrank-cli keywords update <keywordId> --json '{"quality_questions":[{"id":"...","question":"...","answer":"..."}]}'`
|
|
431
|
+
- `outrank-cli keywords get <keywordId>` returns `article_type_options`; use those values when patching `article_type`, `article_subtype`, or `expected_length`
|
|
432
|
+
- `outrank-cli keywords update <keywordId> --json '{"article_type":"guide","article_subtype":"explainer","expected_length":"long"}'` mirrors the scheduler card Article Type Settings modal and rejects values outside the allowed option lists
|
|
433
|
+
- reschedule one: `outrank-cli keywords update <keywordId> --json '{"scheduled_for":"YYYY-MM-DD"}'`
|
|
434
|
+
- reschedule many: `outrank-cli keywords bulk-reschedule --json-file keyword-reschedule.json`
|
|
435
|
+
|
|
436
|
+
For article actions:
|
|
437
|
+
|
|
438
|
+
- `outrank-cli articles generate <keywordId>` is only for keywords scheduled for today
|
|
439
|
+
- `outrank-cli articles precreate <keywordId>` is only for eligible future scheduled keywords
|
|
440
|
+
- article records with a linked scheduled keyword also return top-level `article_type`, `article_subtype`, `expected_length`, and label fields
|
|
441
|
+
- trial users cannot pre-create articles
|
|
442
|
+
- past-due subscriptions block article actions
|
|
443
|
+
- future scheduled articles cannot be manually published early through `articles update`
|
|
444
|
+
|
|
445
|
+
For deletion:
|
|
446
|
+
|
|
447
|
+
- delete one: `outrank-cli keywords delete <keywordId>`
|
|
448
|
+
- delete many: `outrank-cli keywords bulk-delete --json-file keyword-delete.json`
|
|
449
|
+
|
|
450
|
+
When answering humans, call the scheduled set the content plan or keyword plan. Call stored keywords unscheduled inventory or stored keywords. Do not talk about internal table names.
|
|
451
|
+
|
|
452
|
+
## Pause and resume
|
|
453
|
+
|
|
454
|
+
Use:
|
|
455
|
+
|
|
456
|
+
- `outrank-cli products pause <productId>`
|
|
457
|
+
- `outrank-cli products resume <productId>`
|
|
458
|
+
|
|
459
|
+
These affect billing-adjacent product state. Read the returned guidance carefully and relay any human-only step.
|
|
460
|
+
|
|
461
|
+
## Article workflow
|
|
462
|
+
|
|
463
|
+
Inspect before mutating:
|
|
464
|
+
|
|
465
|
+
- `outrank-cli articles list --product <productId>`
|
|
466
|
+
- `outrank-cli articles get <articleId>`
|
|
467
|
+
- `outrank-cli articles get-content <articleId>`
|
|
468
|
+
|
|
469
|
+
Important behavior to remember:
|
|
470
|
+
|
|
471
|
+
- article metadata and history mirror the current app behavior, including soft-delete instead of hard-delete
|
|
472
|
+
- article bodies are markdown in the backend; `--format html` is rendered output, not the source of truth
|
|
473
|
+
- featured image is separate from the markdown body and can be updated either through the normal article update payload via `image_url` or by local-file upload with `articles upload-featured-image`
|
|
474
|
+
- in-content images can be uploaded from local files with `articles upload-image`; the command returns a hosted URL and alt text for markdown insertion or replacement
|
|
475
|
+
- per-article instructions live on the linked scheduled keyword, so they are only editable while that planner relationship still exists and is writable
|
|
476
|
+
- `articles get <articleId>` returns `article_type_options`; use those values when patching `article_type`, `article_subtype`, or `expected_length`
|
|
477
|
+
- `articles update --json '{"article_type":"guide","article_subtype":"howTo","expected_length":"medium"}'` mirrors the dashboard Article Type Settings modal and rejects values outside the allowed option lists
|
|
478
|
+
- `articles update --json '{"status":"published"}'` attempts a real publish through the product's active integration for eligible attached articles; if the remote publish fails, inspect the returned error and the article's `publish_error`
|
|
479
|
+
- slug is readable for reference but read-only in the agent API
|
|
480
|
+
- `articles generate <keywordId>` mirrors the current create-and-publish flow for a scheduled keyword
|
|
481
|
+
- `articles precreate <keywordId>` mirrors the current pre-generation flow; after calling it, inspect the keyword state until it moves from `generating_article` to `pregenerated` or back to `scheduled`
|
|
482
|
+
- `articles retry-publish <articleId>` only works for generated articles with a publish error
|
|
483
|
+
- `articles bulk-replace` is preview-first; review the returned excerpts, then rerun with `"confirm": true` in the JSON payload to write changes
|
|
484
|
+
|
|
485
|
+
## Buying more product slots
|
|
486
|
+
|
|
487
|
+
Always do this in two steps:
|
|
488
|
+
|
|
489
|
+
1. Quote the change: `outrank-cli billing purchase-products quote --additional-products <n>`
|
|
490
|
+
2. If the human approves, submit the purchase with the exact quoted recurring total:
|
|
491
|
+
`outrank-cli billing purchase-products buy --additional-products <n> --confirm-charge-cents <quoted> --idempotency-key <stable-random-key>`
|
|
492
|
+
|
|
493
|
+
Never guess `confirm-charge-cents`. Use the server-quoted number.
|
|
494
|
+
Do not ask for billing approval until you have already clarified the intended product configuration and any defaulted article/publishing settings.
|
|
495
|
+
|
|
496
|
+
## Error handling
|
|
497
|
+
|
|
498
|
+
- If `ok` is `false`, read both `error.message` and `agent_guidance`.
|
|
499
|
+
- For `401`, help the human refresh `OUTRANK_API_KEY`.
|
|
500
|
+
- For `403` or `409`, the guidance usually tells you whether to inspect state, pause another product, or ask the human to approve a billing step.
|
|
501
|
+
- For `402`, stop retrying and ask the human to fix billing.
|
|
502
|
+
|
|
503
|
+
## Current limitation
|
|
504
|
+
|
|
505
|
+
The implementation plan is broader than the current live API. Keywords, core article flows, linking, backlink exchange management, and the current integration-management flows are exposed in `outrank-cli`, including direct setup for webhook, Ghost, Shopify, Webflow, Wix, Framer, WordPress Plugin, and Next.js Blog, plus OAuth flows for WordPress.com and Notion. Purchasing or changing backlink add-ons and some onboarding flows still require the dashboard. If the user asks for something not present in `outrank-cli --help`, say that exact command surface is not shipped yet and do not invent unsupported commands.
|