Stepeee Stepeee Platformă AI complet automatizată

Autentificare

1

Verificați cheia API

O puteți verifica din meniul din colțul din dreapta sus > Setări > Cont > Chei API.

2

Adăugați-o în antetul cererii

Adăugați cheia API emisă în antetul Authorization, în format Bearer.

3

Trimiteți cererea către URL-ul de bază

Trimiteți cererile către URL-ul de bază de mai jos, urmat de calea punctului final.

⛔auth_key_note

URL de bază

https://stepeee.com/public-api/v1

Exemplu de cerere

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 răspuns și erori

Toate răspunsurile sunt returnate în următorul format de tip plic (envelope).

În caz de succes

{ "data": ... }

În caz de eroare

{ "error": { "code": "...", "message": "...", "details": { ... } } }

Coduri de stare

StareSemnificație
401Cheia API este invalidă sau a expirat
403⛔status_403_desc
404Resursa nu există (inclusiv în cazurile în care nu aveți permisiunea de acces)
405⛔status_405_desc
409⛔status_409_desc
422Parametrii sunt invalizi
429Limita de rată a fost depășită
500A apărut o eroare neașteptată
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_codeSemnificație
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

GET › /me

⛔ep_me_title

⛔ep_me_desc

⛔fields_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
  }
}
GET › /me/subscription

⛔ep_me_subscription_title

⛔ep_me_subscription_desc

⛔fields_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
    }
  }
}
GET › /me/tokens

⛔ep_me_tokens_title

⛔ep_me_tokens_desc

⛔fields_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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
    }
  }
}
GET › /me/token-usage

⛔ep_me_token_usage_title

⛔ep_me_token_usage_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
403 forbidden ⛔e_usage_team_staff
422 validation_error ⛔e_usage_range
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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
  }
}
GET › /me/storage

⛔ep_me_storage_title

⛔ep_me_storage_desc

⛔fields_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
    ]
  }
}
GET › /me/payments

⛔ep_me_payments_title

⛔ep_me_payments_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
GET › /me/referral

⛔ep_me_referral_title

⛔ep_me_referral_desc

⛔fields_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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" }
  }
}

Proiecte

⛔group_projects_lead

GET › /projects

⛔ep_projects_list_title

Preia lista proiectelor accesibile proprietarului cheii API.

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
GET › /projects/{project_unique}

⛔ep_projects_detail_title

Preia detaliile unui singur proiect.

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
project_unique ⛔in_path string ⛔required_yes — ⛔p_project_unique
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
      }
    }
  }
}
GET › /projects/{project_unique}/concepts

⛔ep_concepts_list_title

⛔ep_concepts_list_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
GET › /projects/{project_unique}/concepts/{concept_unique}

⛔ep_concepts_detail_title

⛔ep_concepts_detail_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
404 not_found ⛔e_concept_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
    }
  }
}

Conținut

⛔group_contents_lead

GET › /projects/{project_unique}/contents

⛔ep_contents_list_title

Preia o listă combinată a conținutului generat într-un proiect (postări, bloguri, imagini și videoclipuri).

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
GET › /projects/{project_unique}/contents/{variation_unique}

⛔ep_contents_detail_title

Preia detaliile unui singur element de conținut. Include textul/activele generate și starea publicării (rezultatele postării pe rețele sociale/WordPress etc.). Conținutul câmpului „content” diferă în funcție de mod.

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
404 not_found ⛔e_content_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"] }
    }
  }
}
GET › /projects/{project_unique}/contents/{variation_unique}/schedule

⛔ep_contents_schedule_title

⛔ep_contents_schedule_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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

GET › /projects/{project_unique}/publications

⛔ep_publications_list_title

⛔ep_publications_list_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
GET › /projects/{project_unique}/accounts

⛔ep_accounts_list_title

⛔ep_accounts_list_desc

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
project_unique ⛔in_path string ⛔required_yes — ⛔p_project_unique
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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

GET › /automations

⛔ep_automations_list_title

⛔ep_automations_list_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
GET › /automations/{auto_unique}

⛔ep_automations_detail_title

⛔ep_automations_detail_desc

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
auto_unique ⛔in_path string ⛔required_yes — ⛔p_auto_unique
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_automation_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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

GET › /materials

⛔ep_materials_list_title

⛔ep_materials_list_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
GET › /materials/{material_unique}

⛔ep_materials_detail_title

⛔ep_materials_detail_desc

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
material_unique ⛔in_path string ⛔required_yes — ⛔p_material_unique
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_material_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
  }
}
GET › /material-categories

⛔ep_material_categories_title

⛔ep_material_categories_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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
    }
  ]
}
GET › /templates

⛔ep_templates_list_title

⛔ep_templates_list_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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

POST › /projects/{project_unique}/concepts/{concept_unique}/titles

⛔ep_titles_store_title

