Skip to content

Series

A series groups the meetings that belong together, a weekly team sync for example. A token reaches two kinds:

  • the series you own: you made them, and you can change them;
  • the series you joined: someone else’s series that you were invited to. You read their finished meetings, but the series stays its owner’s.

While series are switched off in Lobbe, GET /series/readable answers an empty list, the other series routes and ?seriesId= answer 404, and a meeting sent with seriesId goes to your Personal archive.

With series:read (Series, Read):

Route What it gives
GET /series/readable Your series: the ones you own, then the ones you joined, each group by name
GET /series/{id} One series: its name, its defaults, how it titles meetings, and its finished meetings’ count and newest time
GET /series/{id}/keyterms Its vocabulary. Owner only
Terminal window
curl https://app.lobbe.ai/api/v1/series/readable \
-H "Authorization: Bearer $LOBBE_TOKEN"
{
"schemaVersion": 1,
"items": [
{
"id": "SERIES_ID",
"name": "Product sync",
"role": "owner",
"meetingCount": 6,
"url": "https://app.lobbe.ai/series/SERIES_ID",
"meetingsUrl": "https://app.lobbe.ai/api/v1/recordings/ready?seriesId=SERIES_ID"
}
]
}
  • role in the list, and access in GET /series/{id}, say owner or member.
  • meetingCount is how many finished meetings of the series you can read now: exactly the ones its meetingsUrl lists. The app counts every meeting of the series, finished or not, so its number can be higher.
  • What a token never sees of a series: its members, its invite and its email list. The vocabulary comes only from GET /series/{id}/keyterms, and that one never includes your account’s own vocabulary, which is account:read’s.
  • An unknown series, someone else’s, one you were removed from, or one you joined while Lobbe has series members switched off: each answers 404, one answer for all.

The meetings themselves are read with recordings:read, not series:read. Add seriesId to the list of finished meetings, GET /recordings/ready, which is what meetingsUrl already does:

Terminal window
curl "https://app.lobbe.ai/api/v1/recordings/ready?seriesId=SERIES_ID" \
-H "Authorization: Bearer $LOBBE_TOKEN"
  • A series you joined works too. Its meetings’ bundles say recording.access: "member".
  • Without seriesId, the list has your own meetings only, never the meetings of a series you joined. So a script that copies “new meetings” doesn’t start copying a colleague’s meetings by itself.
  • A series you can’t read answers 404, never an empty page.
  • Search takes the same seriesId.

With series:write (Series, Create and edit):

Terminal window
curl https://app.lobbe.ai/api/v1/series \
-H "Authorization: Bearer $LOBBE_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "Product sync" }'

POST /series answers 201 with the new series, in the same shape as GET /series/{id}. Only name is required:

Field Default What it is
name — The series’ name
defaultKind MEETING The kind the app suggests for a meeting filed in the series
defaultOutputLanguage MATCH The Lobbe language the app suggests for it
titleStyle SESSION SESSION titles each meeting with the series’ name and its date, its own title beneath; TOPIC keeps each meeting’s own title
dateCalendar AUTO The calendar of that date: AUTO follows the Lobbe’s language, or JALALI, or GREGORIAN

defaultKind and defaultOutputLanguage are the app’s starting values. A meeting you send with a token doesn’t read them: send kind and outputLanguage with it.

  • A name is one line. Runs of whitespace, line breaks and tabs included, become one space, and the ends are trimmed. Then it must be 1 to 60 characters. Any other control character answers 400 VALIDATION.
  • Names are unique per account, ignoring capitals. A name one of your series already has answers 409 SERIES_NAME_TAKEN.
  • An account can own up to 50 series. One more answers 409 SERIES_LIMIT.
  • PATCH /series/{id} takes the same fields, at least one. A field you leave out keeps its value, and an empty body answers 400 VALIDATION.
  • PUT /series/{id}/keyterms replaces the series’ vocabulary. It takes the whole list, keyterms, and inheritAccountKeyterms, whether your account’s vocabulary applies too (the app’s Also use my vocabulary). Both are required. The list follows the vocabulary rules, the same as the account’s: see Vocabulary.
  • A meeting filed in the series is transcribed with the series’ words first, then, when inheritAccountKeyterms is true, with your account’s, up to 100 terms in all. A meeting that uses vocabulary costs more: see What spends. A meeting keeps the words it was sent with, so a new list changes only later meetings.

PATCH /series/{id} and both vocabulary routes are for the series’ owner. A member’s token gets 404 on them, the same answer as a stranger’s: a series that isn’t yours is a 404, never a 403. GET /series/{id} answers members as well.

A new meeting goes into a series when you send it, with seriesId:

Terminal window
curl https://app.lobbe.ai/api/v1/recordings \
-H "Authorization: Bearer $LOBBE_TOKEN" \
-F "audio=@meeting.m4a;type=audio/mp4" \
-F seriesId=SERIES_ID
  • Only a series you own. A series you joined, or an id Lobbe doesn’t know, is not an error: the meeting goes to your Personal archive, the meetings in no series. To check where it went, read recording.series in its bundle, or seriesId on its events.
  • The series’ vocabulary applies, as above. Send -F useKeyterms=off to transcribe this meeting without any vocabulary, and without its surcharge.
  • A token can’t move a meeting it already sent, into a series, out of one or between two. That is done in the app. A token gets 401 TOKEN_NOT_ACCEPTED on the app’s own routes for it.

What a token can never do with series, deleting one or inviting members among them, is in Tokens and scopes.