Strmfy API — API Documentation

Authentication

Type
BEARER — Bearer Token
Location
header / param: Authorization
Authorization: Bearer <APIKEY> (recommended)
Authorization: Bearer YOUR_TOKEN
Type
APIKEY — API Key
Location
query / param: apikey
Fallback via query/body param "apikey"
GET https://api.strmfy.com/sendsms/?apikey=YOUR_API_KEY

Posts

/post/add • Methods: POST

Add Post

Create a scheduled social post for a channel (image via multipart, JSON base64, or image_url).
POST /post/add • Rate: 30 req/min Auth required

Parameters

NameInTypeRequiredDefaultDescription
apikey body string Yes Your API key (also accepted via query).
guid_channel body string Yes Target channel GUID (alias: channel_guid).
publish_date body string Yes Publish date YYYY-MM-DD.
title body string Yes Post title.
content body string Yes Post content (text).
hashtags body string No Optional hashtags string (e.g., "#brand #promo").
status body string No Post status (default: planned).
image body file No Multipart upload field name "image".
image_base64 body string No Base64-encoded image (use with "mime").
mime body string No Required when using image_base64. One of: image/jpeg, image/png, image/webp, image/gif.
image_url body string No HTTP/HTTPS URL of an image (stored as-is).
channel_guid body string No Alias of guid_channel.

Request examples

CURL
CURL
CURL
curl -X POST "https://api.strmfy.com/post/add" -H "Accept: application/json" -F "apikey=YOUR_API_KEY" -F "guid_channel=GUID_OF_CHANNEL" -F "publish_date=2025-09-20" -F "title=Autumn launch" -F "content=Teasing our autumn collection..." -F "hashtags=#brand #autumn" -F "status=planned" -F "image=@/path/to/image.jpg"

Responses

Status: 201Post inserted.
JSON
{ "ok": true, "apikey": "****", "channel_guid": "guid-123", "channel_id": 42, "post_guid": "ab12cd34-ef567890", "status": "planned", "publish_date": "2025-09-20", "image": { "url": "https://dashboard.strmfy.com/uploads/2025/09/abcdef123456.jpg", "mime": "image/jpeg", "size": 345678, "width": 1600, "height": 900 }, "message": "Post inserted." }
Status: 400Missing required fields or invalid input (publish_date / base64 / image_url).
Status: 401Invalid apikey.
Status: 403API key expired.
Status: 404Channel not found for given guid_channel.
Status: 409Duplicate post for same channel and date (same title).
Status: 413Image too large.
Status: 415Unsupported image mime.
Status: 500Database or server error.
/post/list/ • Methods: GET POST

List Posts

List posts with filters, sorting, pagination. Auth via Bearer or "apikey" fallback.
GET
POST
GET /post/list/ • Rate: 60 req/min Auth required

Parameters

NameInTypeRequiredDefaultDescription
Authorization header string No Bearer <APIKEY> (recommended).
apikey query string No Fallback if no Bearer.
date_from query string No YYYY-MM-DD
date_to query string No YYYY-MM-DD
day query string No YYYY-MM-DD (exact day)
only_future query integer No 1|0 (default 0)
only_past query integer No 1|0 (default 0)
status query string No CSV: planned,published,failed,…
channel_slug query string No Filter by channel slug
channel_guid query string No Filter by channel GUID
channel_id query integer No Filter by channel ID
q query string No Free text search
sort query string No publish_date_desc|publish_date_asc|created_desc|created_asc|updated_desc|updated_asc|channel_asc|channel_desc|status_asc|status_desc
limit query integer No 1..200 (default 50)
offset query integer No >=0 (default 0)
group_by_day query integer No 1 returns posts_by_day map

Request examples

CURL
CURL
curl -H "Authorization: Bearer YOUR_API_KEY" "https://api.strmfy.com/post/list/?date_from=2025-09-01&date_to=2025-09-30&status=planned,published&sort=publish_date_desc&limit=50&offset=0"

Responses

