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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 201 — Post 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: 400 — Missing required fields or invalid input (publish_date / base64 / image_url).
Status: 401 — Invalid apikey.
Status: 403 — API key expired.
Status: 404 — Channel not found for given guid_channel.
Status: 409 — Duplicate post for same channel and date (same title).
Status: 413 — Image too large.
Status: 415 — Unsupported image mime.
Status: 500 — Database 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Success 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: 400 — Missing/invalid inputs (apikey/day/date_*).
Status: 401 — Invalid apikey.
Status: 403 — API key expired.
Status: 500 — Database 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Deleted 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: 400 — Missing/invalid inputs (apikey/guid).
Status: 401 — Invalid apikey.
Status: 403 — API key expired.
Status: 404 — Post not found for this apikey/guid.
Status: 405 — Method Not Allowed.
Status: 500 — Database 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Updated 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: 400 — Missing/invalid inputs (apikey/guid/publish_date|status).
Status: 401 — Invalid apikey.
Status: 403 — API key expired or channel mismatch.
Status: 404 — Post not found for this apikey/guid.
Status: 405 — Method Not Allowed.
Status: 409 — Unique constraint conflict (e.g. uq_channel_date_title).
Status: 500 — Database 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Channels 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: 400 — Missing parameter: apikey.
Status: 401 — Invalid apikey.
Status: 403 — API key expired.
Status: 500 — Internal 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 201 — Channel 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: 400 — Missing inputs (apikey) or both name & slug absent.
Status: 401 — Invalid apikey.
Status: 403 — API key expired.
Status: 405 — Method Not Allowed (only POST).
Status: 409 — Conflict (slug or guid already exists).
Status: 500 — Database 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Channel 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: 400 — Missing/invalid inputs (apikey/guid).
Status: 401 — Invalid apikey.
Status: 403 — API key expired.
Status: 404 — Channel not found for this apikey/guid.
Status: 405 — Method Not Allowed.
Status: 409 — Channel has related posts. Delete them first or call with force=1.
Status: 500 — Database 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Channel 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: 400 — Missing/invalid inputs (apikey/guid).
Status: 401 — Invalid apikey.
Status: 403 — API key expired.
Status: 404 — Channel not found for this apikey/guid.
Status: 405 — Method Not Allowed (use PUT or PATCH).
Status: 409 — Slug already exists for this apikey.
Status: 500 — Database 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Success
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: 400 — Invalid parameters (optional in this public endpoint).
Status: 500 — Server/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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Success
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: 400 — Bad request (invalid params)
JSON
{"ok":false,"message":"Invalid "date_from" (YYYY-MM-DD)"}
Status: 401 — Unauthorized (invalid API key)
JSON
{"ok":false,"message":"Invalid apikey."}
Status: 403 — Forbidden (API key expired)
JSON
{"ok":false,"message":"API key expired."}
Status: 500 — Server 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
Name | In | Type | Required | Default | Description |
---|---|---|---|---|---|
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: 200 — Successful 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: 400 — Missing or invalid inputs (apikey, image_base64 or base64 validity).
JSON
{ "ok": false, "error": "Missing image_base64" }
Status: 402 — Insufficient 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: 502 — Upstream 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.