Social

Alle Social-Endpunkte: Marken, gehostete Verbindungslinks, Einzel- und Massenveröffentlichung, Planung, Statistiken und das übergreifende Verbindungslimit.

Die Social API veröffentlicht auf Facebook, Instagram, X, LinkedIn und Pinterest. Zwei Objekte bilden das gesamte Modell ab. Eine Marke ist die Identität, unter der Sie veröffentlichen: ein Name, eine Zeitzone und die damit verknüpften Social-Media-Konten. Eine Verbindung ist ein autorisiertes Social-Media-Konto einer Marke auf einer Plattform. Marken sind in einem API-Tarif unbegrenzt verfügbar und kostenlos. Der Tarif erfasst die Anzahl der Verbindungen, daher müssen Sie bei der Konzeption das Verbindungslimit berücksichtigen.

Ein Konto kann nicht von Ihrem Server aus verbunden werden. Der Endnutzer muss die Verbindung auf der Plattform autorisieren, daher fordern Sie einen gehosteten Link an und leiten ihn dorthin weiter. Die Veröffentlichung erfolgt asynchron: Jeder Aufruf zum Erstellen kehrt zurück, sobald der Beitrag angenommen wurde, und Sie fragen das Ergebnis für jeden Kanal regelmäßig ab.

Endpunkte im Überblick

MethodePfadFunktionReferenz
POST/social/brandsEine Marke erstellen.Eine Marke erstellen
GET/social/brandsEine Ergebnisseite mit den Marken des Kontos.Marken auflisten
GET/social/brands/{brandId}Eine Marke mit allen Details.Eine Marke abrufen
POST/social/brands/updateFelder einer bestehenden Marke ändern.Eine Marke aktualisieren
POST/social/brands/archiveEine Marke und ihre Verbindungen archivieren.Eine Marke archivieren
POST/social/brands/{brandId}/connections/linkEine gehostete URL zum Verbinden einer Plattform.Einen Verbindungslink abrufen
GET/social/brands/{brandId}/connectionsDie mit einer Marke verbundenen Konten.Die Verbindungen einer Marke auflisten
POST/social/connections/disconnectEine Verbindung entfernen.Eine Verbindung trennen
POST/social/postsEinen Beitrag als Entwurf erstellen, planen oder veröffentlichen.Einen Social-Media-Beitrag erstellen
GET/social/posts/{postId}Ein Beitrag mit dem Veröffentlichungsstatus für jeden Kanal.Einen Social-Media-Beitrag abrufen
GET/social/brands/{brandId}/postsEine Ergebnisseite mit den Beiträgen einer Marke.Die Beiträge einer Marke auflisten
POST/social/posts/cancelEinen noch nicht veröffentlichten Beitrag stornieren.Einen geplanten Beitrag stornieren
GET/social/posts/{postId}/insightsInteraktionszahlen und Kommentare für einen Kanal.Beitragsstatistiken und Kommentare abrufen
POST/social/bulk-postsBis zu 500 Beiträge in einer Anfrage.Beiträge in einem Massenvorgang erstellen
GET/social/bulk-posts/{bulkJobId}Der Status eines Massenauftrags und die Ergebnisse pro Zeile.Einen Massenauftrag für Beiträge abrufen
GET/social/limitsDas Verbindungslimit und dessen aktuelle Auslastung.Limits und Nutzung des Social-Tarifs abrufen

Werte, die Sie überall verwenden

FeldZulässige Werte
platforms[] und channelFACEBOOK, INSTAGRAM, TWITTER (X), LINKEDIN, PINTEREST
actionDRAFT, SCHEDULE, PUBLISH

Plattformwerte sind Enum-Namen in Großbuchstaben. Das Senden von "instagram" wird abgelehnt. TWITTER steht für X; der Enum-Name wurde bei der Umbenennung des Produkts nicht geändert.

Eine Marke erstellen

POST /social/brands

profileName und timezone sind erforderlich. Die Zeitzone ist ein Objekt, und tzCode ist das entscheidende Feld: Es enthält den IANA-Bezeichner, anhand dessen sämtliche Werte für scheduleDate und scheduleTime in den Beiträgen dieser Marke interpretiert werden. Die anderen drei Schlüssel dienen als Anzeigebezeichnungen.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "profileName": "Jenny Home",      "timezone": {        "label": "(GMT-05:00) Eastern Time",        "tzCode": "America/New_York",        "name": "Eastern Standard Time",        "utc": "-05:00"      },      "categories": ["Furniture Store"],      "siteUrl": "https://jennyhome.example"    }  }'