Status: 200Success list.
JSON
JSON
{ "ok": true, "apikey": "****", "count": 2, "total": 123, "limit": 50, "offset": 0, "next_offset": 50, "sort": "publish_date_desc", "filters": { "date_from": "2025-09-01", "date_to": "2025-09-30", "only_future": false, "only_past": false, "status": "planned,published", "channel_slug": "brand-ig", "q": "launch", "group_by_day": false }, "posts": [ { "guid": "p-ab12cd34", "channel_slug": "brand-ig", "channel_guid": "guid-xyz", "channel_name": "Brand Instagram", "category": "instagram", "publish_date": "2025-09-13", "post_title": "Launch day!", "content_text": "We are live 🚀", "hashtags": "#brand #launch", "media_path": null, "image_url": "https://example.com/img.jpg", "image_mime": "image/jpeg", "image_size": 345678, "image_width": 1600, "image_height": 900, "status": "published", "post_time": "09:00", "created_at": "2025-09-10 11:00:00", "updated_at": "2025-09-13 09:10:00" } ] }
Status: 400Missing/invalid inputs (apikey/day/date_*).
Status: 401Invalid apikey.
Status: 403API key expired.
Status: 500Database error.
/post/delete/ • Methods: GET POST DELETE

Delete Post

Delete a post by GUID. Auth via Bearer or "apikey" fallback.
GET
POST
DELETE
GET /post/delete/ • Rate: 60 req/min Auth required

Delete Post (compat)

Compatibility wrapper to delete by query params.

Parameters

NameInTypeRequiredDefaultDescription
Authorization header string No Bearer <APIKEY> (recommended).
apikey query string No Fallback if no Bearer.
guid query string Yes Post GUID to delete. Alias: post_guid
post_guid query string No Alias of guid

Request examples

CURL
curl "https://api.strmfy.com/post/delete/?apikey=YOUR_API_KEY&guid=p-ab12cd34"

Responses

Status: 200Deleted successfully. (GET compat)
JSON
{"ok":true,"apikey":"****","guid":"p-ab12cd34","deleted":1,"post":{"id":123,"channel_id":42,"guid":"p-ab12cd34","publish_date":"2025-09-20","status":"planned","created_at":"2025-09-10 11:00:00","updated_at":"2025-09-15 09:10:00"},"message":"Post deleted."}
Status: 400Missing/invalid inputs (apikey/guid).
Status: 401Invalid apikey.
Status: 403API key expired.
Status: 404Post not found for this apikey/guid.
Status: 405Method Not Allowed.
Status: 500Database error.
/post/edit/ • Methods: GET POST PUT PATCH

Edit Post (partial update)

Partially update a post by GUID. Auth via Bearer or "apikey" fallback.
GET
POST
PUT
PATCH
GET /post/edit/ • Rate: 60 req/min Auth required

Edit Post (compat/debug)

Compatibility endpoint to update via query/body; use POST/PATCH in production.

Parameters

NameInTypeRequiredDefaultDescription
Authorization header string No Bearer <APIKEY> (recommended).
apikey query string No Fallback if no Bearer.
guid query string Yes Post GUID to update. Alias: post_guid
post_guid query string No Alias of guid
publish_date query string No YYYY-MM-DD
title query string No Post title (sp.post_title)
content query string No Post content (sp.content_text)
hashtags query string No Hashtags (sp.hashtags)
status query string No planned|published|failed|skipped
channel_guid query string No Resolve to channel_id (must belong to apikey)
channel_id query integer No Direct channel id (verified for apikey)
media_path query string No Optional media path
image_url query string No Optional image URL

Request examples

CURL
curl "https://api.strmfy.com/post/edit/?apikey=YOUR_API_KEY&guid=p-ab12cd34&title=New%20title"

Responses

Status: 200Updated successfully (compat/debug).
JSON
{"ok":true,"apikey":"****","guid":"p-ab12cd34","updated_fields":["post_title"],"post":{"id":123,"guid":"p-ab12cd34","channel_id":42,"channel_slug":"brand-ig","channel_guid":"ch-xyz","channel_name":"Brand Instagram","category":"instagram","publish_date":"2025-09-21","post_title":"New title via GET","content_text":"We are live 🚀","hashtags":"#brand #launch","media_path":null,"image_url":"https://example.com/img.jpg","image_mime":"image/jpeg","image_size":345678,"image_width":1600,"image_height":900,"status":"planned","post_time":"09:00","created_at":"2025-09-10 11:00:00","updated_at":"2025-09-13 09:10:00"},"message":"Post updated."}
Status: 400Missing/invalid inputs (apikey/guid/publish_date|status).
Status: 401Invalid apikey.
Status: 403API key expired or channel mismatch.
Status: 404Post not found for this apikey/guid.
Status: 405Method Not Allowed.
Status: 409Unique constraint conflict (e.g. uq_channel_date_title).
Status: 500Database error.

