API
READ
WRITE
Autenticazione
Verifica la tua chiave API
Puoi trovarla nel menu in alto a destra > Impostazioni > Account > Chiavi API.
Aggiungila all'header della richiesta
Aggiungi la chiave API generata all'header Authorization nel formato Bearer.
Invia la richiesta all'URL di base
Invia le richieste all'URL di base seguente, aggiungendo il percorso dell'endpoint.
⛔auth_key_note
URL di base
https://stepeee.com/public-api/v1
Esempio di richiesta
curl "https://stepeee.com/public-api/v1/projects" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Formato della risposta ed errori
Tutte le risposte vengono restituite nel formato busta (envelope) seguente.
In caso di successo
{ "data": ... }
In caso di errore
{ "error": { "code": "...", "message": "...", "details": { ... } } }
Codici di stato
| Stato | Significato |
|---|---|
| 401 | La chiave API non è valida o è scaduta |
| 403 | ⛔status_403_desc |
| 404 | La risorsa non esiste (include anche i casi in cui non hai i permessi di accesso) |
| 405 | ⛔status_405_desc |
| 409 | ⛔status_409_desc |
| 422 | I parametri non sono validi |
| 429 | È stato superato il limite di richieste |
| 500 | Si è verificato un errore imprevisto |
| 503 | ⛔status_503_desc |
⛔conventions_heading
⛔conv_access_heading
⛔conv_access_desc
⛔conv_deleted_heading
⛔conv_deleted_desc
⛔conv_pagination_heading
⛔conv_pagination_desc
⛔conv_datetime_heading
⛔conv_datetime_desc
⛔conv_ids_heading
⛔conv_ids_desc
⛔conv_files_heading
⛔conv_files_desc
⛔conv_values_heading
⛔conv_values_desc
⛔conv_money_heading
⛔conv_money_desc
⛔conv_write_heading
⛔conv_write_desc
⛔conv_idempotency_heading
⛔conv_idempotency_desc
⛔conv_rate_limit_heading
⛔conv_rate_limit_desc
⛔conv_write_rate_limit_heading
⛔conv_write_rate_limit_desc
⛔conv_errors_heading
⛔conv_errors_desc
| ⛔th_code | Significato |
|---|---|
unauthorized | ⛔error_code_unauthorized |
forbidden | ⛔error_code_forbidden |
plan_required | ⛔error_code_plan_required |
team_plan_lost | ⛔error_code_team_plan_lost |
not_found | ⛔error_code_not_found |
method_not_allowed | ⛔error_code_method_not_allowed |
conflict | ⛔error_code_conflict |
idempotency_request_in_progress | ⛔error_code_idempotency_request_in_progress |
validation_error | ⛔error_code_validation_error |
idempotency_key_required | ⛔error_code_idempotency_key_required |
idempotency_key_invalid | ⛔error_code_idempotency_key_invalid |
idempotency_key_reused | ⛔error_code_idempotency_key_reused |
rate_limited | ⛔error_code_rate_limited |
internal_error | ⛔error_code_internal_error |
⛔conv_validation_example_heading
{
"error": {
"code": "validation_error",
"message": "The per page field must not be greater than 100.",
"details": {
"per_page": ["The per page field must not be greater than 100."]
}
}
}
⛔group_account_nav_label
⛔group_account_lead
-
⛔ep_me_title
GET /me -
⛔ep_me_subscription_title
GET /me/subscription -
⛔ep_me_tokens_title
GET /me/tokens -
⛔ep_me_token_usage_title
GET /me/token-usage -
⛔ep_me_storage_title
GET /me/storage -
⛔ep_me_payments_title
GET /me/payments -
⛔ep_me_referral_title
GET /me/referral
⛔ep_me_title
⛔ep_me_desc
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
user_unique |
string | ⛔f_me_user_unique |
nickname |
string | null | ⛔f_me_nickname |
email |
string | ⛔f_me_email |
plan |
string | ⛔f_me_plan |
limits |
object | ⛔f_me_limits |
limits.projects |
integer | null | ⛔f_me_limits_projects |
limits.moviemode_variations_per_title |
integer | null | ⛔f_me_limits_movie_variations |
limits.blogmode_variations_per_title |
integer | null | ⛔f_me_limits_blog_variations |
limits.carouselmode_variations_per_title |
integer | null | ⛔f_me_limits_carousel_variations |
limits.postmode_variations_per_concept |
integer | null | ⛔f_me_limits_post_variations |
limits.team |
boolean | ⛔f_me_limits_team |
limits.script_duration_max |
integer | ⛔f_me_limits_script_duration_max |
limits.reading_time_max |
integer | ⛔f_me_limits_reading_time_max |
limits.reading_time_max_fulltext |
integer | ⛔f_me_limits_reading_time_max_fulltext |
limits.slide_count_max |
integer | ⛔f_me_limits_slide_count_max |
limits.cta_enabled |
boolean | ⛔f_me_limits_cta_enabled |
limits.thread_enabled |
boolean | ⛔f_me_limits_thread_enabled |
limits.schedule_title_variation_max |
integer | ⛔f_me_limits_schedule_title_variation_max |
limits.schedule_variation_create_max |
integer | ⛔f_me_limits_schedule_variation_create_max |
language |
string | null | ⛔f_me_language |
timezone |
string | ⛔f_me_timezone |
team |
object | null | ⛔f_me_team |
team.team_unique |
string | ⛔f_team_unique |
team.role |
string | ⛔f_me_team_role |
created_at |
string | ⛔f_me_created_at |
curl "https://stepeee.com/public-api/v1/me" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/me",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/me", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/me")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/me"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/me");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"user_unique": "aB3dE5gH7j",
"nickname": "Alice",
"email": "alice@example.com",
"plan": "pro",
"limits": {
"projects": 3,
"moviemode_variations_per_title": null,
"blogmode_variations_per_title": null,
"carouselmode_variations_per_title": null,
"postmode_variations_per_concept": null,
"team": false,
"script_duration_max": 1800,
"reading_time_max": 15,
"reading_time_max_fulltext": 4,
"slide_count_max": 20,
"cta_enabled": true,
"thread_enabled": true,
"schedule_title_variation_max": 50,
"schedule_variation_create_max": 5
},
"language": "ja",
"timezone": "Asia/Tokyo",
"team": null,
"created_at": "2026-09-01T10:20:30Z"
}
}
⛔ep_me_subscription_title
⛔ep_me_subscription_desc
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
plan |
string | ⛔f_me_plan |
status |
string | ⛔f_sub_status |
managed_by_team |
boolean | ⛔f_sub_managed_by_team |
current_period_start |
string | null | ⛔f_sub_current_period_start |
current_period_end |
string | null | ⛔f_sub_current_period_end |
cancel_at_period_end |
boolean | ⛔f_sub_cancel_at_period_end |
cancel_at |
string | null | ⛔f_sub_cancel_at |
canceled_at |
string | null | ⛔f_sub_canceled_at |
scheduled_change |
object | null | ⛔f_sub_scheduled_change |
scheduled_change.plan |
string | ⛔f_sub_scheduled_change_plan |
scheduled_change.effective_at |
string | null | ⛔f_sub_scheduled_change_effective_at |
curl "https://stepeee.com/public-api/v1/me/subscription" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/me/subscription",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/me/subscription", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/me/subscription")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/me/subscription"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/me/subscription");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"plan": "pro",
"status": "active",
"managed_by_team": false,
"current_period_start": "2026-10-01T00:00:00Z",
"current_period_end": "2026-11-01T00:00:00Z",
"cancel_at_period_end": false,
"cancel_at": null,
"canceled_at": null,
"scheduled_change": {
"plan": "plus",
"effective_at": "2026-11-01T00:00:00Z"
}
}
}
⛔ep_me_tokens_title
⛔ep_me_tokens_desc
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
balance |
integer | ⛔f_tok_balance |
reserved |
integer | ⛔f_tok_reserved |
available |
integer | ⛔f_tok_available |
wallet |
string | ⛔f_tok_wallet |
team_quota |
object | null | ⛔f_tok_team_quota |
team_quota.unlimited |
boolean | ⛔f_tok_quota_unlimited |
team_quota.view_only |
boolean | ⛔f_tok_quota_view_only |
team_quota.budget |
integer | null | ⛔f_tok_quota_budget |
team_quota.used |
integer | ⛔f_tok_quota_used |
team_quota.available |
integer | null | ⛔f_tok_quota_available |
team_quota.period |
string | null | ⛔f_tok_quota_period |
team_quota.next_reset_at |
string | null | ⛔f_tok_quota_next_reset_at |
auto_purchase.enabled |
boolean | ⛔f_tok_auto_enabled |
auto_purchase.plan |
string | null | ⛔f_tok_auto_plan |
auto_purchase.threshold |
integer | ⛔f_tok_auto_threshold |
curl "https://stepeee.com/public-api/v1/me/tokens" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/me/tokens",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/me/tokens", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/me/tokens")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/me/tokens"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/me/tokens");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"balance": 90000,
"reserved": 1200,
"available": 88800,
"wallet": "team",
"team_quota": {
"unlimited": false,
"view_only": false,
"budget": 10000,
"used": 2500,
"available": 7500,
"period": "week",
"next_reset_at": "2026-10-26T00:00:00Z"
},
"auto_purchase": {
"enabled": true,
"plan": "token_100",
"threshold": 5000
}
}
}
⛔ep_me_token_usage_title
⛔ep_me_token_usage_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
from |
⛔in_query | string (YYYY-MM-DD) | ⛔required_no | — | ⛔p_usage_from |
to |
⛔in_query | string (YYYY-MM-DD) | ⛔required_no | — | ⛔p_usage_to |
group_by |
⛔in_query | string | ⛔required_no | day |
⛔p_usage_group_by |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].period |
string | ⛔f_usage_period |
data[].consumed |
integer | ⛔f_usage_consumed |
data[].added |
integer | ⛔f_usage_added |
data[].consumed_by_type |
object | ⛔f_usage_consumed_by_type |
data[].added_by_type |
object | ⛔f_usage_added_by_type |
meta.from |
string | ⛔f_usage_meta_from |
meta.to |
string | ⛔f_usage_meta_to |
meta.group_by |
string | ⛔f_usage_meta_group_by |
meta.total_consumed |
integer | ⛔f_usage_meta_total_consumed |
meta.total_added |
integer | ⛔f_usage_meta_total_added |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | forbidden |
⛔e_usage_team_staff |
| 422 | validation_error |
⛔e_usage_range |
curl "https://stepeee.com/public-api/v1/me/token-usage?from=2026-10-01&to=2026-10-20&group_by=day" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/me/token-usage?from=2026-10-01&to=2026-10-20&group_by=day",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/me/token-usage?from=2026-10-01&to=2026-10-20&group_by=day", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/me/token-usage?from=2026-10-01&to=2026-10-20&group_by=day")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/me/token-usage?from=2026-10-01&to=2026-10-20&group_by=day"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/me/token-usage?from=2026-10-01&to=2026-10-20&group_by=day");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"period": "2026-10-18",
"consumed": 450,
"added": 0,
"consumed_by_type": { "image": 300, "text": 150 },
"added_by_type": {}
},
{
"period": "2026-10-20",
"consumed": 1000,
"added": 4800,
"consumed_by_type": { "video": 1000 },
"added_by_type": { "purchase": 5000, "referral_revoke": -200 }
}
],
"meta": {
"from": "2026-10-01",
"to": "2026-10-20",
"group_by": "day",
"total_consumed": 1450,
"total_added": 4800
}
}
⛔ep_me_storage_title
⛔ep_me_storage_desc
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
used_bytes |
integer | ⛔f_storage_used_bytes |
capacity_bytes |
integer | null | ⛔f_storage_capacity_bytes |
by_type[].file_type |
string | null | ⛔f_storage_file_type |
by_type[].bytes |
integer | ⛔f_storage_bytes |
by_type[].files |
integer | ⛔f_storage_files |
curl "https://stepeee.com/public-api/v1/me/storage" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/me/storage",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/me/storage", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/me/storage")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/me/storage"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/me/storage");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"used_bytes": 734003200,
"capacity_bytes": null,
"by_type": [
{ "file_type": "image", "bytes": 52428800, "files": 120 },
{ "file_type": "movie", "bytes": 629145600, "files": 8 },
{ "file_type": "voice", "bytes": 52428800, "files": 15 }
]
}
}
⛔ep_me_payments_title
⛔ep_me_payments_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
status |
⛔in_query | string | ⛔required_no | — | ⛔p_payments_status |
type |
⛔in_query | string | ⛔required_no | — | ⛔p_payments_type |
from |
⛔in_query | string | ⛔required_no | — | ⛔p_from_created |
to |
⛔in_query | string | ⛔required_no | — | ⛔p_to_created |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].payment_unique |
string | ⛔f_pay_payment_unique |
data[].type |
string | ⛔f_pay_type |
data[].description |
string | ⛔f_pay_description |
data[].status |
string | ⛔f_pay_status |
data[].currency |
string | ⛔f_pay_currency |
data[].amount_subtotal |
integer | ⛔f_pay_amount_subtotal |
data[].tax_amount |
integer | ⛔f_pay_tax_amount |
data[].amount_total |
integer | ⛔f_pay_amount_total |
data[].line_items[] |
object | ⛔f_pay_line_items |
data[].receipt_url |
string | null | ⛔f_pay_receipt_url |
data[].invoice_pdf_url |
string | null | ⛔f_pay_invoice_pdf_url |
data[].created_at |
string | ⛔f_pay_created_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/me/payments?status=succeeded&per_page=10" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/me/payments?status=succeeded&per_page=10",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/me/payments?status=succeeded&per_page=10", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/me/payments?status=succeeded&per_page=10")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/me/payments?status=succeeded&per_page=10"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/me/payments?status=succeeded&per_page=10");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"payment_unique": "Xy12AbCd34Ef",
"type": "subscription_team",
"description": "Team Monthly",
"status": "succeeded",
"currency": "usd",
"amount_subtotal": 5000,
"tax_amount": 500,
"amount_total": 5500,
"line_items": [
{ "type": "base_plan", "quantity": 1, "amount": 4000, "description": "Team plan" },
{ "type": "extra_member", "quantity": 2, "amount": 1000, "description": null }
],
"receipt_url": "https://pay.stripe.com/receipts/...",
"invoice_pdf_url": "https://pay.stripe.com/invoice/.../pdf",
"created_at": "2026-10-01T08:00:00Z"
}
],
"meta": { "total": 1, "current_page": 1, "per_page": 10, "last_page": 1 }
}
⛔ep_me_referral_title
⛔ep_me_referral_desc
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
code |
string | null | ⛔f_ref_code |
referral_url |
string | null | ⛔f_ref_referral_url |
is_active |
boolean | ⛔f_ref_is_active |
reward_type |
string | null | ⛔f_ref_reward_type |
clicks |
integer | ⛔f_ref_clicks |
signups |
integer | ⛔f_ref_signups |
conversions |
integer | ⛔f_ref_conversions |
earned |
object | ⛔f_ref_earned |
earned_tokens |
integer | ⛔f_ref_earned_tokens |
pending |
object | ⛔f_ref_pending |
available |
object | ⛔f_ref_available |
curl "https://stepeee.com/public-api/v1/me/referral" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/me/referral",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/me/referral", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/me/referral")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/me/referral"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/me/referral");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"code": "REFk5m2j8x9ab",
"referral_url": "https://stepeee.com?ref=REFk5m2j8x9ab",
"is_active": true,
"reward_type": "cash",
"clicks": 12,
"signups": 4,
"conversions": 2,
"earned": { "amount": 1300, "currency": "usd" },
"earned_tokens": 0,
"pending": { "amount": 300, "currency": "usd" },
"available": { "amount": 800, "currency": "usd" }
}
}
Progetti
⛔group_projects_lead
-
⛔ep_projects_list_title
GET /projects -
⛔ep_projects_detail_title
GET /projects/{project_unique} -
⛔ep_concepts_list_title
GET /projects/{project_unique}/concepts -
⛔ep_concepts_detail_title
GET /projects/{project_unique}/concepts/{concept_unique}
⛔ep_projects_list_title
Recupera l'elenco dei progetti accessibili al titolare della chiave API.
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].project_unique |
string | ⛔f_proj_project_unique |
data[].project_name |
string | ⛔f_proj_project_name |
data[].description |
string | null | ⛔f_proj_description |
data[].access_level |
string | ⛔f_proj_access_level |
data[].team |
object | null | ⛔f_proj_team |
data[].team.team_unique |
string | ⛔f_team_unique |
data[].is_readonly |
boolean | ⛔f_proj_is_readonly |
data[].readonly_since |
string | null | ⛔f_proj_readonly_since |
data[].created_at |
string | ⛔f_created_at |
data[].updated_at |
string | ⛔f_updated_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/projects" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"project_unique": "a1b2c3d4e5",
"project_name": "Sample Project",
"description": "Sample project description",
"access_level": "owner",
"team": null,
"is_readonly": false,
"readonly_since": null,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-10-01T12:00:00Z"
}
],
"meta": { "total": 1, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_projects_detail_title
Recupera i dettagli di un singolo progetto.
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
project_unique |
string | ⛔f_proj_project_unique |
project_name |
string | ⛔f_proj_project_name |
description |
string | null | ⛔f_proj_description |
access_level |
string | ⛔f_proj_access_level |
team |
object | null | ⛔f_proj_team |
team.team_unique |
string | ⛔f_team_unique |
is_readonly |
boolean | ⛔f_proj_is_readonly |
readonly_since |
string | null | ⛔f_proj_readonly_since |
created_at |
string | ⛔f_created_at |
updated_at |
string | ⛔f_updated_at |
scope |
string | ⛔f_proj_scope |
scope_region |
string | null | ⛔f_proj_scope_region |
counts.{mode}.concepts |
integer | ⛔f_proj_counts_concepts |
counts.{mode}.titles |
integer | null | ⛔f_proj_counts_titles |
counts.{mode}.contents |
object | ⛔f_proj_counts_contents |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"project_unique": "a1b2c3d4e5",
"project_name": "Sample Project",
"description": "Sample project description",
"access_level": "owner",
"team": null,
"is_readonly": false,
"readonly_since": null,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-10-01T12:00:00Z",
"scope": "region",
"scope_region": "JP",
"counts": {
"moviemode": {
"concepts": 2,
"titles": 5,
"contents": { "total": 8, "not_started": 1, "in_progress": 3, "complete": 4 }
},
"blogmode": {
"concepts": 1,
"titles": 3,
"contents": { "total": 3, "not_started": 0, "in_progress": 1, "complete": 2 }
},
"carouselmode": {
"concepts": 0,
"titles": 0,
"contents": { "total": 0, "not_started": 0, "in_progress": 0, "complete": 0 }
},
"postmode": {
"concepts": 1,
"titles": null,
"contents": { "total": 1, "not_started": 0, "in_progress": 1, "complete": 0 }
}
}
}
}
⛔ep_concepts_list_title
⛔ep_concepts_list_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
mode |
⛔in_query | string | ⛔required_no | — | ⛔p_mode |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].concept_unique |
string | ⛔f_concept_unique |
data[].mode |
string | ⛔f_mode |
data[].concept_name |
string | ⛔f_concept_name |
data[].title_count |
integer | null | ⛔f_concept_title_count |
data[].content_count |
integer | ⛔f_concept_content_count |
data[].created_at |
string | ⛔f_created_at |
data[].updated_at |
string | ⛔f_updated_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts?mode=moviemode,postmode" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts?mode=moviemode,postmode",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts?mode=moviemode,postmode", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts?mode=moviemode,postmode")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts?mode=moviemode,postmode"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts?mode=moviemode,postmode");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"concept_unique": "pC7d2KqLx01m",
"mode": "postmode",
"concept_name": "SaaS growth tips",
"title_count": null,
"content_count": 1,
"created_at": "2026-10-02T09:00:00Z",
"updated_at": "2026-10-02T09:00:00Z"
},
{
"concept_unique": "mC4f9TnB2q",
"mode": "moviemode",
"concept_name": "Cat facts",
"title_count": 3,
"content_count": 5,
"created_at": "2026-09-20T03:00:00Z",
"updated_at": "2026-09-28T03:00:00Z"
}
],
"meta": { "total": 2, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_concepts_detail_title
⛔ep_concepts_detail_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
concept_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_concept_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
concept_unique / mode / concept_name / title_count / content_count / created_at / updated_at |
— | ⛔f_concept_same_as_list |
description |
string | null | ⛔f_concept_description |
scope |
string | ⛔f_proj_scope |
scope_region |
string | null | ⛔f_proj_scope_region |
default_template_unique |
string | null | ⛔f_concept_default_template_unique |
titles |
array | null | ⛔f_concept_titles |
titles[].title_unique |
string | ⛔f_title_unique |
titles[].title_name |
string | ⛔f_title_name |
titles[].article_type |
string | null | ⛔f_title_article_type |
titles[].content_count |
integer | ⛔f_title_content_count |
persona |
object | null | ⛔f_persona |
persona.persona_unique |
string | ⛔f_persona_unique |
persona.gender |
string | ⛔f_persona_gender |
persona.generation |
string | ⛔f_persona_generation |
persona.region |
string | null | ⛔f_persona_region |
persona.keywords |
object | ⛔f_persona_keywords |
persona.description |
string | ⛔f_persona_description |
persona.casual_description |
string | null | ⛔f_persona_casual_description |
persona.taboos |
array | ⛔f_persona_taboos |
persona.timezone_mode |
string | ⛔f_persona_timezone_mode |
persona.timezone |
string | null | ⛔f_persona_timezone |
rule |
object | null | ⛔f_rule |
rule.rule_unique |
string | ⛔f_rule_unique |
rule.language |
string | ⛔f_rule_language |
rule.formality |
string | ⛔f_rule_formality |
rule.emoji |
string | ⛔f_rule_emoji |
rule.line_break |
string | ⛔f_rule_line_break |
rule.post_type_share |
object | ⛔f_rule_post_type_share |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 404 | not_found |
⛔e_concept_not_found |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts/pC7d2KqLx01m" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts/pC7d2KqLx01m",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts/pC7d2KqLx01m", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts/pC7d2KqLx01m")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts/pC7d2KqLx01m"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/concepts/pC7d2KqLx01m");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"concept_unique": "pC7d2KqLx01m",
"mode": "postmode",
"concept_name": "SaaS growth tips",
"title_count": null,
"content_count": 1,
"created_at": "2026-10-02T09:00:00Z",
"updated_at": "2026-10-02T09:00:00Z",
"description": "Practical growth tips for SaaS founders",
"scope": "global",
"scope_region": null,
"default_template_unique": null,
"titles": null,
"persona": {
"persona_unique": "aV3kQ9mN2pRt",
"gender": "female",
"generation": "30s",
"region": "JP",
"keywords": { "occupation": "SaaS marketer", "interest": ["growth", "analytics"] },
"description": "A B2B SaaS marketer with ten years of experience...",
"casual_description": null,
"taboos": ["politics"],
"timezone_mode": "auto",
"timezone": "Asia/Tokyo",
"updated_at": "2026-10-02T09:10:00Z"
},
"rule": {
"rule_unique": "rU5tW7yZ9aBc",
"language": "ja",
"formality": "polite",
"emoji": "sometimes",
"line_break": "moderate",
"post_type_share": { "assertion": 40, "knowhow": 30, "experience": 20, "casual": 10 },
"updated_at": "2026-10-02T09:20:00Z"
}
}
}
Contenuti
⛔group_contents_lead
-
⛔ep_contents_list_title
GET /projects/{project_unique}/contents -
⛔ep_contents_detail_title
GET /projects/{project_unique}/contents/{variation_unique} -
⛔ep_contents_schedule_title
GET /projects/{project_unique}/contents/{variation_unique}/schedule
⛔ep_contents_list_title
Recupera un elenco unificato dei contenuti generati in un progetto (post, blog, immagini e video).
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
mode |
⛔in_query | string | ⛔required_no | — | ⛔p_mode |
status |
⛔in_query | string | ⛔required_no | — | ⛔p_contents_status |
concept_unique |
⛔in_query | string | ⛔required_no | — | ⛔p_contents_concept_unique |
title_unique |
⛔in_query | string | ⛔required_no | — | ⛔p_contents_title_unique |
language |
⛔in_query | string | ⛔required_no | — | ⛔p_contents_language |
published |
⛔in_query | string | ⛔required_no | — | ⛔p_contents_published |
from |
⛔in_query | string | ⛔required_no | — | ⛔p_from_created |
to |
⛔in_query | string | ⛔required_no | — | ⛔p_to_created |
sort |
⛔in_query | string | ⛔required_no | -created_at |
⛔p_contents_sort |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].mode |
string | ⛔f_mode |
data[].variation_unique |
string | ⛔f_content_variation_unique |
data[].variation_no |
integer | ⛔f_content_variation_no |
data[].title |
string | ⛔f_content_title |
data[].concept |
object | ⛔f_content_concept |
data[].title_unique |
string | null | ⛔f_content_title_unique |
data[].language |
string | null | ⛔f_content_language |
data[].status |
string | ⛔f_content_status |
data[].progress.step_process |
integer | ⛔f_content_step_process |
data[].progress.is_complete |
boolean | ⛔f_content_is_complete |
data[].is_readonly |
boolean | ⛔f_content_is_readonly |
data[].confirmed_at |
string | null | ⛔f_content_confirmed_at |
data[].published_platforms |
array | ⛔f_content_published_platforms |
data[].created_at |
string | ⛔f_created_at |
data[].updated_at |
string | ⛔f_updated_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents?mode=blogmode&status=complete&published=false" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents?mode=blogmode&status=complete&published=false",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents?mode=blogmode&status=complete&published=false", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents?mode=blogmode&status=complete&published=false")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents?mode=blogmode&status=complete&published=false"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents?mode=blogmode&status=complete&published=false");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"mode": "blogmode",
"variation_unique": "bmA1b2C3d4E5",
"variation_no": 1,
"title": "How to start a blog",
"concept": { "concept_unique": "bC2x8RtY4u", "concept_name": "Blogging for beginners" },
"title_unique": "bT9kL3mN5pQr",
"language": "en",
"status": "complete",
"progress": { "step_process": 3, "is_complete": true },
"is_readonly": false,
"confirmed_at": "2026-10-03T08:00:00Z",
"published_platforms": [],
"created_at": "2026-10-01T03:00:00Z",
"updated_at": "2026-10-03T08:00:00Z"
}
],
"meta": { "total": 1, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_contents_detail_title
Recupera i dettagli di un singolo contenuto. Include il testo e gli asset generati, oltre allo stato di pubblicazione (risultati della pubblicazione su social/WordPress, ecc.). La struttura di "content" varia in base alla modalità.
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
variation_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_variation_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
mode / variation_unique / … / updated_at |
— | ⛔f_content_same_as_list |
publish[] |
object | ⛔f_content_publish |
publish[].platform |
string | ⛔f_platform |
publish[].status |
string | ⛔f_publish_status |
publish[].post_url |
string | null | ⛔f_post_url |
publish[].posted_at |
string | null | ⛔f_posted_at |
content |
object | ⛔f_content_content |
package |
object | null | ⛔f_content_package |
package.video (moviemode) |
object | null | ⛔f_pkg_movie_video |
package.youtube.title (moviemode) |
string | null | ⛔f_pkg_youtube_title |
package.youtube.description (moviemode) |
string | null | ⛔f_pkg_youtube_description |
package.youtube.thumbnail (moviemode) |
object | null | ⛔f_pkg_youtube_thumbnail |
package.tiktok.caption (moviemode) |
string | null | ⛔f_pkg_tiktok_caption |
package.instagram.caption (moviemode / carouselmode) |
string | null | ⛔f_pkg_instagram_caption |
package.instagram.cover (moviemode) |
object | null | ⛔f_pkg_instagram_cover |
package.x.posts (moviemode / blogmode / carouselmode) |
array | ⛔f_pkg_x_posts |
package.title (blogmode) |
string | null | ⛔f_pkg_blog_title |
package.meta_description (blogmode) |
string | null | ⛔f_pkg_blog_meta_description |
package.body_html (blogmode) |
string | null | ⛔f_pkg_blog_body_html |
package.images (blogmode) |
array | ⛔f_pkg_blog_images |
package.cover_image (blogmode) |
object | null | ⛔f_pkg_blog_cover_image |
package.audio (blogmode) |
object | null | ⛔f_pkg_blog_audio |
package.slides[] (carouselmode) |
object | ⛔f_pkg_carousel_slides |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 404 | not_found |
⛔e_content_not_found |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/bmA1b2C3d4E5" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/bmA1b2C3d4E5",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/bmA1b2C3d4E5", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/bmA1b2C3d4E5")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/bmA1b2C3d4E5"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/bmA1b2C3d4E5");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"mode": "blogmode",
"variation_unique": "bmA1b2C3d4E5",
"variation_no": 1,
"title": "How to start a blog",
"concept": { "concept_unique": "bC2x8RtY4u", "concept_name": "Blogging for beginners" },
"title_unique": "bT9kL3mN5pQr",
"language": "en",
"status": "complete",
"progress": { "step_process": 3, "is_complete": true },
"is_readonly": false,
"confirmed_at": "2026-10-03T08:00:00Z",
"published_platforms": ["wordpress"],
"created_at": "2026-10-01T03:00:00Z",
"updated_at": "2026-10-03T08:00:00Z",
"publish": [
{
"platform": "wordpress",
"status": "success",
"post_url": "https://blog.example.com/how-to-start-a-blog/",
"posted_at": "2026-10-03T09:00:00Z"
}
],
"content": { "body_html": "<h2>Why start a blog</h2><p>...</p>" },
"package": {
"title": "How to Start a Blog in 2026",
"meta_description": "A step-by-step guide to starting your first blog.",
"body_html": "<h2>Why start a blog</h2><p>...</p><figure><img src=\"https://...\" alt=\"\" /></figure>",
"images": [
{ "url": "https://...", "expires_at": "2026-10-21T10:00:00Z", "width": 1536, "height": 1024 }
],
"cover_image": { "url": "https://...", "expires_at": "2026-10-21T10:00:00Z", "width": 1200, "height": 630 },
"audio": null,
"x": { "posts": ["New post: How to start a blog in 2026"] }
}
}
}
⛔ep_contents_schedule_title
⛔ep_contents_schedule_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
variation_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_variation_unique |
from |
⛔in_query | string | ⛔required_no | — | ⛔p_schedule_from |
to |
⛔in_query | string | ⛔required_no | — | ⛔p_schedule_to |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
automation.enabled |
boolean | ⛔f_sch_auto_enabled |
automation.is_executing |
boolean | ⛔f_sch_auto_is_executing |
automation.week_limit |
integer | null | ⛔f_sch_auto_week_limit |
automation.week_count |
integer | ⛔f_sch_auto_week_count |
automation.next_refill_at |
string | null | ⛔f_sch_auto_next_refill_at |
automation.timezone |
string | null | ⛔f_sch_auto_timezone |
items[].schedule_unique |
string | ⛔f_sch_schedule_unique |
items[].post_unique |
string | null | ⛔f_sch_post_unique |
items[].scheduled_at |
string | ⛔f_sch_scheduled_at |
items[].scheduled_at_local |
string | ⛔f_sch_scheduled_at_local |
items[].timezone |
string | ⛔f_sch_timezone |
items[].status |
string | ⛔f_sch_status |
items[].confirm_state |
string | ⛔f_sch_confirm_state |
items[].created_via |
string | ⛔f_sch_created_via |
items[].post_type |
string | ⛔f_sch_post_type |
items[].text |
string | null | ⛔f_sch_text |
items[].thread[] |
object | ⛔f_sch_thread |
items[].image |
object | null | ⛔f_sch_image |
items[].post_url |
string | null | ⛔f_post_url |
items[].posted_at |
string | null | ⛔f_posted_at |
items[].fail_reason |
string | null | ⛔f_sch_fail_reason |
meta.from / meta.to |
string | ⛔f_sch_meta_range |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 404 | not_found |
⛔e_schedule_not_found |
| 422 | validation_error |
⛔e_schedule_range |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/pmV7d2KqLx01/schedule?from=2026-10-20&to=2026-11-20" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/pmV7d2KqLx01/schedule?from=2026-10-20&to=2026-11-20",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/pmV7d2KqLx01/schedule?from=2026-10-20&to=2026-11-20", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/pmV7d2KqLx01/schedule?from=2026-10-20&to=2026-11-20")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/pmV7d2KqLx01/schedule?from=2026-10-20&to=2026-11-20"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/contents/pmV7d2KqLx01/schedule?from=2026-10-20&to=2026-11-20");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"automation": {
"enabled": true,
"is_executing": true,
"week_limit": 4,
"week_count": 2,
"next_refill_at": "2026-10-26T15:00:00Z",
"timezone": "Asia/Tokyo"
},
"items": [
{
"schedule_unique": "Sc1aB2cD3eF4",
"post_unique": "Po1aB2cD3eF4",
"scheduled_at": "2026-10-20T01:00:00Z",
"scheduled_at_local": "2026-10-20T10:00:00",
"timezone": "Asia/Tokyo",
"status": "posted",
"confirm_state": "none",
"created_via": "auto",
"post_type": "assertion",
"text": "Most teams overthink onboarding...",
"thread": [
{
"text": "First, cut the steps in half.",
"post_url": "https://x.com/i/status/1848000000000000002",
"posted_at": "2026-10-20T01:00:05Z",
"image": null
}
],
"image": { "url": "https://...", "expires_at": "2026-10-21T10:00:00Z" },
"post_url": "https://x.com/i/status/1848000000000000001",
"posted_at": "2026-10-20T01:00:00Z",
"fail_reason": null
},
{
"schedule_unique": "Sc9zY8xW7vU6",
"post_unique": null,
"scheduled_at": "2026-10-25T09:30:00Z",
"scheduled_at_local": "2026-10-25T18:30:00",
"timezone": "Asia/Tokyo",
"status": "pending",
"confirm_state": "none",
"created_via": "auto",
"post_type": "knowhow",
"text": null,
"thread": [],
"image": null,
"post_url": null,
"posted_at": null,
"fail_reason": null
}
]
},
"meta": { "from": "2026-10-20T00:00:00Z", "to": "2026-11-20T23:59:59Z" }
}
⛔group_publish_nav_label
⛔group_publish_lead
-
⛔ep_publications_list_title
GET /projects/{project_unique}/publications -
⛔ep_accounts_list_title
GET /projects/{project_unique}/accounts
⛔ep_publications_list_title
⛔ep_publications_list_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
mode |
⛔in_query | string | ⛔required_no | — | ⛔p_mode |
platform |
⛔in_query | string | ⛔required_no | — | ⛔p_publications_platform |
status |
⛔in_query | string | ⛔required_no | — | ⛔p_publications_status |
from |
⛔in_query | string | ⛔required_no | — | ⛔p_publications_from |
to |
⛔in_query | string | ⛔required_no | — | ⛔p_publications_to |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].publication_unique |
string | ⛔f_pub_publication_unique |
data[].mode |
string | ⛔f_mode |
data[].content.variation_unique |
string | ⛔f_content_variation_unique |
data[].content.title |
string | null | ⛔f_content_title |
data[].platform |
string | ⛔f_platform |
data[].account |
object | null | ⛔f_pub_account |
data[].status |
string | ⛔f_publish_status |
data[].post_url |
string | null | ⛔f_post_url |
data[].error_code |
string | null | ⛔f_pub_error_code |
data[].is_automation |
boolean | ⛔f_pub_is_automation |
data[].posted_at |
string | null | ⛔f_posted_at |
data[].created_at |
string | ⛔f_created_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/publications?platform=x,youtube&status=failed" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/publications?platform=x,youtube&status=failed",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/publications?platform=x,youtube&status=failed", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/publications?platform=x,youtube&status=failed")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/publications?platform=x,youtube&status=failed"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/publications?platform=x,youtube&status=failed");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"publication_unique": "Xk3p9QmZ2aLw",
"mode": "postmode",
"content": { "variation_unique": "pmV7d2KqLx01", "title": "SaaS growth tips" },
"platform": "x",
"account": null,
"status": "success",
"post_url": "https://x.com/i/status/1848123456789012345",
"error_code": null,
"is_automation": true,
"posted_at": "2026-10-04T10:00:00Z",
"created_at": "2026-10-03T22:10:00Z"
},
{
"publication_unique": "Pq2wE4rT6yUi",
"mode": "blogmode",
"content": { "variation_unique": "bmA1b2C3d4E5", "title": "How to start a blog" },
"platform": "wordpress",
"account": { "account_unique": "Wp3xY5zA7bCd", "name": "My WP Site" },
"status": "failed",
"post_url": null,
"error_code": "auth_failed",
"is_automation": false,
"posted_at": null,
"created_at": "2026-10-02T10:00:00Z"
}
],
"meta": { "total": 2, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_accounts_list_title
⛔ep_accounts_list_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].account_unique |
string | ⛔f_acc_account_unique |
data[].platform |
string | ⛔f_platform |
data[].name |
string | ⛔f_acc_name |
data[].image_url |
string | null | ⛔f_acc_image_url |
data[].status |
string | ⛔f_acc_status |
data[].token_expires_at |
string | null | ⛔f_acc_token_expires_at |
data[].connected_at |
string | null | ⛔f_acc_connected_at |
data[].last_used_at |
string | null | ⛔f_acc_last_used_at |
data[].site_url |
string | null | ⛔f_acc_site_url |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
curl "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/accounts" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/accounts",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/accounts", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/accounts")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/accounts"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/a1b2c3d4e5/accounts");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"account_unique": "Wh9kQ2mN4pRt",
"platform": "webhook",
"name": "https://hooks.example.com/…",
"image_url": null,
"status": "active",
"token_expires_at": null,
"connected_at": "2026-07-01T00:00:00Z",
"last_used_at": null,
"site_url": null
},
{
"account_unique": "Wp3xY5zA7bCd",
"platform": "wordpress",
"name": "Example Blog",
"image_url": null,
"status": "connection_error",
"token_expires_at": null,
"connected_at": "2026-08-01T00:00:00Z",
"last_used_at": null,
"site_url": "https://blog.example.com"
},
{
"account_unique": "Yt4aB6cD8eFg",
"platform": "youtube",
"name": "Channel B",
"image_url": "https://yt3.ggpht.com/abc.png",
"status": "expired",
"token_expires_at": "2026-10-01T00:00:00Z",
"connected_at": "2026-09-01T00:00:00Z",
"last_used_at": "2026-09-30T00:00:00Z",
"site_url": null
}
]
}
⛔group_automations_nav_label
⛔group_automations_lead
-
⛔ep_automations_list_title
GET /automations -
⛔ep_automations_detail_title
GET /automations/{auto_unique}
⛔ep_automations_list_title
⛔ep_automations_list_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
status |
⛔in_query | string | ⛔required_no | — | ⛔p_auto_status |
mode |
⛔in_query | string | ⛔required_no | — | ⛔p_auto_mode |
project_unique |
⛔in_query | string | ⛔required_no | — | ⛔p_auto_project_unique |
from |
⛔in_query | string | ⛔required_no | — | ⛔p_from_created |
to |
⛔in_query | string | ⛔required_no | — | ⛔p_to_created |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].auto_unique |
string | ⛔f_auto_auto_unique |
data[].mode |
string | ⛔f_auto_mode |
data[].project |
object | ⛔f_auto_project |
data[].content.variation_unique |
string | ⛔f_content_variation_unique |
data[].content.title |
string | null | ⛔f_content_title |
data[].run_no |
integer | ⛔f_auto_run_no |
data[].status |
string | ⛔f_auto_status |
data[].execution_mode |
string | ⛔f_auto_execution_mode |
data[].phases |
object | ⛔f_auto_phases |
data[].template.setup_template_name |
string | null | ⛔f_auto_setup_template_name |
data[].template.automation_template_name |
string | null | ⛔f_auto_automation_template_name |
data[].reserved_at |
string | null | ⛔f_auto_reserved_at |
data[].executed_at |
string | null | ⛔f_auto_executed_at |
data[].completed_at |
string | null | ⛔f_auto_completed_at |
data[].created_at |
string | ⛔f_auto_created_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/automations?status=executing,waiting_confirmation" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/automations?status=executing,waiting_confirmation",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/automations?status=executing,waiting_confirmation", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/automations?status=executing,waiting_confirmation")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/automations?status=executing,waiting_confirmation"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/automations?status=executing,waiting_confirmation");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"auto_unique": "aB3dE5fG7h",
"mode": "blogmode",
"project": { "project_unique": "Pq7Rs9Tu1V", "project_name": "My Blog" },
"content": { "variation_unique": "Xy12Zw34Ab56", "title": "Spring travel tips" },
"run_no": 2,
"status": "executing",
"execution_mode": "sequential",
"phases": { "setup": "done", "step1": "done", "step2": "running", "step3": "not_started" },
"template": { "setup_template_name": "Default setup", "automation_template_name": null },
"reserved_at": null,
"executed_at": "2026-10-19T23:09:27Z",
"completed_at": null,
"created_at": "2026-10-19T23:09:20Z"
}
],
"meta": { "total": 1, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_automations_detail_title
⛔ep_automations_detail_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
auto_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_auto_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
auto_unique / mode / … / created_at |
— | ⛔f_auto_same_as_list |
steps[].key |
string | ⛔f_step_key |
steps[].phase |
string | ⛔f_step_phase |
steps[].status |
string | ⛔f_step_status |
steps[].started_at |
string | null | ⛔f_step_started_at |
steps[].finished_at |
string | null | ⛔f_step_finished_at |
steps[].duration_sec |
number | null | ⛔f_step_duration_sec |
steps[].error_code |
string | null | ⛔f_step_error_code |
accounts[] |
object | ⛔f_auto_accounts |
stop_requested |
boolean | ⛔f_auto_stop_requested |
confirmation.requested_at |
string | null | ⛔f_auto_confirm_requested_at |
confirmation.confirmed_at |
string | null | ⛔f_auto_confirmed_at |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_automation_not_found |
curl "https://stepeee.com/public-api/v1/automations/aB3dE5fG7h" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/automations/aB3dE5fG7h",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/automations/aB3dE5fG7h", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/automations/aB3dE5fG7h")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/automations/aB3dE5fG7h"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/automations/aB3dE5fG7h");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"auto_unique": "aB3dE5fG7h",
"mode": "blogmode",
"project": { "project_unique": "Pq7Rs9Tu1V", "project_name": "My Blog" },
"content": { "variation_unique": "Xy12Zw34Ab56", "title": "Spring travel tips" },
"run_no": 2,
"status": "failed",
"execution_mode": "sequential",
"phases": { "setup": "done", "step1": "done", "step2": "done", "step3": "error" },
"template": { "setup_template_name": "Default setup", "automation_template_name": "Skip voice" },
"reserved_at": null,
"executed_at": "2026-10-19T23:09:27Z",
"completed_at": "2026-10-19T23:17:50Z",
"created_at": "2026-10-19T23:09:20Z",
"steps": [
{ "key": "setup", "phase": "setup", "status": "success", "started_at": null, "finished_at": "2026-10-19T23:09:29Z", "duration_sec": 2.3, "error_code": null },
{ "key": "step1_1_text", "phase": "step1", "status": "success", "started_at": null, "finished_at": "2026-10-19T23:11:40Z", "duration_sec": 126.3, "error_code": null },
{ "key": "step2_2", "phase": "step2", "status": "skipped", "started_at": null, "finished_at": "2026-10-19T23:17:39Z", "duration_sec": null, "error_code": null },
{ "key": "step3_4_webhook", "phase": "step3", "status": "error", "started_at": null, "finished_at": "2026-10-19T23:17:46Z", "duration_sec": 1.2, "error_code": "automation_server_error" }
],
"accounts": [
{ "platform": "webhook", "account_unique": "dxuD2gk3NYuA", "name": null }
],
"stop_requested": false,
"confirmation": { "requested_at": null, "confirmed_at": null }
}
}
⛔group_materials_nav_label
⛔group_materials_lead
-
⛔ep_materials_list_title
GET /materials -
⛔ep_materials_detail_title
GET /materials/{material_unique} -
⛔ep_material_categories_title
GET /material-categories -
⛔ep_templates_list_title
GET /templates
⛔ep_materials_list_title
⛔ep_materials_list_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
kind |
⛔in_query | string | ⛔required_no | — | ⛔p_mat_kind |
type |
⛔in_query | string | ⛔required_no | — | ⛔p_mat_type |
category_unique |
⛔in_query | string | ⛔required_no | — | ⛔p_mat_category_unique |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].material_unique |
string | ⛔f_mat_material_unique |
data[].kind |
string | ⛔f_mat_kind |
data[].type |
string | ⛔f_mat_type |
data[].category |
object | null | ⛔f_mat_category |
data[].width / data[].height |
integer | null | ⛔f_mat_size_px |
data[].duration_ms |
integer | null | ⛔f_mat_duration_ms |
data[].size_bytes |
integer | ⛔f_mat_size_bytes |
data[].file |
object | ⛔f_mat_file |
data[].thumbnail |
object | null | ⛔f_mat_thumbnail |
data[].created_at |
string | ⛔f_created_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/materials?kind=image&type=image_vertical" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/materials?kind=image&type=image_vertical",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/materials?kind=image&type=image_vertical", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/materials?kind=image&type=image_vertical")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/materials?kind=image&type=image_vertical"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/materials?kind=image&type=image_vertical");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"material_unique": "aB3dE5fG7hJ9kL1mN3pQ",
"kind": "image",
"type": "image_vertical",
"category": { "category_unique": "Xy12Ab34Cd", "name": "Product shots" },
"width": 768,
"height": 1344,
"duration_ms": null,
"size_bytes": 1234567,
"file": { "url": "https://...", "expires_at": "2026-10-21T11:00:00Z" },
"thumbnail": { "url": "https://...", "expires_at": "2026-10-21T11:00:00Z" },
"created_at": "2026-10-01T10:00:00Z"
},
{
"material_unique": "Zq9Wv8Ut7Sr6Qp5On4Ml",
"kind": "bgm",
"type": "bgm",
"category": null,
"width": null,
"height": null,
"duration_ms": 30000,
"size_bytes": 482133,
"file": { "url": "https://...", "expires_at": "2026-10-21T11:00:00Z" },
"thumbnail": null,
"created_at": "2026-09-30T08:12:00Z"
}
],
"meta": { "total": 2, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_materials_detail_title
⛔ep_materials_detail_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
material_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_material_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
material_unique |
string | ⛔f_mat_material_unique |
kind |
string | ⛔f_mat_kind |
type |
string | ⛔f_mat_type |
category |
object | null | ⛔f_mat_category |
width / height |
integer | null | ⛔f_mat_size_px |
duration_ms |
integer | null | ⛔f_mat_duration_ms |
size_bytes |
integer | ⛔f_mat_size_bytes |
file |
object | ⛔f_mat_file |
thumbnail |
object | null | ⛔f_mat_thumbnail |
created_at |
string | ⛔f_created_at |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_material_not_found |
curl "https://stepeee.com/public-api/v1/materials/aB3dE5fG7hJ9kL1mN3pQ" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/materials/aB3dE5fG7hJ9kL1mN3pQ",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/materials/aB3dE5fG7hJ9kL1mN3pQ", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/materials/aB3dE5fG7hJ9kL1mN3pQ")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/materials/aB3dE5fG7hJ9kL1mN3pQ"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/materials/aB3dE5fG7hJ9kL1mN3pQ");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"material_unique": "aB3dE5fG7hJ9kL1mN3pQ",
"kind": "image",
"type": "image_vertical",
"category": { "category_unique": "Xy12Ab34Cd", "name": "Product shots" },
"width": 768,
"height": 1344,
"duration_ms": null,
"size_bytes": 1234567,
"file": { "url": "https://...", "expires_at": "2026-10-21T11:00:00Z" },
"thumbnail": { "url": "https://...", "expires_at": "2026-10-21T11:00:00Z" },
"created_at": "2026-10-01T10:00:00Z"
}
}
⛔ep_material_categories_title
⛔ep_material_categories_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
kind |
⛔in_query | string | ⛔required_no | — | ⛔p_mat_kind |
type |
⛔in_query | string | ⛔required_no | — | ⛔p_mat_type |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].category_unique |
string | ⛔f_matcat_category_unique |
data[].name |
string | ⛔f_matcat_name |
data[].kind |
string | ⛔f_mat_kind |
data[].type |
string | ⛔f_mat_type |
data[].is_system |
boolean | ⛔f_matcat_is_system |
data[].material_count |
integer | ⛔f_matcat_material_count |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/material-categories?kind=image" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/material-categories?kind=image",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/material-categories?kind=image", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/material-categories?kind=image")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/material-categories?kind=image"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/material-categories?kind=image");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"category_unique": "Bg12Ab34Cd",
"name": "Lo-fi",
"kind": "bgm",
"type": "bgm",
"is_system": false,
"material_count": 3
},
{
"category_unique": "Xy12Ab34Cd",
"name": "Product shots",
"kind": "image",
"type": "image_vertical",
"is_system": false,
"material_count": 12
}
]
}
⛔ep_templates_list_title
⛔ep_templates_list_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
mode |
⛔in_query | string | ⛔required_no | — | ⛔p_tpl_mode |
kind |
⛔in_query | string | ⛔required_no | — | ⛔p_tpl_kind |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].template_unique |
string | ⛔f_tpl_template_unique |
data[].kind |
string | ⛔f_tpl_kind |
data[].mode |
string | ⛔f_mode |
data[].name |
string | ⛔f_tpl_name |
data[].created_at |
string | ⛔f_created_at |
data[].updated_at |
string | ⛔f_updated_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/templates?kind=setup&mode=moviemode" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/templates?kind=setup&mode=moviemode",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/templates?kind=setup&mode=moviemode", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/templates?kind=setup&mode=moviemode")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/templates?kind=setup&mode=moviemode"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/templates?kind=setup&mode=moviemode");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"template_unique": "Ab12Cd34Ef",
"kind": "automation",
"mode": "carouselmode",
"name": "Morning carousel",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-10-05T00:00:00Z"
},
{
"template_unique": "Gh56Ij78Kl",
"kind": "setup",
"mode": "moviemode",
"name": "60-second explainer",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-10-01T00:00:00Z"
}
],
"meta": { "total": 2, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔group_write_contents_nav_label
⛔group_write_contents_lead
-
⛔ep_titles_store_title
POST /projects/{project_unique}/concepts/{concept_unique}/titles -
⛔ep_contents_destroy_title
DELETE /projects/{project_unique}/contents/{variation_unique}
⛔ep_titles_store_title
⛔ep_titles_store_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
concept_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_titles_concept_unique |
titles |
⛔in_body | string[] | ⛔required_yes | — | ⛔p_titles_titles |
language |
⛔in_body | string | ⛔required_yes | — | ⛔p_titles_language |
setup_template_unique |
⛔in_body | string | null | ⛔required_no | — | ⛔p_titles_setup_template_unique |
Idempotency-Key |
⛔in_header | string | ⛔required_no | — | ⛔p_idempotency_key_optional |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
created[] |
object | ⛔f_titles_created |
created[].title_unique |
string | ⛔f_titles_title_unique |
created[].title_name |
string | ⛔f_titles_title_name |
created[].variation_unique |
string | null | ⛔f_titles_variation_unique |
skipped[] |
object | ⛔f_titles_skipped |
skipped[].title_name |
string | ⛔f_titles_title_name |
skipped[].reason |
string | ⛔f_titles_skipped_reason |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 403 | readonly |
⛔e_titles_readonly |
| 404 | not_found |
⛔e_titles_not_found |
| 409 | title_limit_reached |
⛔e_title_limit_reached |
| 409 | idempotency_request_in_progress |
⛔e_idempotency_request_in_progress |
| 422 | validation_error |
⛔e_invalid_params |
| 422 | mode_not_supported |
⛔e_titles_mode_not_supported |
| 422 | template_not_found |
⛔e_titles_template_not_found |
| 422 | idempotency_key_invalid |
⛔e_idempotency_key_invalid |
| 422 | idempotency_key_reused |
⛔e_idempotency_key_reused |
curl -X POST "https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/concepts/Cx2Yz4Wv6Ut8/titles" \
-H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90" \
-d '{
"titles": ["Easy breakfast for beginners", "Meal prep in 5 minutes", "Easy breakfast for beginners"],
"language": "en",
"setup_template_unique": "Gh56Ij78Kl"
}'
import requests
body = """{
"titles": ["Easy breakfast for beginners", "Meal prep in 5 minutes", "Easy breakfast for beginners"],
"language": "en",
"setup_template_unique": "Gh56Ij78Kl"
}"""
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/concepts/Cx2Yz4Wv6Ut8/titles",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
data=body,
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/concepts/Cx2Yz4Wv6Ut8/titles", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
body: JSON.stringify({
"titles": ["Easy breakfast for beginners", "Meal prep in 5 minutes", "Easy breakfast for beginners"],
"language": "en",
"setup_template_unique": "Gh56Ij78Kl"
}),
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/concepts/Cx2Yz4Wv6Ut8/titles")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90", forHTTPHeaderField: "Idempotency-Key")
request.httpBody = """
{
"titles": ["Easy breakfast for beginners", "Meal prep in 5 minutes", "Easy breakfast for beginners"],
"language": "en",
"setup_template_unique": "Gh56Ij78Kl"
}
""".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/concepts/Cx2Yz4Wv6Ut8/titles"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Content-Type", "application/json")
.header("Idempotency-Key", "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"titles": ["Easy breakfast for beginners", "Meal prep in 5 minutes", "Easy breakfast for beginners"],
"language": "en",
"setup_template_unique": "Gh56Ij78Kl"
}
"""))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$body = <<<'JSON'
{
"titles": ["Easy breakfast for beginners", "Meal prep in 5 minutes", "Easy breakfast for beginners"],
"language": "en",
"setup_template_unique": "Gh56Ij78Kl"
}
JSON;
$ch = curl_init("https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/concepts/Cx2Yz4Wv6Ut8/titles");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type: application/json",
"Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"created": [
{ "title_unique": "q8Wm2LzR0pXa", "title_name": "Easy breakfast for beginners", "variation_unique": "Hn4kT7sY1cVb" },
{ "title_unique": "Zr5uP9eK3wQd", "title_name": "Meal prep in 5 minutes", "variation_unique": "Jm8oB2fN6xLe" }
],
"skipped": [
{ "title_name": "Easy breakfast for beginners", "reason": "duplicate" }
]
}
}
⛔ep_contents_destroy_title
⛔ep_contents_destroy_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
project_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_project_unique |
variation_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_variation_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
variation_unique |
string | ⛔f_deleted_variation_unique |
mode |
string | ⛔f_deleted_mode |
delete_at |
string | ⛔f_deleted_delete_at |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 403 | readonly |
⛔e_contents_destroy_readonly |
| 404 | not_found |
⛔e_contents_destroy_not_found |
| 409 | automation_running |
⛔e_automation_running |
| 409 | last_variation |
⛔e_last_variation |
| 422 | mode_not_supported |
⛔e_contents_destroy_mode_not_supported |
curl -X DELETE "https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/contents/Hn4kT7sY1cVb" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.request(
"DELETE",
"https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/contents/Hn4kT7sY1cVb",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/contents/Hn4kT7sY1cVb", {
method: "DELETE",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/contents/Hn4kT7sY1cVb")!)
request.httpMethod = "DELETE"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/contents/Hn4kT7sY1cVb"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects/Pq7Rs9Tu1V/contents/Hn4kT7sY1cVb");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"variation_unique": "Hn4kT7sY1cVb",
"mode": "blogmode",
"delete_at": "2026-10-24T12:00:00Z"
}
}
⛔group_write_automations_nav_label
⛔group_write_automations_lead
-
⛔ep_automations_store_title
POST /automations -
⛔ep_automations_update_title
PATCH /automations/{auto_unique} -
⛔ep_automations_stop_title
POST /automations/{auto_unique}/stop -
⛔ep_automations_confirm_title
POST /automations/{auto_unique}/confirm
⛔ep_automations_store_title
⛔ep_automations_store_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
variation_uniques |
⛔in_body | string[] | ⛔required_yes | — | ⛔p_auto_variation_uniques |
automation_template_unique |
⛔in_body | string | ⛔required_yes | — | ⛔p_auto_automation_template_unique |
reserved_at |
⛔in_body | string | ⛔required_no | — | ⛔p_auto_reserved_at |
Idempotency-Key |
⛔in_header | string | ⛔required_yes | — | ⛔p_idempotency_key_required |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].auto_unique |
string | ⛔f_auto_auto_unique |
data[].mode |
string | ⛔f_auto_mode |
data[].project |
object | ⛔f_auto_project |
data[].content.variation_unique |
string | ⛔f_content_variation_unique |
data[].content.title |
string | null | ⛔f_content_title |
data[].run_no |
integer | ⛔f_auto_run_no |
data[].status |
string | ⛔f_auto_status |
data[].execution_mode |
string | ⛔f_auto_execution_mode |
data[].phases |
object | ⛔f_auto_phases |
data[].template.setup_template_name |
string | null | ⛔f_auto_setup_template_name |
data[].template.automation_template_name |
string | null | ⛔f_auto_automation_template_name |
data[].reserved_at |
string | null | ⛔f_auto_reserved_at |
data[].executed_at |
string | null | ⛔f_auto_executed_at |
data[].completed_at |
string | null | ⛔f_auto_completed_at |
data[].created_at |
string | ⛔f_auto_created_at |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 404 | content_not_found |
⛔e_auto_content_not_found |
| 404 | automation_template_not_found |
⛔e_auto_template_not_found |
| 409 | contents_not_automatable |
⛔e_contents_not_automatable |
| 409 | idempotency_request_in_progress |
⛔e_idempotency_request_in_progress |
| 422 | validation_error |
⛔e_auto_store_invalid |
| 422 | mode_not_supported |
⛔e_auto_mode_not_supported |
| 422 | mixed_modes |
⛔e_auto_mixed_modes |
| 422 | mixed_projects |
⛔e_auto_mixed_projects |
| 422 | automation_template_mode_mismatch |
⛔e_auto_template_mode_mismatch |
| 422 | idempotency_key_required |
⛔e_idempotency_key_required |
| 422 | idempotency_key_invalid |
⛔e_idempotency_key_invalid |
| 422 | idempotency_key_reused |
⛔e_idempotency_key_reused |
| 503 | automation_dispatch_failed |
⛔e_auto_dispatch_failed_start |
curl -X POST "https://stepeee.com/public-api/v1/automations" \
-H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90" \
-d '{
"variation_uniques": ["Ab3dEf6hIj9k", "Lm2nOp5qRs8t"],
"automation_template_unique": "Tm7pL2xQ9z",
"reserved_at": "2030-01-02T12:04:05+09:00"
}'
import requests
body = """{
"variation_uniques": ["Ab3dEf6hIj9k", "Lm2nOp5qRs8t"],
"automation_template_unique": "Tm7pL2xQ9z",
"reserved_at": "2030-01-02T12:04:05+09:00"
}"""
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/automations",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
data=body,
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/automations", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
body: JSON.stringify({
"variation_uniques": ["Ab3dEf6hIj9k", "Lm2nOp5qRs8t"],
"automation_template_unique": "Tm7pL2xQ9z",
"reserved_at": "2030-01-02T12:04:05+09:00"
}),
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/automations")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90", forHTTPHeaderField: "Idempotency-Key")
request.httpBody = """
{
"variation_uniques": ["Ab3dEf6hIj9k", "Lm2nOp5qRs8t"],
"automation_template_unique": "Tm7pL2xQ9z",
"reserved_at": "2030-01-02T12:04:05+09:00"
}
""".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/automations"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Content-Type", "application/json")
.header("Idempotency-Key", "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"variation_uniques": ["Ab3dEf6hIj9k", "Lm2nOp5qRs8t"],
"automation_template_unique": "Tm7pL2xQ9z",
"reserved_at": "2030-01-02T12:04:05+09:00"
}
"""))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$body = <<<'JSON'
{
"variation_uniques": ["Ab3dEf6hIj9k", "Lm2nOp5qRs8t"],
"automation_template_unique": "Tm7pL2xQ9z",
"reserved_at": "2030-01-02T12:04:05+09:00"
}
JSON;
$ch = curl_init("https://stepeee.com/public-api/v1/automations");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type: application/json",
"Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"auto_unique": "Qw3eRt6yUi",
"mode": "blogmode",
"project": { "project_unique": "Pj8kL3mN2b", "project_name": "My Project" },
"content": { "variation_unique": "Ab3dEf6hIj9k", "title": "My blog title" },
"run_no": 1,
"status": "pending",
"execution_mode": "sequential",
"phases": { "setup": "running", "step1": "not_started", "step2": "not_started", "step3": "not_started" },
"template": { "setup_template_name": null, "automation_template_name": "Morning blog" },
"reserved_at": "2030-01-02T03:04:05Z",
"executed_at": null,
"completed_at": null,
"created_at": "2026-10-21T10:00:00Z"
},
{
"auto_unique": "As4dFg7hJk",
"mode": "blogmode",
"project": { "project_unique": "Pj8kL3mN2b", "project_name": "My Project" },
"content": { "variation_unique": "Lm2nOp5qRs8t", "title": "My blog title" },
"run_no": 1,
"status": "pending",
"execution_mode": "sequential",
"phases": { "setup": "running", "step1": "not_started", "step2": "not_started", "step3": "not_started" },
"template": { "setup_template_name": null, "automation_template_name": "Morning blog" },
"reserved_at": "2030-01-02T03:04:05Z",
"executed_at": null,
"completed_at": null,
"created_at": "2026-10-21T10:00:00Z"
}
]
}
⛔ep_automations_update_title
⛔ep_automations_update_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
auto_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_auto_unique |
reserved_at |
⛔in_body | string | ⛔required_yes | — | ⛔p_auto_reserved_at_new |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
auto_unique |
string | ⛔f_auto_auto_unique |
mode |
string | ⛔f_auto_mode |
project |
object | ⛔f_auto_project |
content.variation_unique |
string | ⛔f_content_variation_unique |
content.title |
string | null | ⛔f_content_title |
run_no |
integer | ⛔f_auto_run_no |
status |
string | ⛔f_auto_status |
execution_mode |
string | ⛔f_auto_execution_mode |
phases |
object | ⛔f_auto_phases |
template.setup_template_name |
string | null | ⛔f_auto_setup_template_name |
template.automation_template_name |
string | null | ⛔f_auto_automation_template_name |
reserved_at |
string | null | ⛔f_auto_reserved_at |
executed_at |
string | null | ⛔f_auto_executed_at |
completed_at |
string | null | ⛔f_auto_completed_at |
created_at |
string | ⛔f_auto_created_at |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 404 | not_found |
⛔e_automation_not_found |
| 409 | automation_not_pending |
⛔e_automation_not_pending |
| 422 | validation_error |
⛔e_auto_reserved_at_invalid |
curl -X PATCH "https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi" \
-H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"reserved_at": "2031-05-06T07:08:09+09:00"
}'
import requests
body = """{
"reserved_at": "2031-05-06T07:08:09+09:00"
}"""
response = requests.request(
"PATCH",
"https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
},
data=body,
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi", {
method: "PATCH",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
"reserved_at": "2031-05-06T07:08:09+09:00"
}),
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi")!)
request.httpMethod = "PATCH"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{
"reserved_at": "2031-05-06T07:08:09+09:00"
}
""".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString("""
{
"reserved_at": "2031-05-06T07:08:09+09:00"
}
"""))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$body = <<<'JSON'
{
"reserved_at": "2031-05-06T07:08:09+09:00"
}
JSON;
$ch = curl_init("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"auto_unique": "Qw3eRt6yUi",
"mode": "blogmode",
"project": { "project_unique": "Pj8kL3mN2b", "project_name": "My Project" },
"content": { "variation_unique": "Ab3dEf6hIj9k", "title": "My blog title" },
"run_no": 1,
"status": "pending",
"execution_mode": "sequential",
"phases": { "setup": "running", "step1": "not_started", "step2": "not_started", "step3": "not_started" },
"template": { "setup_template_name": null, "automation_template_name": "Morning blog" },
"reserved_at": "2031-05-05T22:08:09Z",
"executed_at": null,
"completed_at": null,
"created_at": "2026-10-21T10:00:00Z"
}
}
⛔ep_automations_stop_title
⛔ep_automations_stop_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
auto_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_auto_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
auto_unique |
string | ⛔f_auto_auto_unique |
mode |
string | ⛔f_auto_mode |
project |
object | ⛔f_auto_project |
content.variation_unique |
string | ⛔f_content_variation_unique |
content.title |
string | null | ⛔f_content_title |
run_no |
integer | ⛔f_auto_run_no |
status |
string | ⛔f_auto_status |
execution_mode |
string | ⛔f_auto_execution_mode |
phases |
object | ⛔f_auto_phases |
template.setup_template_name |
string | null | ⛔f_auto_setup_template_name |
template.automation_template_name |
string | null | ⛔f_auto_automation_template_name |
reserved_at |
string | null | ⛔f_auto_reserved_at |
executed_at |
string | null | ⛔f_auto_executed_at |
completed_at |
string | null | ⛔f_auto_completed_at |
created_at |
string | ⛔f_auto_created_at |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_automation_not_found |
curl -X POST "https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/stop" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/stop",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/stop", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/stop")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/stop"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/stop");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"auto_unique": "Qw3eRt6yUi",
"mode": "blogmode",
"project": { "project_unique": "Pj8kL3mN2b", "project_name": "My Project" },
"content": { "variation_unique": "Ab3dEf6hIj9k", "title": "My blog title" },
"run_no": 1,
"status": "stopped",
"execution_mode": "sequential",
"phases": { "setup": "running", "step1": "not_started", "step2": "not_started", "step3": "not_started" },
"template": { "setup_template_name": null, "automation_template_name": "Morning blog" },
"reserved_at": "2030-01-02T03:04:05Z",
"executed_at": null,
"completed_at": "2026-10-21T10:05:00Z",
"created_at": "2026-10-21T10:00:00Z"
}
}
⛔ep_automations_confirm_title
⛔ep_automations_confirm_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
auto_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_auto_unique |
Idempotency-Key |
⛔in_header | string | ⛔required_no | — | ⛔p_idempotency_key_optional |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
auto_unique |
string | ⛔f_auto_auto_unique |
mode |
string | ⛔f_auto_mode |
project |
object | ⛔f_auto_project |
content.variation_unique |
string | ⛔f_content_variation_unique |
content.title |
string | null | ⛔f_content_title |
run_no |
integer | ⛔f_auto_run_no |
status |
string | ⛔f_auto_status |
execution_mode |
string | ⛔f_auto_execution_mode |
phases |
object | ⛔f_auto_phases |
template.setup_template_name |
string | null | ⛔f_auto_setup_template_name |
template.automation_template_name |
string | null | ⛔f_auto_automation_template_name |
reserved_at |
string | null | ⛔f_auto_reserved_at |
executed_at |
string | null | ⛔f_auto_executed_at |
completed_at |
string | null | ⛔f_auto_completed_at |
created_at |
string | ⛔f_auto_created_at |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 404 | not_found |
⛔e_automation_not_found |
| 409 | automation_not_waiting_confirmation |
⛔e_automation_not_waiting_confirmation |
| 409 | content_readonly |
⛔e_auto_content_readonly |
| 409 | idempotency_request_in_progress |
⛔e_idempotency_request_in_progress |
| 422 | idempotency_key_invalid |
⛔e_idempotency_key_invalid |
| 422 | idempotency_key_reused |
⛔e_idempotency_key_reused |
| 503 | automation_dispatch_failed |
⛔e_auto_dispatch_failed_confirm |
curl -X POST "https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/confirm" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \ -H "Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90"
import requests
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/confirm",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/confirm", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/confirm")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90", forHTTPHeaderField: "Idempotency-Key")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/confirm"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Idempotency-Key", "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/automations/Qw3eRt6yUi/confirm");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"auto_unique": "Qw3eRt6yUi",
"mode": "carouselmode",
"project": { "project_unique": "Pj8kL3mN2b", "project_name": "My Project" },
"content": { "variation_unique": "Ab3dEf6hIj9k", "title": "My carousel title" },
"run_no": 1,
"status": "pending",
"execution_mode": "parallel",
"phases": { "setup": "done", "step1": "done", "step2": "done", "step3": "running" },
"template": { "setup_template_name": null, "automation_template_name": "Weekly carousel" },
"reserved_at": null,
"executed_at": "2026-10-21T09:00:00Z",
"completed_at": null,
"created_at": "2026-10-21T09:00:00Z"
}
}
⛔group_write_posts_nav_label
⛔group_write_posts_lead
-
⛔ep_post_confirms_list_title
GET /post-confirms -
⛔ep_post_schedules_approve_title
POST /post-schedules/{schedule_unique}/approve -
⛔ep_post_schedules_post_now_title
POST /post-schedules/{schedule_unique}/post-now -
⛔ep_post_schedules_update_title
PATCH /post-schedules/{schedule_unique} -
⛔ep_post_schedules_destroy_title
DELETE /post-schedules/{schedule_unique}
⛔ep_post_confirms_list_title
⛔ep_post_confirms_list_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
state |
⛔in_query | string | ⛔required_no | — | ⛔p_pc_state |
project_unique |
⛔in_query | string | ⛔required_no | — | ⛔p_pc_project_unique |
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].schedule_unique |
string | ⛔f_pc_schedule_unique |
data[].state |
string | null | ⛔f_pc_state |
data[].confirm_state |
string | ⛔f_pc_confirm_state |
data[].confirm_mode |
string | ⛔f_pc_confirm_mode |
data[].can_approve |
boolean | ⛔f_pc_can_approve |
data[].can_post_now |
boolean | ⛔f_pc_can_post_now |
data[].can_reschedule |
boolean | ⛔f_pc_can_reschedule |
data[].scheduled_at |
string | ⛔f_sch_scheduled_at |
data[].scheduled_at_local |
string | ⛔f_sch_scheduled_at_local |
data[].timezone |
string | ⛔f_sch_timezone |
data[].deadline_at |
string | null | ⛔f_pc_deadline_at |
data[].project |
object | ⛔f_auto_project |
data[].concept |
object | ⛔f_pc_concept |
data[].variation_unique |
string | ⛔f_content_variation_unique |
data[].post_unique |
string | ⛔f_pc_post_unique |
data[].post_type |
string | ⛔f_sch_post_type |
data[].text |
string | ⛔f_pc_text |
data[].thread[] |
object | ⛔f_pc_thread |
data[].image |
object | null | ⛔f_pc_image |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_project_not_found |
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/post-confirms?state=upcoming" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/post-confirms?state=upcoming",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/post-confirms?state=upcoming", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/post-confirms?state=upcoming")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/post-confirms?state=upcoming"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/post-confirms?state=upcoming");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"schedule_unique": "aB3dE5fG7hJ9",
"state": "upcoming",
"confirm_state": "awaiting",
"confirm_mode": "required",
"can_approve": true,
"can_post_now": false,
"can_reschedule": false,
"scheduled_at": "2026-10-19T13:00:00Z",
"scheduled_at_local": "2026-10-19T22:00:00",
"timezone": "Asia/Tokyo",
"deadline_at": "2026-10-19T13:00:00Z",
"project": { "project_unique": "Pq7Rs9Tu1V", "project_name": "My brand" },
"concept": { "concept_unique": "Cx2Yz4Wv6Ut8", "concept_name": "Morning tips" },
"variation_unique": "Vr5Ws7Xt9Yu1",
"post_unique": "Ps3Qt5Ru7Sv9",
"post_type": "knowhow",
"text": "First post of the thread",
"thread": [
{ "text": "Second post", "image": null },
{ "text": "Third post", "image": { "url": "https://...", "expires_at": "2026-10-19T13:00:00Z" } }
],
"image": null
}
],
"meta": { "total": 1, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_post_schedules_approve_title
⛔ep_post_schedules_approve_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
schedule_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_schedule_unique |
Idempotency-Key |
⛔in_header | string | ⛔required_no | — | ⛔p_idempotency_key_optional |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
schedule_unique / state / … / image |
— | ⛔f_pc_same_as_list |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 404 | post_schedule_not_found |
⛔e_post_schedule_not_found |
| 409 | confirm_expired |
⛔e_confirm_expired |
| 409 | confirm_not_pending |
⛔e_confirm_not_pending |
| 409 | idempotency_request_in_progress |
⛔e_idempotency_request_in_progress |
| 422 | idempotency_key_invalid |
⛔e_idempotency_key_invalid |
| 422 | idempotency_key_reused |
⛔e_idempotency_key_reused |
curl -X POST "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/approve" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \ -H "Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90"
import requests
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/approve",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/approve", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/approve")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90", forHTTPHeaderField: "Idempotency-Key")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/approve"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Idempotency-Key", "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/approve");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"schedule_unique": "aB3dE5fG7hJ9",
"state": null,
"confirm_state": "confirmed",
"confirm_mode": "required",
"can_approve": false,
"can_post_now": false,
"can_reschedule": false,
"scheduled_at": "2026-10-19T13:00:00Z",
"scheduled_at_local": "2026-10-19T22:00:00",
"timezone": "Asia/Tokyo",
"deadline_at": null,
"project": { "project_unique": "Pq7Rs9Tu1V", "project_name": "My brand" },
"concept": { "concept_unique": "Cx2Yz4Wv6Ut8", "concept_name": "Morning tips" },
"variation_unique": "Vr5Ws7Xt9Yu1",
"post_unique": "Ps3Qt5Ru7Sv9",
"post_type": "knowhow",
"text": "First post of the thread",
"thread": [
{ "text": "Second post", "image": null },
{ "text": "Third post", "image": { "url": "https://...", "expires_at": "2026-10-19T13:00:00Z" } }
],
"image": null
}
}
⛔ep_post_schedules_post_now_title
⛔ep_post_schedules_post_now_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
schedule_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_schedule_unique |
allow_close_slot |
⛔in_body | boolean | ⛔required_no | false |
⛔p_allow_close_slot |
Idempotency-Key |
⛔in_header | string | ⛔required_no | — | ⛔p_idempotency_key_optional |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
schedule_unique / state / … / image |
— | ⛔f_pc_same_as_list |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 403 | resource_readonly |
⛔e_resource_readonly |
| 404 | post_schedule_not_found |
⛔e_post_schedule_not_found |
| 409 | confirm_not_expired |
⛔e_confirm_not_expired |
| 409 | schedule_close_to_other_slot |
⛔e_schedule_close_to_other_slot |
| 409 | schedule_locked |
⛔e_schedule_locked |
| 409 | schedule_processing |
⛔e_schedule_processing |
| 409 | idempotency_request_in_progress |
⛔e_idempotency_request_in_progress |
| 422 | validation_error |
⛔e_allow_close_slot_invalid |
| 422 | idempotency_key_invalid |
⛔e_idempotency_key_invalid |
| 422 | idempotency_key_reused |
⛔e_idempotency_key_reused |
curl -X POST "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/post-now" \
-H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90" \
-d '{
"allow_close_slot": true
}'
import requests
body = """{
"allow_close_slot": true
}"""
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/post-now",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
data=body,
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/post-now", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
body: JSON.stringify({
"allow_close_slot": true
}),
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/post-now")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90", forHTTPHeaderField: "Idempotency-Key")
request.httpBody = """
{
"allow_close_slot": true
}
""".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/post-now"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Content-Type", "application/json")
.header("Idempotency-Key", "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"allow_close_slot": true
}
"""))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$body = <<<'JSON'
{
"allow_close_slot": true
}
JSON;
$ch = curl_init("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9/post-now");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type: application/json",
"Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"schedule_unique": "aB3dE5fG7hJ9",
"state": null,
"confirm_state": "confirmed",
"confirm_mode": "required",
"can_approve": false,
"can_post_now": false,
"can_reschedule": false,
"scheduled_at": "2026-10-21T12:01:00Z",
"scheduled_at_local": "2026-10-21T21:01:00",
"timezone": "Asia/Tokyo",
"deadline_at": null,
"project": { "project_unique": "Pq7Rs9Tu1V", "project_name": "My brand" },
"concept": { "concept_unique": "Cx2Yz4Wv6Ut8", "concept_name": "Morning tips" },
"variation_unique": "Vr5Ws7Xt9Yu1",
"post_unique": "Ps3Qt5Ru7Sv9",
"post_type": "knowhow",
"text": "First post of the thread",
"thread": [
{ "text": "Second post", "image": null },
{ "text": "Third post", "image": { "url": "https://...", "expires_at": "2026-10-19T13:00:00Z" } }
],
"image": null
}
}
⛔ep_post_schedules_update_title
⛔ep_post_schedules_update_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
schedule_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_schedule_unique |
scheduled_at |
⛔in_body | string | ⛔required_yes | — | ⛔p_pc_scheduled_at |
allow_close_slot |
⛔in_body | boolean | ⛔required_no | false |
⛔p_allow_close_slot |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
schedule_unique / state / … / image |
— | ⛔f_pc_same_as_list |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 403 | resource_readonly |
⛔e_resource_readonly |
| 404 | post_schedule_not_found |
⛔e_post_schedule_not_found |
| 409 | confirm_not_expired |
⛔e_confirm_not_expired |
| 409 | schedule_close_to_other_slot |
⛔e_schedule_close_to_other_slot |
| 409 | schedule_locked |
⛔e_schedule_locked |
| 409 | schedule_processing |
⛔e_schedule_processing |
| 422 | confirm_reschedule_past |
⛔e_confirm_reschedule_past |
| 422 | validation_error |
⛔e_pc_update_invalid |
curl -X PATCH "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9" \
-H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"scheduled_at": "2026-10-22T09:30:00-05:00",
"allow_close_slot": false
}'
import requests
body = """{
"scheduled_at": "2026-10-22T09:30:00-05:00",
"allow_close_slot": false
}"""
response = requests.request(
"PATCH",
"https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
},
data=body,
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9", {
method: "PATCH",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
"scheduled_at": "2026-10-22T09:30:00-05:00",
"allow_close_slot": false
}),
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9")!)
request.httpMethod = "PATCH"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{
"scheduled_at": "2026-10-22T09:30:00-05:00",
"allow_close_slot": false
}
""".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString("""
{
"scheduled_at": "2026-10-22T09:30:00-05:00",
"allow_close_slot": false
}
"""))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$body = <<<'JSON'
{
"scheduled_at": "2026-10-22T09:30:00-05:00",
"allow_close_slot": false
}
JSON;
$ch = curl_init("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"schedule_unique": "aB3dE5fG7hJ9",
"state": null,
"confirm_state": "confirmed",
"confirm_mode": "required",
"can_approve": false,
"can_post_now": false,
"can_reschedule": false,
"scheduled_at": "2026-10-22T14:30:00Z",
"scheduled_at_local": "2026-10-22T23:30:00",
"timezone": "Asia/Tokyo",
"deadline_at": null,
"project": { "project_unique": "Pq7Rs9Tu1V", "project_name": "My brand" },
"concept": { "concept_unique": "Cx2Yz4Wv6Ut8", "concept_name": "Morning tips" },
"variation_unique": "Vr5Ws7Xt9Yu1",
"post_unique": "Ps3Qt5Ru7Sv9",
"post_type": "knowhow",
"text": "First post of the thread",
"thread": [
{ "text": "Second post", "image": null },
{ "text": "Third post", "image": { "url": "https://...", "expires_at": "2026-10-19T13:00:00Z" } }
],
"image": null
}
}
⛔ep_post_schedules_destroy_title
⛔ep_post_schedules_destroy_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
schedule_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_schedule_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
schedule_unique |
string | ⛔f_pc_deleted_schedule_unique |
deleted |
boolean | ⛔f_deleted_flag |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 403 | resource_readonly |
⛔e_resource_readonly |
| 404 | post_schedule_not_found |
⛔e_post_schedule_not_found |
| 409 | post_posting_locked |
⛔e_post_posting_locked |
curl -X DELETE "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.request(
"DELETE",
"https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9", {
method: "DELETE",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9")!)
request.httpMethod = "DELETE"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/post-schedules/aB3dE5fG7hJ9");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"schedule_unique": "aB3dE5fG7hJ9",
"deleted": true
}
}
⛔group_write_webhooks_nav_label
⛔group_write_webhooks_lead
-
⛔ep_webhooks_list_title
GET /webhooks -
⛔ep_webhooks_store_title
POST /webhooks -
⛔ep_webhooks_destroy_title
DELETE /webhooks/{webhook_unique} -
⛔ep_webhooks_test_title
POST /webhooks/{webhook_unique}/test
⛔ep_webhooks_list_title
⛔ep_webhooks_list_desc
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].webhook_unique |
string | ⛔f_wh_webhook_unique |
data[].url |
string | ⛔f_wh_url |
data[].events |
string[] | ⛔f_wh_events |
data[].description |
string | null | ⛔f_wh_description |
data[].is_active |
boolean | ⛔f_wh_is_active |
data[].last_delivery_at |
string | null | ⛔f_wh_last_delivery_at |
data[].last_delivery_status |
string | null | ⛔f_wh_last_delivery_status |
data[].last_response_status |
integer | null | ⛔f_wh_last_response_status |
data[].last_error |
string | null | ⛔f_wh_last_error |
data[].created_at |
string | ⛔f_created_at |
curl "https://stepeee.com/public-api/v1/webhooks" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/webhooks",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/webhooks", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/webhooks")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/webhooks"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/webhooks");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"webhook_unique": "Xk3pQ9vLm2Ta",
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook",
"is_active": true,
"last_delivery_at": "2026-10-21T12:01:00Z",
"last_delivery_status": "failed",
"last_response_status": 503,
"last_error": "non_2xx_response",
"created_at": "2026-10-20T09:00:00Z"
}
]
}
⛔ep_webhooks_store_title
⛔ep_webhooks_store_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
url |
⛔in_body | string | ⛔required_yes | — | ⛔p_wh_url |
events |
⛔in_body | string[] | ⛔required_yes | — | ⛔p_wh_events |
description |
⛔in_body | string | null | ⛔required_no | — | ⛔p_wh_description |
Idempotency-Key |
⛔in_header | string | ⛔required_no | — | ⛔p_idempotency_key_optional |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
webhook_unique |
string | ⛔f_wh_webhook_unique |
url |
string | ⛔f_wh_url |
events |
string[] | ⛔f_wh_events |
description |
string | null | ⛔f_wh_description |
is_active |
boolean | ⛔f_wh_is_active |
last_delivery_at |
string | null | ⛔f_wh_last_delivery_at |
last_delivery_status |
string | null | ⛔f_wh_last_delivery_status |
last_response_status |
integer | null | ⛔f_wh_last_response_status |
last_error |
string | null | ⛔f_wh_last_error |
created_at |
string | ⛔f_created_at |
secret |
string | ⛔f_wh_secret |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 409 | webhook_limit_reached |
⛔e_webhook_limit_reached |
| 409 | idempotency_request_in_progress |
⛔e_idempotency_request_in_progress |
| 422 | validation_error |
⛔e_webhook_invalid |
| 422 | idempotency_key_invalid |
⛔e_idempotency_key_invalid |
| 422 | idempotency_key_reused |
⛔e_idempotency_key_reused |
curl -X POST "https://stepeee.com/public-api/v1/webhooks" \
-H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90" \
-d '{
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook"
}'
import requests
body = """{
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook"
}"""
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/webhooks",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
data=body,
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/webhooks", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type": "application/json",
"Idempotency-Key": "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
},
body: JSON.stringify({
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook"
}),
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/webhooks")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90", forHTTPHeaderField: "Idempotency-Key")
request.httpBody = """
{
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook"
}
""".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/webhooks"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.header("Content-Type", "application/json")
.header("Idempotency-Key", "5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook"
}
"""))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$body = <<<'JSON'
{
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook"
}
JSON;
$ch = curl_init("https://stepeee.com/public-api/v1/webhooks");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
"Content-Type: application/json",
"Idempotency-Key: 5f0c2d8e-7a41-4c1b-9d3e-2b8f6a1c4e90",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"webhook_unique": "Xk3pQ9vLm2Ta",
"url": "https://example.com/hooks/stepeee",
"events": ["automation.completed", "post.published"],
"description": "production hook",
"is_active": true,
"last_delivery_at": null,
"last_delivery_status": null,
"last_response_status": null,
"last_error": null,
"created_at": "2026-10-21T12:00:00Z",
"secret": "whsec_5f0c2a9e8b7d4c3a1f6e9d8c7b6a5f4e3d2c1b0a9f8e7d6c"
}
}
⛔ep_webhooks_destroy_title
⛔ep_webhooks_destroy_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
webhook_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_webhook_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
webhook_unique |
string | ⛔f_wh_deleted_webhook_unique |
deleted |
boolean | ⛔f_deleted_flag |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 404 | not_found |
⛔e_webhook_not_found |
curl -X DELETE "https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.request(
"DELETE",
"https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta", {
method: "DELETE",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta")!)
request.httpMethod = "DELETE"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"webhook_unique": "Xk3pQ9vLm2Ta",
"deleted": true
}
}
⛔ep_webhooks_test_title
⛔ep_webhooks_test_desc
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
webhook_unique |
⛔in_path | string | ⛔required_yes | — | ⛔p_webhook_unique |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
delivered |
boolean | ⛔f_wh_test_delivered |
response_status |
integer | null | ⛔f_wh_test_response_status |
error |
string | null | ⛔f_wh_test_error |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 403 | plan_required |
⛔e_plan_required |
| 403 | team_plan_lost |
⛔e_team_plan_lost |
| 404 | not_found |
⛔e_webhook_not_found |
curl -X POST "https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta/test" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.request(
"POST",
"https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta/test",
headers={
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta/test", {
method: "POST",
headers: {
"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx",
},
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta/test")!)
request.httpMethod = "POST"
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta/test"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/webhooks/Xk3pQ9vLm2Ta/test");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": {
"delivered": false,
"response_status": 500,
"error": "non_2xx_response"
}
}
⛔webhook_events_heading
⛔webhook_events_lead
| ⛔webhook_th_event | Significato |
|---|---|
automation.waiting_confirmation | ⛔webhook_event_automation_waiting_confirmation |
automation.completed | ⛔webhook_event_automation_completed |
automation.failed | ⛔webhook_event_automation_failed |
post.published | ⛔webhook_event_post_published |
post.failed | ⛔webhook_event_post_failed |
post.confirm_required | ⛔webhook_event_post_confirm_required |
webhook.test | ⛔webhook_event_webhook_test |
⛔webhook_payload_heading
⛔webhook_payload_desc
| ⛔webhook_th_event | ⛔webhook_th_data |
|---|---|
automation.* | ⛔webhook_data_automation |
post.publishedpost.failed | ⛔webhook_data_post |
post.confirm_required | ⛔webhook_data_post_confirm_required |
webhook.test | {"webhook_unique": "…"} |
⛔webhook_payload_example_heading
automation.failed{
"id": "evt_Q2x8Lr0aZk9MvB3pT7cYw1Nd",
"type": "automation.failed",
"created_at": "2026-10-21T12:01:03Z",
"data": {
"auto_unique": "a8Kd02LmQz",
"mode": "blogmode",
"project": { "project_unique": "Pj7Xc2Lq9W", "project_name": "My Project" },
"content": { "variation_unique": "Vb3Nq8Ls1Kd0", "title": "How to start" },
"run_no": 2,
"status": "token_shortage",
"execution_mode": "sequential",
"phases": { "setup": "done", "step1": "done", "step2": "running", "step3": "not_started" },
"template": { "setup_template_name": "Default", "automation_template_name": null },
"reserved_at": null,
"executed_at": "2026-10-21T11:40:00Z",
"completed_at": "2026-10-21T12:00:41Z",
"created_at": "2026-10-21T11:39:58Z"
}
}
post.published{
"id": "evt_7hT2mWq9Zp3LxR8cVb1Nk5Ds",
"type": "post.published",
"created_at": "2026-10-21T12:02:10Z",
"data": {
"publication_unique": "Lg4Hs9Pq2Wx7",
"mode": "moviemode",
"project": { "project_unique": "Pj7Xc2Lq9W", "project_name": "My Project" },
"content": { "variation_unique": "Mv8Kq2Zt5Rb1", "title": "5 tips" },
"platform": "youtube",
"account": { "account_unique": "Ac1Bd2Ef3Gh4", "name": "My Channel" },
"status": "success",
"post_url": "https://www.youtube.com/watch?v=xxxxxxxx",
"error_code": null,
"is_automation": true,
"posted_at": "2026-10-21T12:01:55Z",
"created_at": "2026-10-21T12:01:20Z"
}
}
post.failed{
"id": "evt_9Zq1Lm4Xc7Vb2Nk8Ds3Pt6Wr",
"type": "post.failed",
"created_at": "2026-10-21T09:00:40Z",
"data": {
"publication_unique": "Pp5Kd8Lw2Qz9",
"mode": "postmode",
"project": { "project_unique": "Pj7Xc2Lq9W", "project_name": "My Project" },
"content": { "variation_unique": "Pv4Lk9Qz2Wx6", "title": "My X concept" },
"platform": "x",
"account": null,
"status": "failed",
"post_url": null,
"error_code": "token_expired",
"is_automation": true,
"posted_at": null,
"created_at": "2026-10-20T21:00:12Z",
"schedule_unique": "Sc6Hj1Kl8Mn3"
}
}
post.confirm_required{
"id": "evt_3Kd8Lq2Wz7Xc1Vb9Nm4Pt6Rs",
"type": "post.confirm_required",
"created_at": "2026-10-19T08:15:02Z",
"data": {
"schedule_unique": "aB3dE5fG7hJ9",
"state": "upcoming",
"confirm_state": "awaiting",
"confirm_mode": "required",
"can_approve": true,
"can_post_now": false,
"can_reschedule": false,
"scheduled_at": "2026-10-19T13:00:00Z",
"scheduled_at_local": "2026-10-19T22:00:00",
"timezone": "Asia/Tokyo",
"deadline_at": "2026-10-19T13:00:00Z",
"project": { "project_unique": "Pq7Rs9Tu1V", "project_name": "My brand" },
"concept": { "concept_unique": "Cx2Yz4Wv6Ut8", "concept_name": "Morning tips" },
"variation_unique": "Vr5Ws7Xt9Yu1",
"post_unique": "Ps3Qt5Ru7Sv9",
"post_type": "knowhow",
"text": "First post of the thread",
"thread": [
{ "text": "Second post", "image": null }
],
"image": { "url": "https://...", "expires_at": "2026-10-19T09:15:02Z" }
}
}
webhook.test{
"id": "evt_Q2x8Lr0aZk9MvB3pT7cYw1Nd",
"type": "webhook.test",
"created_at": "2026-10-21T12:00:00Z",
"data": { "webhook_unique": "Xk3pQ9vLm2Ta" }
}
⛔webhook_headers_heading
| ⛔webhook_th_header | ⛔th_desc |
|---|---|
Content-Type: application/json | ⛔webhook_header_content_type |
Stepeee-Signature: t=1792584000,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd | ⛔webhook_header_signature |
Stepeee-Event-Id: evt_Q2x8Lr0aZk9MvB3pT7cYw1Nd | ⛔webhook_header_event_id |
Stepeee-Event-Type: automation.failed | ⛔webhook_header_event_type |
User-Agent: Stepeee-Webhooks/1.0 | ⛔webhook_header_user_agent |
⛔webhook_verify_heading
⛔webhook_verify_lead
- ⛔webhook_verify_step1
- ⛔webhook_verify_step2
- ⛔webhook_verify_step3
- ⛔webhook_verify_step4
- ⛔webhook_verify_step5
- ⛔webhook_verify_step6
⛔webhook_verify_code_heading
import hmac, hashlib, time
def verify(body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
t, v1 = parts.get("t"), parts.get("v1")
if not t or not v1 or abs(time.time() - int(t)) > tolerance:
return False
expected = hmac.new(secret.encode(), f"{t}.".encode() + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, v1)
# Flask: verify(request.get_data(), request.headers["Stepeee-Signature"], SECRET)
const crypto = require("crypto");
function verify(rawBody, header, secret, toleranceSec = 300) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
const t = parts.t, v1 = parts.v1;
if (!t || !v1 || Math.abs(Date.now() / 1000 - Number(t)) > toleranceSec) return false;
const expected = crypto.createHmac("sha256", secret).update(`${t}.`).update(rawBody).digest("hex");
return v1.length === expected.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
// Express: receive the body as raw bytes with express.raw()
app.post("/hooks/stepeee", express.raw({ type: "application/json" }), (req, res) => {
if (!verify(req.body, req.get("Stepeee-Signature"), process.env.STEPEEE_WEBHOOK_SECRET)) return res.sendStatus(400);
const event = JSON.parse(req.body.toString("utf8"));
res.sendStatus(200);
});
function verifyStepeeeSignature(string $body, string $header, string $secret, int $tolerance = 300): bool
{
$parts = [];
foreach (explode(',', $header) as $part) {
[$k, $v] = array_pad(explode('=', $part, 2), 2, '');
$parts[$k] = $v;
}
if (! isset($parts['t'], $parts['v1']) || abs(time() - (int) $parts['t']) > $tolerance) {
return false;
}
$expected = hash_hmac('sha256', $parts['t'].'.'.$body, $secret);
return hash_equals($expected, $parts['v1']);
}
$ok = verifyStepeeeSignature(file_get_contents('php://input'), $_SERVER['HTTP_STEPEEE_SIGNATURE'] ?? '', $secret);
# BODY: raw request body, T: t from Stepeee-Signature, SECRET: whsec_...
printf '%s.%s' "$T" "$BODY" | openssl dgst -sha256 -hmac "$SECRET" -hex | awk '{print $NF}'
# The signature is valid if the output equals v1
⛔webhook_retry_heading
⛔webhook_retry_desc
⛔webhook_duplicate_desc
⛔webhook_destination_heading
⛔webhook_destination_desc