Bewahren Sie die zurückgegebene Marken-ID auf. Sie wird bei jedem anderen Marken-Endpunkt als Pfadparameter brandId und beim Veröffentlichen im Body-Feld socialProfileId verwendet.

Marken auflisten und abrufen

GET /social/brands gibt eine Ergebnisseite mit Marken zurück. GET /social/brands/{brandId} gibt eine Marke mit allen Details zurück.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/brands?page=1&size=25"

Eine ID, für die SY95043 zurückgegeben wird, gehört entweder nicht zu diesem Konto oder verweist auf eine bereits archivierte Marke.

Eine Marke aktualisieren

POST /social/brands/update

Die Marken-ID wird als input.profileId im Body übergeben, nicht im Pfad. Senden Sie nur die Felder, die Sie ändern möchten; alle ausgelassenen Felder behalten ihren aktuellen Wert.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/update \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"profileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "bio": "Handmade furniture for real homes."}}'

Eine Marke archivieren

POST /social/brands/archive

Eine Marke muss seit 90 Tagen bestehen, bevor sie archiviert werden kann. Vor Ablauf dieser Frist wird der Aufruf mit SY95051 abgelehnt und nichts geändert. Sobald die Marke alt genug ist, wird die Archivierung sofort wirksam und archiviert gleichzeitig alle zugehörigen Verbindungen.

Über diese Verbindungen wird sofort nichts mehr veröffentlicht, ihre Plätze werden jedoch bis zum Ende des Abrechnungszeitraums weiterhin angerechnet, genau wie beim manuellen Trennen einer Verbindung. Durch die Archivierung lässt sich heute keine Kapazität freigeben.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/archive \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902"}}'

POST /social/brands/{brandId}/connections/link

Dies ist die einzige Möglichkeit, eine Verbindung hinzuzufügen. Die Antwort enthält eine gehostete url, die expiresIn Sekunden lang gültig ist. Leiten Sie den Endnutzer dorthin weiter; er erteilt auf der Plattform seine Autorisierung und wird anschließend zu Ihrer redirectUrl zurückgeleitet, wobei das Ergebnis im Query-String übergeben wird. Übergeben Sie errorUrl, um Abbrüche von erfolgreichen Vorgängen zu unterscheiden, und state, um Ihren eigenen Korrelationswert durch den gesamten Ablauf mitzuführen.

Beachten Sie, dass dieser Body flach aufgebaut ist und keinen input-Wrapper enthält.

Shell
curl -X POST https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/connections/link \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "channel": "INSTAGRAM",    "redirectUrl": "https://app.example.com/social/connected",    "errorUrl": "https://app.example.com/social/failed"  }'
JSON
{  "data": {    "connectSocialAccount": {      "status": "success",      "url": "https://social.listingsapi.com/connect/start?token=bfac8e06-8d72-4810-9c50-ae7ee12a7b52",      "expiresIn": 900    }  }}

Prüfen Sie status vor der Weiterleitung. Eine failed-Antwort gibt keine url zurück und enthält den Grund in title, meist das Verbindungslimit (SY95042) oder eine Plattform, die dem Konto nicht zur Verfügung steht (SY95044).

Die Verbindungen einer Marke auflisten

GET /social/brands/{brandId}/connections

Gibt die mit der Marke verbundenen Konten zurück, jeweils mit der id, die Sie benötigen, um über eine bestimmte Verbindung zu veröffentlichen oder diese zu trennen.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/connections

Eine Verbindung trennen

POST /social/connections/disconnect

Verwendet die id der Verbindung aus der obigen Liste. Über das Konto wird sofort nichts mehr veröffentlicht, der belegte Platz wird jedoch erst am Ende des Abrechnungszeitraums wieder freigegeben. Wenn Sie dasselbe Konto innerhalb dieses Zeitraums erneut mit derselben Marke verbinden, wird dieser Platz wiederverwendet und es entstehen keine Kosten; die Verbindung mit einer anderen Marke belegt einen zweiten Platz.

Shell
curl -X POST https://listingsapi.com/api/v4/social/connections/disconnect \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialProfileConnectedChannelId": "b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7"}}'

Einen Beitrag veröffentlichen

POST /social/posts

Ein Aufruf veröffentlicht denselben Inhalt auf jeder Plattform in platforms. Für jede dieser Plattformen muss bereits eine Verbindung mit der Marke bestehen, andernfalls gibt der Aufruf SY95045 zurück. Instagram und Pinterest erfordern mindestens einen Eintrag in mediaUrls.