Channels

/channels/list • Methods: GET POST

List Channels

List channels linked to the provided apikey. Supports filtering, sorting and pagination.
GET
POST
GET /channels/list • Rate: 60 req/min Auth required

Parameters

NameInTypeRequiredDefaultDescription
apikey query string Yes Your API key.
category query string No Filter by category (e.g., instagram, tiktok…).
active query integer No Filter by active status: 0 or 1.
limit query integer No Page size (default 50, max 200).
offset query integer No Pagination offset (default 0).
sort query string No created_desc (default) | created_asc | name_asc | name_desc | audience_desc | audience_asc

Request examples

CURL
curl "https://api.strmfy.com/channels/list?apikey=YOUR_API_KEY&category=instagram&active=1&limit=50&offset=0&sort=created_desc"

Responses

Status: 200Channels list (with pagination).
JSON
{ "ok": true, "apikey": "****", "customer_id": 26, "count": 2, "total": 10, "limit": 50, "offset": 0, "next_offset": 50, "channels": [ { "id": 7, "name": "Brand Instagram", "slug": "brand-ig", "category": "instagram", "audience": 12345, "post_length_hint": "Keep it short", "media_hint": "Square image preferred", "hashtags_hint": "#brand #promo", "link_hint": "Link in bio", "max_chars": 280, "prompt_hint": "Energetic, fun tone", "active": 1, "freq_per_week": 3, "created_at": "2025-09-01 10:20:00", "post_days": "Mon,Wed,Fri", "post_time": "09:00", "default_hashtags": "#brand #promo", "content_mix": "80/20", "url_page": "https://example.com/brand", "last_source_id": 123, "apikey": "****", "guid": "uuid-xxx" } ], "message": "2 channels found." }
Status: 400Missing parameter: apikey.
Status: 401Invalid apikey.
Status: 403API key expired.
Status: 500Internal database error.
/channels/add/ • Methods: POST

Create Channel

Add a channel to the authenticated account. Accepts JSON or x-www-form-urlencoded. Requires Bearer or apikey.
POST /channels/add/ • Rate: 60 req/min Auth required

Parameters

NameInTypeRequiredDefaultDescription
Authorization header string No Bearer <APIKEY> (recommended).
apikey body string No Fallback if no Bearer (also supported via GET or session).
name body string No Channel name. Required if slug is not provided.
slug body string No Channel slug. Auto-generated from name if missing; unique per apikey.
category body string No Channel category (e.g., instagram, tiktok).
audience body string No Audience size hint (free text or number).
post_length_hint body string No Guidance about post length.
media_hint body string No Media/format tips.
hashtags_hint body string No Hashtag tips.
link_hint body string No Link policy/tips.
max_chars body integer No Max characters allowed for the channel.
prompt_hint body string No Prompt hint for AI generation.
active body boolean No 0/1, true/false. Default: 1.
freq_per_week body integer No Posting frequency per week.
post_days body string No Posting days ("mon,tue,fri" or JSON string). Stored as-is.
post_time body string No HH:MM or HH:MM:SS.
default_hashtags body string No Default hashtags string.
content_mix body string No Editorial mix (e.g., "80/20").
url_page body string No Public page URL for the channel.
last_source_id body integer No Optional integer source id.

Request examples

CURL
CURL
PHP
curl -X POST "https://api.strmfy.com/channels/add/" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{ "name": "Instagram Main", "category": "instagram", "active": true, "freq_per_week": 3, "post_days": "mon,wed,fri", "post_time": "09:00", "default_hashtags": "#brand #promo" }'

Responses

Status: 201Channel created.
JSON
{ "ok": true, "apikey": "****", "channel": { "id": 123, "guid": "ab12cd34ef56a1b2c3d4e5f6a7b8c9d0", "name": "Instagram Main", "slug": "instagram-main", "created_at": "2025-09-13 09:00:00" }, "message": "Channel created." }
Status: 400Missing inputs (apikey) or both name & slug absent.
Status: 401Invalid apikey.
Status: 403API key expired.
Status: 405Method Not Allowed (only POST).
Status: 409Conflict (slug or guid already exists).
Status: 500Database error.
/channels/delete/ • Methods: GET POST DELETE

Delete Channel

Delete a channel by guid. Optional force=1 deletes related posts before removing the channel.
GET
POST
DELETE
GET /channels/delete/ • Rate: 60 req/min Auth required

Delete Channel (compat)

