Linework Developers
RU
Получить доступ

Руководство · posts:write

Пост с медиафайлами

Загрузите фото, опубликуйте пост с ним, затем отредактируйте или удалите его. Публикация проходит в два шага: сначала медиафайл, затем пост.

Scopes: posts:write (а также stories:write для историй и posts:read для чтения постов).

1. Загрузите медиафайл#

POST /media

Отправьте файл как multipart/form-data в поле с именем file. Ответ содержит mediaId, который используется на следующем шаге.

curl https://api.linework.app/open/v1/media \
  -H "Authorization: Bearer $LINEWORK_API_KEY" \
  -F "file=@sunset.jpg"
import { readFile } from "node:fs/promises";

const form = new FormData();
form.append("file", new Blob([await readFile("sunset.jpg")], { type: "image/jpeg" }), "sunset.jpg");

const res = await fetch("https://api.linework.app/open/v1/media", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.LINEWORK_API_KEY}` },
  body: form, // do not set Content-Type: fetch adds the multipart boundary
});
const { mediaId } = await res.json();
import os, requests

API = "https://api.linework.app/open/v1"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['LINEWORK_API_KEY']}"

with open("sunset.jpg", "rb") as f:
    r = s.post(API + "/media", files={"file": ("sunset.jpg", f, "image/jpeg")}, timeout=120)
r.raise_for_status()
media_id = r.json()["mediaId"]
{ "mediaId": "m_8f2c1a" }

Ограничения на медиафайлы

ТипФорматыМакс. размер
ИзображенияJPEG, PNG, WebP, GIF50 МБ
ВидеоMP4, MOV (QuickTime), WebM500 МБ

Файлы большего размера отклоняются с ошибкой 413 PAYLOAD_TOO_LARGE, файлы других форматов — с ошибкой 400 VALIDATION_ERROR. Загруженные медиафайлы, которые так и не были использованы в посте, через некоторое время могут быть удалены.

2. Опубликуйте пост#

POST /posts
curl https://api.linework.app/open/v1/posts \
  -H "Authorization: Bearer $LINEWORK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "text": "Golden hour on the lake 🌅", "mediaIds": ["m_8f2c1a"] }'
const res = await fetch("https://api.linework.app/open/v1/posts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LINEWORK_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ text: "Golden hour on the lake 🌅", mediaIds: [mediaId] }),
});
const post = await res.json();
console.log(post.id);
r = s.post(API + "/posts", json={"text": "Golden hour on the lake 🌅", "mediaIds": [media_id]}, timeout=30)
r.raise_for_status()
post = r.json()
print(post["id"])

Пост может содержать только текст, только медиафайлы или и то и другое. Каждый пост учитывается в дневной квоте 50 постов на аккаунт (квоты).

3. Редактирование и удаление#

PATCH /posts/{id} DELETE /posts/{id}
# change the text
curl -X PATCH https://api.linework.app/open/v1/posts/1043 \
  -H "Authorization: Bearer $LINEWORK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "text": "Golden hour on Lake Como 🌅" }'

# delete the post
curl -X DELETE https://api.linework.app/open/v1/posts/1043 \
  -H "Authorization: Bearer $LINEWORK_API_KEY"

Редактировать и удалять можно только свои посты. Прочитать пост можно через GET /posts/{id}, получить список — через GET /me/posts (posts:read).

Публикация истории#

POST /stories

Истории используют тот же процесс загрузки: загрузите файл через POST /media, затем создайте историю с полученным mediaId. Scope — stories:write, дневная квота — 20 историй.

curl https://api.linework.app/open/v1/stories \
  -H "Authorization: Bearer $LINEWORK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "mediaId": "m_8f2c1a" }'

Рекомендации#

  • Публикуйте контент, который людям интересно видеть. Повторяющийся или автоматически сгенерированный «наполнитель» считается спамом согласно Условиям использования API.
  • Если POST /posts завершился по тайм-ауту, проверьте GET /me/posts перед повторной попыткой, чтобы избежать дублей.
  • Публикуйте только те медиафайлы, на которые у вас есть права.