Planen Sie einen Beitrag auf eine von zwei Arten, niemals auf beide zugleich. scheduledAt ist ein ISO-8601-Zeitstempel mit einem Offset. scheduleDate und scheduleTime werden zusammen gesendet und in der Zeitzone der Marke interpretiert. Wenn Sie beide Varianten oder einen Zeitpunkt in der Vergangenheit senden, wird SY95046 zurückgegeben.

Shell
curl -X POST https://listingsapi.com/api/v4/social/posts \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",      "name": "Autumn collection launch",      "platforms": ["INSTAGRAM", "FACEBOOK"],      "content": "Our autumn collection lands today.",      "mediaUrls": ["https://cdn.example.com/social/autumn-collection.jpg"],      "action": "SCHEDULE",      "scheduleDate": "2026-10-02",      "scheduleTime": "09:30",      "clientReference": "campaign-4471-slot-01"    }  }'

Setzen Sie clientReference auf Ihre eigene Kennung. Sie wird gespeichert und zurückgegeben, sodass Sie einen Beitrag mit Ihren Datensätzen abgleichen können, ohne die UUID aufzubewahren.

Einen einzelnen Beitrag abrufen

GET /social/posts/{postId}

So erfahren Sie, ob die Veröffentlichung erfolgreich war. Der eigene status des Beitrags ist eine Zusammenfassung; das tatsächliche Ergebnis steht für jeden Kanal in connectedChannels, wobei jeder Eintrag seinen eigenen status enthält, eine liveLink, sobald die Plattform den Beitrag annimmt, sowie reason oder error, wenn sie ihn nicht annimmt.

JSON
{  "connectedChannels": [    {      "platform": "INSTAGRAM",      "status": "SUCCESS",      "liveLink": "https://www.instagram.com/p/CxYz1234abc/",      "error": null    }  ]}

Fragen Sie diesen Endpunkt nach einer PUBLISH wiederholt ab. Bei einem Kanal kann die Veröffentlichung fehlschlagen, während sie bei den anderen erfolgreich ist. Prüfen Sie daher jeden Eintrag statt nur den übergeordneten status.

Beiträge einer Marke auflisten

GET /social/brands/{brandId}/posts

Eine Seite mit Beiträgen der Marke und Filtern zur Eingrenzung nach Status. Verwenden Sie sie für einen gesammelten Abgleich, statt IDs einzeln abzufragen.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/brands/6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902/posts?page=1&size=25"

Einen geplanten Beitrag stornieren

POST /social/posts/cancel

Storniert einen Beitrag, der noch nicht veröffentlicht wurde. Ein Beitrag, der bereits auf einer Plattform veröffentlicht ist, kann über diesen Endpunkt nicht zurückgezogen werden.

Shell
curl -X POST https://listingsapi.com/api/v4/social/posts/cancel \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{"input": {"socialPostId": "a3f81c62-9d4e-4a17-b5c0-2e7f6d8a9b10"}}'

Statistiken und Kommentare abrufen

GET /social/posts/{postId}/insights

Interaktionszahlen und Kommentare für einen Beitrag auf einem Kanal. Der Kanal ist erforderlich, da ein auf drei Plattformen veröffentlichter Beitrag drei separate Zahlensätze hat.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  "https://listingsapi.com/api/v4/social/posts/a3f81c62-9d4e-4a17-b5c0-2e7f6d8a9b10/insights?socialConnectedChannelId=b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7"

Beiträge gesammelt erstellen

POST /social/bulk-posts

Akzeptiert 1 bis 500 Zeilen in input.posts. Jede Zeile ist dasselbe Objekt, das POST /social/posts als input akzeptiert, und die Zeilen können innerhalb derselben Anfrage für unterschiedliche Marken bestimmt sein.

Der gesamte Stapel wird validiert, bevor etwas erstellt wird. Wenn eine Zeile die Validierung nicht besteht, erhalten Sie SY95050 mit Fehlern pro Zeile, und nichts wird in die Warteschlange gestellt. Korrigieren Sie daher die Fehler und senden Sie den Stapel erneut. Bei mehr als 500 Zeilen wird SY95048 zurückgegeben, ebenfalls ohne etwas zu erstellen. Ein gültiger Stapel liefert einen Auftrag zurück, dessen Status Sie abfragen können.

Shell
curl -X POST https://listingsapi.com/api/v4/social/bulk-posts \  -H "Authorization: API $LISTINGSAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "input": {      "name": "October launch batch",      "posts": [        {          "socialProfileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902",          "name": "Launch day",          "platforms": ["FACEBOOK"],          "content": "Doors open at nine.",          "action": "SCHEDULE",          "scheduleDate": "2026-10-02",          "scheduleTime": "09:00"        }      ]    }  }'

