API
READ
WRITE
Paraan ng Pagkonekta
I-check ang Iyong API Key
Makikita mo ito sa menu sa kanang itaas > Settings > Account > API Keys.
Idagdag sa Request Header
Idagdag ang inisyung API key sa Authorization header gamit ang format na Bearer.
Magpadala ng Request sa Base URL
Magpadala ng request sa base URL sa ibaba, na sinusundan ng path ng endpoint.
⛔auth_key_note
Base URL
https://stepeee.com/public-api/v1
Halimbawang Request
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;
Format ng Response at mga Error
Ang lahat ng response ay ibinabalik sa sumusunod na envelope format.
Kapag Matagumpay
{ "data": ... }
Kapag May Error
{ "error": { "code": "...", "message": "...", "details": { ... } } }
Mga Status Code
| Status | Kahulugan |
|---|---|
| 401 | Hindi wasto o nag-expire na ang API key |
| 403 | ⛔status_403_desc |
| 404 | Wala ang resource (kasama na ang mga kaso kung saan wala kang access permission) |
| 405 | ⛔status_405_desc |
| 409 | ⛔status_409_desc |
| 422 | Hindi wasto ang mga parameter |
| 429 | Nalagpasan ang rate limit |
| 500 | Nagkaroon ng hindi inaasahang error |
| 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 | Kahulugan |
|---|---|
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" }
}
}
Project
⛔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
Kinukuha ang listahan ng mga project na maa-access ng may-ari ng API key.
| ⛔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
Kinukuha ang detalye ng isang project.
| ⛔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"
}
}
}
Content
⛔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
Kinukuha ang pinagsamang listahan ng content na ginawa sa loob ng project (post, blog, image, at 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
Kinukuha ang detalye ng isang content. Kasama rito ang nabuong laman/asset at ang status ng paglathala (resulta ng pag-post sa SNS/WordPress, atbp.). Nag-iiba ang anyo ng "content" depende sa mode.
| ⛔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 | Kahulugan |
|---|---|
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