⛔ep_titles_store_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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" }
    ]
  }
}
DELETE › /projects/{project_unique}/contents/{variation_unique}

⛔ep_contents_destroy_title

⛔ep_contents_destroy_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "data": {
    "variation_unique": "Hn4kT7sY1cVb",
    "mode": "blogmode",
    "delete_at": "2026-10-24T12:00:00Z"
  }
}

⛔group_write_automations_nav_label

⛔group_write_automations_lead

POST › /automations

⛔ep_automations_store_title

⛔ep_automations_store_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
    }
  ]
}
PATCH › /automations/{auto_unique}

⛔ep_automations_update_title

⛔ep_automations_update_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
  }
}
POST › /automations/{auto_unique}/stop

⛔ep_automations_stop_title

⛔ep_automations_stop_desc

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
auto_unique ⛔in_path string ⛔required_yes — ⛔p_auto_unique
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_automation_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
  }
}
POST › /automations/{auto_unique}/confirm

⛔ep_automations_confirm_title

⛔ep_automations_confirm_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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

GET › /post-confirms

⛔ep_post_confirms_list_title

⛔ep_post_confirms_list_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_project_not_found
422 validation_error ⛔e_invalid_params
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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 }
}
POST › /post-schedules/{schedule_unique}/approve

⛔ep_post_schedules_approve_title

⛔ep_post_schedules_approve_desc

⛔params_heading
⛔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
⛔fields_heading
⛔th_field⛔th_type⛔th_desc
schedule_unique / state / … / image — ⛔f_pc_same_as_list
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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
  }
}
POST › /post-schedules/{schedule_unique}/post-now

⛔ep_post_schedules_post_now_title

⛔ep_post_schedules_post_now_desc

⛔params_heading
⛔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
⛔fields_heading
⛔th_field⛔th_type⛔th_desc
schedule_unique / state / … / image — ⛔f_pc_same_as_list
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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
  }
}
PATCH › /post-schedules/{schedule_unique}

⛔ep_post_schedules_update_title

⛔ep_post_schedules_update_desc

⛔params_heading
⛔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
⛔fields_heading
⛔th_field⛔th_type⛔th_desc
schedule_unique / state / … / image — ⛔f_pc_same_as_list
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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
  }
}
DELETE › /post-schedules/{schedule_unique}

⛔ep_post_schedules_destroy_title

⛔ep_post_schedules_destroy_desc

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
schedule_unique ⛔in_path string ⛔required_yes — ⛔p_schedule_unique
⛔fields_heading
⛔th_field⛔th_type⛔th_desc
schedule_unique string ⛔f_pc_deleted_schedule_unique
deleted boolean ⛔f_deleted_flag
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "data": {
    "schedule_unique": "aB3dE5fG7hJ9",
    "deleted": true
  }
}

⛔group_write_webhooks_nav_label

⛔group_write_webhooks_lead

GET › /webhooks

⛔ep_webhooks_list_title

⛔ep_webhooks_list_desc

⛔fields_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
    }
  ]
}
POST › /webhooks

⛔ep_webhooks_store_title

⛔ep_webhooks_store_desc

⛔params_heading
⛔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
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "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"
  }
}
DELETE › /webhooks/{webhook_unique}

⛔ep_webhooks_destroy_title

⛔ep_webhooks_destroy_desc

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
webhook_unique ⛔in_path string ⛔required_yes — ⛔p_webhook_unique
⛔fields_heading
⛔th_field⛔th_type⛔th_desc
webhook_unique string ⛔f_wh_deleted_webhook_unique
deleted boolean ⛔f_deleted_flag
⛔errors_heading
⛔th_status⛔th_code⛔th_when
404 not_found ⛔e_webhook_not_found
Exemplu de cerere
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;
Exemplu de răspuns
{
  "data": {
    "webhook_unique": "Xk3pQ9vLm2Ta",
    "deleted": true
  }
}
POST › /webhooks/{webhook_unique}/test

⛔ep_webhooks_test_title

⛔ep_webhooks_test_desc

⛔params_heading
⛔th_name ⛔th_in ⛔th_type ⛔th_required ⛔th_default ⛔th_desc
webhook_unique ⛔in_path string ⛔required_yes — ⛔p_webhook_unique
⛔fields_heading
⛔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
⛔errors_heading
⛔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
Exemplu de cerere
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;
Exemplu de răspuns
{
  "data": {
    "delivered": false,
    "response_status": 500,
    "error": "non_2xx_response"
  }
}

⛔webhook_events_heading

⛔webhook_events_lead

⛔webhook_th_eventSemnificație
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.published
post.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

  1. ⛔webhook_verify_step1
  2. ⛔webhook_verify_step2
  3. ⛔webhook_verify_step3
  4. ⛔webhook_verify_step4
  5. ⛔webhook_verify_step5
  6. ⛔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