/api/v4/social/bulk-postsBeiträge in großen Mengen erstellen
Validiert bis zu 500 Social-Media-Beiträge pro Anfrage, stellt sie in die Warteschlange und liefert einen Job zum Abfragen der Ergebnisse pro Zeile.
Parameter
Body
Ein als erforderlich markiertes verschachteltes Feld gilt nur, wenn Sie das übergeordnete Feld senden. Ist das übergeordnete Feld optional und lassen Sie es weg, gelten seine erforderlichen Unterfelder nicht.
| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| input | object | erforderlich | Wrapper object. The entire request body must be nested under `input`. |
| input.posts | array of objects | erforderlich | The rows to create, 1 to 500 of them. Each row is the same object POST /social/posts takes as its `input`; the per-row fields are listed below. |
| input.name | string | optional | Optional label for the job itself, to identify it in your own logs. Not shown to any audience. |
| input.posts[].socialProfileId | string | erforderlich | UUID of the brand publishing this row. Rows may target different brands in one request. |
| input.posts[].name | string | erforderlich | Internal name for the post. |
| input.posts[].platforms | array of strings | erforderlich | Platforms for this row: `FACEBOOK`, `INSTAGRAM`, `TWITTER` (X), `LINKEDIN`, `PINTEREST`. Each must already have a connection on that row's brand. |
| input.posts[].content | string | erforderlich | The post body. |
| input.posts[].action | string | erforderlich | `DRAFT`, `SCHEDULE` (requires a schedule) or `PUBLISH`. |
| input.posts[].mediaUrls | array of strings | optional | Public https image URLs. Required when the row targets Instagram or Pinterest. |
| input.posts[].videoUrls | array of strings | optional | Public https video URLs. |
| input.posts[].link | string | optional | Link to attach where the platform supports one. |
| input.posts[].scheduledAt | string | optional | ISO-8601 publish instant with an offset. Alternative to `scheduleDate` + `scheduleTime`, never both. |
| input.posts[].scheduleDate | string | optional | `YYYY-MM-DD`, interpreted in that row's brand timezone. Send with `scheduleTime`. |
| input.posts[].scheduleTime | string | optional | `HH:MM`, interpreted in that row's brand timezone. Send with `scheduleDate`. |
| input.posts[].connectedChannelIds | array of strings | optional | Restrict this row to specific connections by ID. |
| input.posts[].clientReference | string | optional | Your own identifier for this row, echoed back on the matching job result. The most reliable way to reconcile a batch against your own records. |
Beispielanfrage
Body zum direkten Einfügen. Ersetzen Sie Platzhalter-IDs und -Werte durch Ihre eigenen.
{ "input": { "name": "Autumn campaign load", "posts": [ { "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "name": "Autumn week 1", "platforms": ["INSTAGRAM", "FACEBOOK"], "content": "Week one of the autumn collection: the Fairfield oak sideboard, finished by hand in the workshop.", "mediaUrls": ["https://cdn.example.com/social/autumn-w1.jpg"], "action": "SCHEDULE", "scheduleDate": "2026-10-02", "scheduleTime": "09:30", "clientReference": "campaign-4471-slot-01" }, { "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "name": "Autumn week 2", "platforms": ["INSTAGRAM", "FACEBOOK", "LINKEDIN"], "content": "Week two: the Halcyon armchair. Sixty hours of work, one chair.", "mediaUrls": ["https://cdn.example.com/social/autumn-w2.jpg"], "action": "SCHEDULE", "scheduleDate": "2026-10-09", "scheduleTime": "09:30", "clientReference": "campaign-4471-slot-02" }, { "socialProfileId": "a90f7c22-5db1-4e83-9f40-2b7c6a1e5d33", "name": "Eastside autumn teaser", "platforms": ["INSTAGRAM"], "content": "Something solid is arriving next week. Stay tuned.", "mediaUrls": ["https://cdn.example.com/social/eastside-teaser.jpg"], "action": "SCHEDULE", "scheduledAt": "2026-10-01T08:00:00-04:00", "clientReference": "campaign-4471-slot-03" } ] }}Antworten
200The whole batch validated. A job was queued, poll GET /social/bulk-posts/{bulkJobId} for per-row results.
{ "data": { "createBulkSocialMediaPosts": { "success": true, "error": [], "job": { "id": "9b3f18d0-7a26-4c51-8e94-1f0d5c6b7a82", "status": "QUEUED", "totalCount": 3, "processedCount": 0, "successCount": 0, "failureCount": 0, "createdAt": "2026-09-28T14:04:52Z", "updatedAt": "2026-09-28T14:04:52Z", "results": [] } } }}200At least one row failed validation, so **nothing was created**. `success` is `false`, no job is returned, and each rejected row is reported with its 0-based `index`.
{ "data": { "createBulkSocialMediaPosts": { "success": false, "error": [ { "message": "SY95050: Bulk validation failed, no posts were created", "code": "SY95050", "contextInfo": null } ], "job": { "id": null, "status": "FAILED", "totalCount": 3, "processedCount": 0, "successCount": 0, "failureCount": 2, "createdAt": "2026-09-28T14:04:52Z", "updatedAt": "2026-09-28T14:04:52Z", "results": [ { "index": 1, "clientReference": "campaign-4471-slot-02", "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "platforms": ["INSTAGRAM", "FACEBOOK", "LINKEDIN"], "status": "INVALID", "socialPostId": null, "postStatus": null, "errors": [ { "message": "SY95045: No connected channel for LINKEDIN on this brand", "code": "SY95045", "contextInfo": [{ "key": "platform", "value": "LINKEDIN" }] } ] }, { "index": 2, "clientReference": "campaign-4471-slot-03", "socialProfileId": "a90f7c22-5db1-4e83-9f40-2b7c6a1e5d33", "platforms": ["INSTAGRAM"], "status": "INVALID", "socialPostId": null, "postStatus": null, "errors": [ { "message": "SY95046: scheduledAt must carry a UTC offset", "code": "SY95046", "contextInfo": null } ] } ] } } }}401Unauthenticated, missing or invalid API key.
Erstellt viele Social-Media-Beiträge in einer Anfrage. Die Zeilen werden in der Anfrage-Payload übermittelt — es gibt keinen Datei-Upload und keine CSV-Datei, sondern nur ein Array derselben Objekte, die POST /social/posts einzeln entgegennimmt. Bis zu 500 Zeilen pro Anfrage.
Anwendungsfall: Inhalte für ein Quartal mit einem einzigen Aufruf laden. Ihr Planungstool enthält den gesamten Inhaltskalender des Kunden. Erstellen Sie eine Zeile pro geplantem Termin, kennzeichnen Sie jede mit Ihrem eigenen clientReference und senden Sie alle zusammen. Der Stapel ist entweder als Ganzes erfolgreich oder gibt genau an, welche Zeilen Sie korrigieren müssen. Speichern Sie die zurückgegebene job.id und fragen Sie GET /social/bulk-posts/{bulkJobId} wiederholt ab, bis status einen Endzustand erreicht hat, und ordnen Sie dann jedes Ergebnis anhand seiner clientReference zu.
Der gesamte Stapel wird vorab validiert
Die Validierung wird für jede Zeile durchgeführt, bevor etwas erstellt wird, und der Stapel wird in dieser Phase atomar verarbeitet:
- Wenn auch nur eine Zeile ungültig ist, wird nichts erstellt.
successistfalse,SY95050wird inerrorzurückgegeben, und jede fehlerhafte Zeile erscheint injob.results[]mit ihrem bei 0 beginnendenindex, ihrerclientReferenceund dem Grund inerrors[]. Korrigieren Sie diese Zeilen und senden Sie den gesamten Stapel erneut. - Wenn jede Zeile gültig ist, wird ein Job in die Warteschlange gestellt,
successisttrue, und Sie erhalten einejob.id. Einzelne Zeilen können dennoch später fehlschlagen, wenn die Plattform sie zum Zeitpunkt der Veröffentlichung ablehnt; dies wird im Job angezeigt, nicht hier.
Verwenden Sie für die Zuordnung nach Möglichkeit clientReference und andernfalls index — die Zeilen selbst werden nicht zurückgegeben, daher sind diese beiden Felder die einzige Verbindung zu Ihren eigenen Daten.
Hinweise.
- Der Anfrage-Body muss in ein
input-Objekt eingebettet sein, wobei sich die Zeilen ininput.postsbefinden. - Prüfen Sie
success, nicht den HTTP-Status. Eine Ablehnung des gesamten Stapels ist einHTTP 200mitsuccess: falseundSY95050inerror. - Maximal 500 Zeilen pro Anfrage. Ein größeres Array wird mit
SY95048vollständig abgelehnt und es wird nichts erstellt; teilen Sie es auf und senden Sie mehrere Stapel. - Die Marke wird in jeder Zeile durch
socialProfileIdangegeben.brandIdist ausschließlich ein URL-Pfad-Token, und diese Route hat überhaupt kein Pfad-Token. - Zeilen können sich auf verschiedene Marken beziehen. Die
platformsjeder Zeile werden anhand der Marke dieser Zeile geprüft. Wenn eine Plattform also mit einer Marke verbunden ist, mit einer anderen jedoch nicht, schlagen nur die Zeilen fehl, die diese Verbindung benötigen. - Für jede Zeile gelten dieselben Planungsregeln wie für einen einzelnen Beitrag:
scheduledAtoderscheduleDate+scheduleTime, niemals beides, undscheduleDate/scheduleTimewerden in der Zeitzone der Marke der jeweiligen Zeile interpretiert. Die beiden Formen können in verschiedenen Zeilen desselben Stapels verwendet werden. - Ratenlimits gelten für die Anfrage, nicht für die Zeilen: Ein Stapel mit 500 Zeilen verbraucht eine Anfrage Ihres Kontingents. Siehe Ratenlimits.
Schreiboperation: nicht im Live-Konto ausgeführt. Die gezeigte Anfrage und Antwort wurden aus dem API-Schema erstellt; bei der Ausführung wird in echten Social-Media-Konten veröffentlicht.
curl -X POST 'https://listingsapi.com/api/v4/social/bulk-posts' \ -H "Authorization: API $LISTINGSAPI_KEY" \ -H 'Content-Type: application/json' \ -d '{ "input": { "name": "Autumn campaign load", "posts": [ { "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "name": "Autumn week 1", "platforms": [ "INSTAGRAM", "FACEBOOK" ], "content": "Week one of the autumn collection: the Fairfield oak sideboard, finished by hand in the workshop.", "mediaUrls": [ "https://cdn.example.com/social/autumn-w1.jpg" ], "action": "SCHEDULE", "scheduleDate": "2026-10-02", "scheduleTime": "09:30", "clientReference": "campaign-4471-slot-01" }, { "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "name": "Autumn week 2", "platforms": [ "INSTAGRAM", "FACEBOOK", "LINKEDIN" ], "content": "Week two: the Halcyon armchair. Sixty hours of work, one chair.", "mediaUrls": [ "https://cdn.example.com/social/autumn-w2.jpg" ], "action": "SCHEDULE", "scheduleDate": "2026-10-09", "scheduleTime": "09:30", "clientReference": "campaign-4471-slot-02" }, { "socialProfileId": "a90f7c22-5db1-4e83-9f40-2b7c6a1e5d33", "name": "Eastside autumn teaser", "platforms": [ "INSTAGRAM" ], "content": "Something solid is arriving next week. Stay tuned.", "mediaUrls": [ "https://cdn.example.com/social/eastside-teaser.jpg" ], "action": "SCHEDULE", "scheduledAt": "2026-10-01T08:00:00-04:00", "clientReference": "campaign-4471-slot-03" } ] } }'