This document is for R&D, QA, implementation, and automation engineers who integrate with the SocialEcho external API. The goal is a working integration in the shortest possible time.
Authorization: Bearer se_xxx).GET /v1/team first to verify auth and team context, then call other endpoints.| Field | Description |
|---|---|
| Base URL | https://api.socialecho.net |
| Authentication | Bearer Token (Team API Key) |
| Header | Authorization: Bearer se_your_team_api_key |
| Optional header | X-Lang: zh_CN or en |
| Rate limit | 120 requests per minute per API key |
The exported OpenAPI defines many operations as **GET with a JSON request body** (Content-Type: application/json), not query-string parameters.
Some HTTP clients (e.g. browser fetch) restrict GET bodies; prefer curl, server-side HTTP libraries, or the provided CLI / n8n node.
**code is 200 or 0** (follow the live API; older docs only mentioned 200)| Case | Meaning & action |
|---|---|
| 400 Bad Request | Missing or malformed parameters (check dates and enums first) |
| 401 Unauthorized | Invalid/expired API key, or wrong Authorization header |
| 429 Too Many Requests | Rate limited – add throttling and exponential backoff (1s/2s/4s) |
| Timeout / network | Retry 2–3 times; keep a snapshot of request parameters |
Examples use Base URL https://api.socialecho.net. Replace se_your_team_api_key with your Team API Key.
curl note: for GET with JSON body, use --data-raw '<json>' and set Content-Type: application/json.
Call this first to confirm team context.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | zh_CN or en (default zh_CN) |
| body | body | No | object | Empty object {} |
cURL
curl --request GET 'https://api.socialecho.net/v1/team' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data-raw '{}'
Response example
{
"code": 200,
"message": "success",
"data": {
"id": 1024,
"code": "TEAM_ABC123",
"title": "SocialEcho QA Team",
"timezone": "Asia/Shanghai"
}
}
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | Response language |
| page | body | No | integer | Page number |
| type | body | No | integer | 1 = authorized account, 2 = competitor |
cURL
curl --request GET 'https://api.socialecho.net/v1/account' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data-raw '{"page":1,"type":1}'
Response example
{
"code": 200,
"message": "success",
"data": {
"page": 1,
"per_page": 10,
"total": 2,
"list": [
{
"id": 163751,
"title": "esprit.vert.medic",
"app": "Instagram",
"type": 1,
"status": "normal",
"account": "@esprit.vert.medic",
"authorization_at": "2026-03-30 09:34:44"
}
]
}
}
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | Response language |
| page | body | No | integer | Page number |
| account_ids | body | No | integer[] | Account ID array |
cURL
curl --request GET 'https://api.socialecho.net/v1/article' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data-raw '{"page":1,"account_ids":[163956,163955,28]}'
Response example
{
"code": 200,
"message": "success",
"data": {
"page": 1,
"per_page": 10,
"total": 1,
"list": [
{
"id": 987654,
"uuid": "tE-9LwdHfNk",
"app": "YouTube",
"account_id": 163751,
"content": "Example article content",
"created_at": "2026-03-24 10:05:01",
"url": "https://www.youtube.com/watch?v=tE-9LwdHfNk",
"reports": {
"exposure": 1021,
"like": 40,
"comment": 14,
"share": 0
}
}
]
}
}
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | Response language |
| start_date | body | Yes | string | YYYY-MM-DD |
| end_date | body | Yes | string | YYYY-MM-DD |
| time_type | body | Yes | integer | 1 = new posts in range, 2 = all historical posts in range |
| account_ids | body | No | integer[] | Account IDs |
| group | body | No | string | Empty = totals; day / app / account for grouping |
cURL
curl --request GET 'https://api.socialecho.net/v1/report' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data-raw '{"start_date":"2026-01-01","end_date":"2026-03-24","time_type":1,"group":"day","account_ids":[163956,163955,28]}'
Response example (totals)
{
"code": 200,
"message": "success",
"data": {
"scope": {
"start_date": "2026-01-01",
"end_date": "2026-03-24",
"time_type": 1,
"group": ""
},
"totals": {
"exposure": 120345,
"like": 4512,
"comment": 893,
"share": 326
}
}
}
Returns upload URL information for OSS (exact payload is server-defined). Typical flow: get upload URL → upload file → use returned file URL in attachments for publish.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | Response language |
| content_type | body | Yes | string | MIME type of the file to upload. Must be one of the enum values below and match the file you will upload. |
content_type enum
image/jpeg, image/jpg, image/png, image/gif, image/webp, image/bmpvideo/mp4, video/avi, video/mov, video/wmv, video/flv, video/webm, video/mkv, video/3gp, video/quicktimecURL
curl --request GET 'https://api.socialecho.net/v1/upload/url' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data-raw '{"content_type":"image/png"}'
Used before publishing to Reddit to pick community context.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | Response language |
| account_id | body | Yes | integer | Social account id |
cURL
curl --request GET 'https://api.socialecho.net/v1/reddit/communities' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data-raw '{"account_id":163751}'
Used before publishing to Pinterest to pick a board.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | Response language |
| account_id | body | Yes | integer | Social account id |
cURL
curl --request GET 'https://api.socialecho.net/v1/pinterest/boards' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data-raw '{"account_id":163751}'
Cross-platform publishing. Fields type, extra, and attachments are platform-specific; validate in the product UI and integration tests. The following summarizes core OpenAPI fields.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
| X-Lang | header | No | string | Response language |
| account_id | body | Yes | integer | Target social account |
| type | body | Yes | string | Publish type (per platform, e.g. Facebook post, YouTube video) |
| status | body | Yes | integer | 0 = draft, 1 = publish |
| scheduled_at | body | No | string | Schedule time; if status=1 and omitted, publish immediately |
| comment | body | Yes | string[] | Comments array (may be empty) |
| content | body | No | string | Body text |
| extra | body | Yes | object | Platform extras: title, board/community id, link, TikTok draft flag, Reddit flair, etc. |
| attachments | body | Yes | object[] | Attachments; each item must include an uploaded file URL: { "url": "https://..." } |
Examples of type (from OpenAPI)
Facebook: reels / post / stories; YouTube: shorts / video; Instagram: reels / post / stories; X: short_post / long_post; LinkedIn: post; TikTok: video / photo; Pinterest: post; Reddit: text / link / media.
cURL (use a real JSON file)
curl --request POST 'https://api.socialecho.net/v1/publish/article' \
--header 'Authorization: Bearer se_your_team_api_key' \
--header 'Content-Type: application/json' \
--header 'X-Lang: zh_CN' \
--data @publish-payload.json
Fill extra for the target platform (e.g. Pinterest category_id, Reddit flair). A starter example exists as publish-payload.example.json in the skills package repository.
account_id into posts, reports, Reddit, Pinterest, etc.page until the last page using total / per_page.code, and key request parameters for troubleshooting.**GET /v1/upload/url** then assemble attachments.Q1: HTTP 200 but business failure?
A: Trust JSON **code is 200 or 0**, not HTTP alone.
Q2: How to pass account_ids in JSON?
A: Use an integer array (e.g. [163956,163955,28]). If you still use CSV query parameters from an old integration, migrate to the OpenAPI body shape.
Q3: How to avoid 429?
A: Stay under 120 req/min per key; add throttling and exponential backoff.