API
READ
WRITE
Pengesahan
Semak kunci API anda
Anda boleh menyemaknya melalui menu di penjuru kanan atas > Tetapan > Akaun > Kunci API.
Tambah pada pengepala permintaan
Tambah kunci API yang dikeluarkan ke dalam pengepala Authorization dalam format Bearer.
Hantar permintaan ke URL asas
Hantar permintaan ke URL asas di bawah, diikuti dengan laluan titik akhir.
⛔auth_key_note
URL Asas
https://stepeee.com/public-api/v1
Contoh Permintaan
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 Respons & Ralat
Semua respons dikembalikan dalam format sampul berikut.
Apabila Berjaya
{ "data": ... }
Apabila Ralat
{ "error": { "code": "...", "message": "...", "details": { ... } } }
Kod Status
| Status | Maksud |
|---|---|
| 401 | Kunci API tidak sah atau telah tamat tempoh |
| 403 | ⛔status_403_desc |
| 404 | Sumber tidak wujud (termasuk kes tiada kebenaran akses) |
| 405 | ⛔status_405_desc |
| 409 | ⛔status_409_desc |
| 422 | Parameter tidak sah |
| 429 | Had kadar telah melebihi |
| 500 | Ralat yang tidak dijangka berlaku |
| 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 | Maksud |
|---|---|
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" }
}
}
Projek
⛔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
Mendapatkan senarai projek yang boleh diakses oleh pemilik kunci API.
| ⛔th_name | ⛔th_in | ⛔th_type | ⛔th_required | ⛔th_default | ⛔th_desc |
|---|---|---|---|---|---|
page |
⛔in_query | integer | ⛔required_no | 1 |
⛔p_page |
per_page |
⛔in_query | integer | ⛔required_no | 20 |
⛔p_per_page |
| ⛔th_field | ⛔th_type | ⛔th_desc |
|---|---|---|
data[].project_unique |
string | ⛔f_proj_project_unique |
data[].project_name |
string | ⛔f_proj_project_name |
data[].description |
string | null | ⛔f_proj_description |
data[].access_level |
string | ⛔f_proj_access_level |
data[].team |
object | null | ⛔f_proj_team |
data[].team.team_unique |
string | ⛔f_team_unique |
data[].is_readonly |
boolean | ⛔f_proj_is_readonly |
data[].readonly_since |
string | null | ⛔f_proj_readonly_since |
data[].created_at |
string | ⛔f_created_at |
data[].updated_at |
string | ⛔f_updated_at |
meta.total |
integer | ⛔f_meta_total |
meta.current_page |
integer | ⛔f_meta_current_page |
meta.per_page |
integer | ⛔f_meta_per_page |
meta.last_page |
integer | ⛔f_meta_last_page |
| ⛔th_status | ⛔th_code | ⛔th_when |
|---|---|---|
| 422 | validation_error |
⛔e_invalid_params |
curl "https://stepeee.com/public-api/v1/projects" \ -H "Authorization: Bearer sk_xxxxxxxxxxxxxxxx"
import requests
response = requests.get(
"https://stepeee.com/public-api/v1/projects",
headers={"Authorization": "Bearer sk_xxxxxxxxxxxxxxxx"},
)
print(response.json())
const response = await fetch("https://stepeee.com/public-api/v1/projects", {
headers: { Authorization: "Bearer sk_xxxxxxxxxxxxxxxx" },
});
const data = await response.json();
console.log(data);
var request = URLRequest(url: URL(string: "https://stepeee.com/public-api/v1/projects")!)
request.setValue("Bearer sk_xxxxxxxxxxxxxxxx", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://stepeee.com/public-api/v1/projects"))
.header("Authorization", "Bearer sk_xxxxxxxxxxxxxxxx")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
$ch = curl_init("https://stepeee.com/public-api/v1/projects");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer sk_xxxxxxxxxxxxxxxx",
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
{
"data": [
{
"project_unique": "a1b2c3d4e5",
"project_name": "Sample Project",
"description": "Sample project description",
"access_level": "owner",
"team": null,
"is_readonly": false,
"readonly_since": null,
"created_at": "2026-01-10T09:00:00Z",
"updated_at": "2026-10-01T12:00:00Z"
}
],
"meta": { "total": 1, "current_page": 1, "per_page": 20, "last_page": 1 }
}
⛔ep_projects_detail_title
Mendapatkan butiran satu projek.
| ⛔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"
}
}
}
Kandungan
⛔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
Mendapatkan senarai keseluruhan kandungan yang dijana dalam projek (pos, blog, imej dan 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
Mendapatkan butiran satu kandungan. Termasuk teks/aset yang dijana serta status penerbitan (hasil siaran ke SNS/WordPress, dsb.). Kandungan "content" berbeza mengikut mod.
| ⛔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 | Maksud |
|---|---|
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