Eine Sammelanfrage zählt als eine Anfrage für Ihr Anfragelimit und ist daher der effiziente Weg für große Stapel.

Einen Sammelauftrag abfragen

GET /social/bulk-posts/{bulkJobId}

Gibt den Status des Auftrags mit Ergebnissen pro Zeile zurück, einschließlich der für jede Zeile erstellten Beitrags-ID sowie aller Zeilen, die nach dem Einreihen in die Warteschlange fehlgeschlagen sind. Aufträge werden nicht unbegrenzt aufbewahrt; bei einer ID, deren Aufbewahrungsfrist abgelaufen ist, wird SY95047 zurückgegeben.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/bulk-posts/f47ac10b-58cc-4372-a567-0e02b2c3d479

Limits und Nutzung prüfen

GET /social/limits

Rufen Sie diese Informationen vor dem Erstellen von Verbindungen ab, statt erst nach einem SY95042. Vergleichen Sie usage.connections mit maxConnections: Das ist die abrechenbare Anzahl, bestehend aus den aktuell verbundenen und den zuvor in diesem Zeitraum freigegebenen Verbindungen. usage.connectionsActive gibt an, was aktuell aktiv ist, und usage.connectionsReleased, wie viel Kapazität bei der Verlängerung wieder verfügbar wird.

brands wird als null zurückgegeben, was unbegrenzt bedeutet. Bei einem API-Tarif wird die Anzahl der Marken nicht als Verbrauch erfasst.

Shell
curl -H "Authorization: API $LISTINGSAPI_KEY" \  https://listingsapi.com/api/v4/social/limits

Fehler, die auftreten können

CodeBedeutungMaßnahme
SY90001Für das Konto besteht kein Social-Abonnement.Fügen Sie das Social-Produkt hinzu, bevor Sie diese Endpunkte aufrufen.
SY95042Das Verbindungslimit für diesen Abrechnungszeitraum ist erreicht.Vergleichen Sie usage.connections mit maxConnections. Eine kürzlich getrennte Verbindung hebt diese Beschränkung nicht auf, da der Platz bis zum Ende des Zeitraums belegt bleibt.
SY95043Diese Marke existiert in diesem Konto nicht oder ist archiviert.Lesen Sie die ID erneut unter Marken auflisten aus.
SY95044Die Plattform ist für das Konto nicht aktiviert.Wählen Sie eine für das Konto verfügbare Plattform aus oder wenden Sie sich an den Support.
SY95045Die Marke hat keine Verbindung zu dieser Plattform.Leiten Sie den Benutzer über einen Verbindungslink weiter oder entfernen Sie die Plattform aus platforms.
SY95046Ungültige Zeitplanung oder Zeitzone.Senden Sie entweder scheduledAt oder scheduleDate zusammen mit scheduleTime, niemals beides.
SY95047Dieser Sammelauftrag existiert nicht.Lesen Sie job.id erneut aus der Antwort auf die Sammelerstellung aus.
SY95048Mehr als 500 Zeilen.Teilen Sie den Stapel auf. Es wurde nichts erstellt.
SY95049Ungültige Weiterleitungs-URL.redirectUrl und errorUrl müssen absolute https-URLs sein.
SY95050Die Validierung des Stapels ist fehlgeschlagen.Lesen Sie die Fehler pro Zeile, korrigieren Sie die betroffenen Zeilen und senden Sie den Stapel erneut.
SY95051Die Marke ist jünger als 90 Tage.Warten Sie, bis sie 90 Tage alt ist, und archivieren Sie sie dann.

Die vollständige Liste finden Sie in der Fehlercode-Referenz.

Nächste Schritte

Lesen Sie Tarife und Zusatzoptionen, um zu erfahren, wie das Verbindungslimit, die Pakete mit 5 Verbindungen und die 90-Tage-Archivierungsregel zusammenwirken, sowie Mit Webhooks auf Ereignisse reagieren, um Ereignisse vom Typ social_post.* und social_connection.* zu empfangen, statt regelmäßig Abfragen durchzuführen.

Das Python SDK stellt diese Endpunkte als client.social.brands, client.social.connections, client.social.posts und client.social.bulk bereit; siehe die Social-Ressource. Das Node SDK unterstützt Social noch nicht. Rufen Sie daher die REST-Endpunkte direkt aus Node auf.