Compatibility endpoint (debug). Prefer POST or DELETE in production.

Parameters

NameInTypeRequiredDefaultDescription
Authorization header string No Bearer <APIKEY> (recommended).
apikey query string No Fallback if no Bearer.
guid query string Yes Channel GUID to delete. Alias: channel_guid
channel_guid query string No Alias of guid
force query integer No 0|1 — if 1, also delete related posts before removing the channel.

Request examples

CURL
curl "https://api.strmfy.com/channels/delete/?apikey=YOUR_API_KEY&guid=ch-abcdef"

Responses

Status: 200Channel deleted (compat/debug).
JSON
{"ok":true,"apikey":"****","guid":"ch-abcdef","deleted":1,"deleted_posts":0,"channel":{"id":42,"name":"Instagram Main","slug":"instagram-main","guid":"ch-abcdef"},"message":"Channel deleted."}
Status: 400Missing/invalid inputs (apikey/guid).
Status: 401Invalid apikey.
Status: 403API key expired.
Status: 404Channel not found for this apikey/guid.
Status: 405Method Not Allowed.
Status: 409Channel has related posts. Delete them first or call with force=1.
Status: 500Database error.
/channels/edit • Methods: GET POST PUT PATCH

Edit Channel

Full update. Send every editable field. Identify channel with guid (alias: channel_guid).
GET
POST
PUT
PATCH
GET /channels/edit • Rate: 60 req/min Auth required

Edit Channel (debug)

Debug compatibility. Prefer PUT or PATCH.

Parameters

NameInTypeRequiredDefaultDescription
Authorization header string No Bearer <APIKEY> (recommended).
apikey query string No Fallback if no Bearer.
guid query string Yes Channel GUID to edit. Alias: channel_guid
channel_guid query string No Alias of guid

Request examples

CURL
curl "https://api.strmfy.com/channels/edit?apikey=YOUR_API_KEY&guid=ch-abcdef&name=TmpName"

Responses

Status: 200Channel updated (debug compat).
JSON
{"ok":true,"apikey":"****","guid":"ch-abcdef","updated_fields":["name"],"channel":{"id":42,"guid":"ch-abcdef","name":"TmpName"},"message":"Channel updated."}
Status: 400Missing/invalid inputs (apikey/guid).
Status: 401Invalid apikey.
Status: 403API key expired.
Status: 404Channel not found for this apikey/guid.
Status: 405Method Not Allowed (use PUT or PATCH).
Status: 409Slug already exists for this apikey.
Status: 500Database error.

Social Auth

/social/auth/providers • Methods: GET

List social auth providers

Public endpoint that lists available social providers (slug, name, guide_url, logo).
GET /social/auth/providers • Rate: 120 req/min

Parameters

NameInTypeRequiredDefaultDescription
q query string No Filter by text on slug or name.
limit query integer No 100 Items per page (1..200).
offset query integer No 0 Offset for pagination (>=0).
sort query string No name_asc One of: name_asc | name_desc | slug_asc | slug_desc.

Request examples

CURL
CURL
JAVASCRIPT
PYTHON
curl "https://api.strmfy.com/social/auth/providers"

Responses

Status: 200Success
JSON
{ "ok": true, "count": 3, "total": 12, "limit": 3, "offset": 0, "next_offset": 3, "sort": "name_asc", "filters": {"q": "insta"}, "providers": [ {"slug":"instagram","name":"Instagram","guide_url":"https://docs.strmfy.com/auth/instagram","logo":"https://cdn.strmfy.com/logos/instagram.svg"}, {"slug":"instagram-business","name":"Instagram Business","guide_url":"https://docs.strmfy.com/auth/instagram-business","logo":"https://cdn.strmfy.com/logos/instagram-business.svg"}, {"slug":"instagram-creator","name":"Instagram Creator","guide_url":"https://docs.strmfy.com/auth/instagram-creator","logo":null} ] }
Status: 400Invalid parameters (optional in this public endpoint).
Status: 500Server/DB error.

AI

/ai/post/list/ • Methods: GET POST

List AI-generated posts

List posts generated via AI from photos. Filtering, pagination, optional image payload.
GET
POST
GET /ai/post/list/ Auth required

Parameters

