Stepeee Stepeee Plateforme IA entièrement automatisée

Authentification

1

Vérifier votre clé API

Vous pouvez la consulter depuis le menu en haut à droite > Paramètres > Compte > Clés API.

2

Ajouter la clé à l'en-tête de la requête

Ajoutez votre clé API émise à l'en-tête Authorization au format Bearer.

3

Envoyer une requête à l'URL de base

Envoyez vos requêtes à l'URL de base ci-dessous, suivie du chemin du point de terminaison.

⛔auth_key_note

URL de base

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

Exemple de requête

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 de réponse et erreurs

Toutes les réponses sont renvoyées au format d'enveloppe suivant.

En cas de succès

{ "data": ... }

En cas d'erreur

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

Codes de statut

StatutSignification
401La clé API est invalide ou a expiré
403⛔status_403_desc
404La ressource n'existe pas (y compris en l'absence de droit d'accès)
405⛔status_405_desc
409⛔status_409_desc
422Les paramètres sont invalides
429La limite de débit a été dépassée
500Une erreur inattendue est survenue
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_codeSignification
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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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" }
  }
}

Projets

⛔group_projects_lead

GET › /projects

⛔ep_projects_list_title

Récupère la liste des projets accessibles au titulaire de la clé 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
Exemple de requête
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;
Exemple de réponse
{
  "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

Récupère les détails d'un projet unique.

⛔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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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"
    }
  }
}

Contenus

⛔group_contents_lead

GET › /projects/{project_unique}/contents

⛔ep_contents_list_title

Récupère la liste combinée des contenus générés dans un projet (posts, blogs, images et vidéos).

⛔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
Exemple de requête
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;
Exemple de réponse
{
  "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

Récupère les détails d'un contenu unique. Inclut le texte et les ressources générés, ainsi que le statut de publication (résultats de publication sur les réseaux sociaux, WordPress, etc.). Le contenu de « content » varie selon le mode.

⛔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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "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
Exemple de requête
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;
Exemple de réponse
{
  "data": {
    "delivered": false,
    "response_status": 500,
    "error": "non_2xx_response"
  }
}

⛔webhook_events_heading

⛔webhook_events_lead

⛔webhook_th_eventSignification
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