1. Intended Audience
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.
2. Quick Start (3 minutes)
-
Log in to https://app.socialecho.net and create a team.
-
In Team Management, create a Team API Key.
-
Call APIs using Bearer authentication (
Authorization: Bearer se_xxx). -
Call
GET /v1/teamfirst to verify auth and team context, then call other endpoints. -
Use the success criteria in Environment & Authentication below.
3. Environment & Authentication
|
Field |
Description |
|---|---|
|
Base URL |
|
|
Authentication |
Bearer Token (Team API Key) |
|
Header |
|
|
Optional header |
|
|
Rate limit |
120 requests per minute per API key |
3.1 Transport shape (difference from older help examples)
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.
3.2 Recommended success criteria
-
HTTP status code = 200
-
JSON field
**codeis200or0** (follow the live API; older docs only mentioned200) -
Anything else → treat as failure and retry/alert
4. Common Error Handling
|
Case |
Meaning & action |
|---|---|
|
400 Bad Request |
Missing or malformed parameters (check dates and enums first) |
|
401 Unauthorized |
Invalid/expired API key, or wrong |
|
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 |
5. API Endpoints
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.
5.1 Get team information (GET /v1/team)
Call this first to confirm team context.
|
Parameter |
In |
Required |
Type |
Description |
|---|---|---|---|---|
|
X-Lang |
header |
No |
string |
|
|
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" } }
5.2 List social accounts (GET /v1/account)
|
Parameter |
In |
Required |
Type |
Description |
|---|---|---|---|---|
|
X-Lang |
header |
No |
string |
Response language |
|
page |
body |
No |
integer |
Page number |
|
type |
body |
No |
integer |
|
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" } ] } }
5.3 List posts (GET /v1/article)
|
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 } } ] } }
5.4 Report data (GET /v1/report)
|
Parameter |
In |
Required |
Type |
Description |
|---|---|---|---|---|
|
X-Lang |
header |
No |
string |
Response language |
|
start_date |
body |
Yes |
string |
|
|
end_date |
body |
Yes |
string |
|
|
time_type |
body |
Yes |
integer |
|
|
account_ids |
body |
No |
integer[] |
Account IDs |
|
group |
body |
No |
string |
Empty = totals; |
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 } } }
5.5 Get OSS upload URL (GET /v1/upload/url)
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 |
|
body |
body |
No |
object |
Empty object |
cURL
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 '{}'
5.6 List Reddit communities (GET /v1/reddit/communities)
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}'
5.7 List Pinterest boards (GET /v1/pinterest/boards)
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}'
5.8 Publish a post (POST /v1/publish/article)
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 |
|
status |
body |
Yes |
integer |
|
|
scheduled_at |
body |
No |
string |
Schedule time; if |
|
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: |
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.jsonpublish-payload.example.json:{"account_id": 123456,"type": "post","status": 0,"scheduled_at": "","comment": [],"content": "example-content","extra": {"title": "example-title","category_id": "","link": "","draft": false,"flair": {"uuid": "replace-with-reddit-flair-uuid","title": "replace-with-reddit-flair-title"}},"attachments": [{"url": "https://example.com/uploaded-file.jpg"}]}
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.
6. Integration Recommendations
-
Fetch accounts first, then pass
account_idinto posts, reports, Reddit, Pinterest, etc. -
For paginated APIs, loop
pageuntil the last page usingtotal/per_page. -
In workflow tools (n8n, Zapier, Dify), separate auth errors from rate-limit errors.
-
Log request time, endpoint, HTTP status, business
code, and key request parameters for troubleshooting. -
For publishing, prefer
**GET /v1/upload/url**then assembleattachments.
7. FAQ
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.
This local document aligns with the help-center structure and with 默认模块.openapi.json (v1.1.0). If anything disagrees with the live service, trust the server and the latest exported OpenAPI.