NameInTypeRequiredDefaultDescription
Authorization header string (Bearer) No Authorization: Bearer YOUR_API_KEY
apikey query string No Alternative si pas de header
q query string No Search in title, content, hashtags_json, from_source
day query YYYY-MM-DD No Exact filter on created_at date
date_from query YYYY-MM-DD No Inclusive start date
date_to query YYYY-MM-DD No Inclusive end date
from_source query string|CSV No e.g. "web,app,mobile"
visible_only query boolean (0|1) No 1 If 1 (default), only visible items
sort query string No created_desc created_desc|created_asc|title_asc|title_desc|source_asc|source_desc
limit query integer No 50 1..200
offset query integer No 0 >=0
include_image query boolean (0|1) No 0 If 1, include imageBase64 (heavy)
group_by_day query boolean (0|1) No 0 If 1, returns items_by_day instead of items

Request examples

CURL
CURL
JAVASCRIPT
PYTHON
curl "https://api.strmfy.com/ai/post/list/?apikey=YOUR_API_KEY"

Responses

Status: 200Success
JSON
{ "ok": true, "apikey": "demo-key", "count": 2, "total": 12, "limit": 50, "offset": 0, "next_offset": 2, "sort": "created_desc", "filters": { "q": null, "day": null, "date_from": null, "date_to": null, "from_source": null, "visible_only": true, "include_image": false, "group_by_day": false }, "items": [ { "id": 101, "title": "Generated post from photo 1", "content": "AI caption text", "hashtags": "["#ai","#photo"]", "created_at": "2025-09-12 14:30:00", "from_source": "web" }, { "id": 102, "title": "Generated post from photo 2", "content": "Another caption", "hashtags": "["#ai","#image"]", "created_at": "2025-09-12 15:00:00", "from_source": "app" } ] }
Status: 400Bad request (invalid params)
JSON
{"ok":false,"message":"Invalid "date_from" (YYYY-MM-DD)"}
Status: 401Unauthorized (invalid API key)
JSON
{"ok":false,"message":"Invalid apikey."}
Status: 403Forbidden (API key expired)
JSON
{"ok":false,"message":"API key expired."}
Status: 500Server error
JSON
{"ok":false,"message":"DB connection error"}
/ai/content-from-photo/ • Methods: POST

Generate Post from Photo

Generate a social post (title, content, hashtags[]) from an image (base64). Credits are deducted based on OpenAI token usage.
POST /ai/content-from-photo/ • Rate: 10 req/min Auth required

Parameters

NameInTypeRequiredDefaultDescription
apikey body string Yes Your API key (also accepted via query or POST form).
apikey query string No Your API key (alternative to JSON body).
image_base64 body string Yes Base64 image. Accepts full data URI (data:image/...;base64,...) or raw base64.
mime body string No MIME type when sending raw base64 (default: image/jpeg).
lang body string No Language for generated content (ISO code). Default: en.
system body string No Custom system prompt (overrides the default expert-writer prompt).
from_source body string No Optional source tag for logging/analytics.

Request examples

CURL
CURL
PHP
curl -X POST "https://api.strmfy.com/ai/content-from-photo/" -H "Content-Type: application/json" -d '{ "apikey": "YOUR_API_KEY", "image_base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEA...", "lang": "en" }'

Responses

Status: 200Successful generation.
JSON
{ "ok": true, "title": "Sunny Morning Vibes", "content": "Fresh coffee, warm light, and a quiet moment before the day starts. ☕✨", "hashtags": ["morning","coffee","dailyvibes"], "language": "en", "model": "gpt-4o-mini", "usage": {"input": 450, "output": 220, "total": 670}, "prices": {"token_input": 0.000002, "token_output": 0.000006}, "credits": {"input": 0.0009, "output": 0.00132, "total": 0.00222}, "balance": {"before": 12.34, "after": 12.33778}, "log_id": 12345 }
Status: 400Missing or invalid inputs (apikey, image_base64 or base64 validity).
JSON
{ "ok": false, "error": "Missing image_base64" }
Status: 402Insufficient credits.
JSON
{ "ok": false, "error": "Not enough credits to process this request. Please recharge and try again.", "usage": {"input": 320, "output": 180, "total": 500}, "prices": {"token_input": 0.000002, "token_output": 0.000006}, "credits": {"input": 0.00064, "output": 0.00108, "total": 0.00172} }
Status: 502Upstream error (cURL, non-2xx, or invalid upstream JSON).
JSON
{ "ok": false, "error": "Upstream cURL error: ..." }

Webhooks

No webhooks documented.

SDKs

No SDKs listed.

Error catalog

No errors defined.

Changelog

No releases yet.