For the complete documentation index, see llms.txt. This page is also available as Markdown.

Ingestion API

The ingestion API can be used to upload data to Birdie directly. Clients upload data by making an HTTP PUT for each record they want to upload.

The request must include a Birdie API key in an HTTP header in the form:

Authorization: ApiKey {api-key}

To generate an API key, you can reach out to the Birdie team and we will provide you one.

Response status codes

  • 201 Created on success

  • 400 Bad Request if the request body is invalid (response body will be a JSON object with an error message)

  • 401 Unauthorized if the API key is missing or invalid

  • 503 Service Unavailable if too many requests are being made in a short amount of time

JSON formats

Most ingestion endpoints accept JSON payloads.

Audio ingestion is the exception and uses multipart/form-data because it contains both structured metadata and binary recording content.

Schema definitions for JSON payloads are available at: https://api.birdie.ai/ingestion/schemas

Types of uploads

Conversations and Messages

A conversation is an identifier of a discussion between one or more users (e.g., a support ticket or a GitHub issue).

A message is part of a conversation; a conversation is composed of messages.

Conversations and messages must be uploaded together (we suggest uploading the conversation first, then its messages). Conversations don't appear inside Birdie if they don't have an associated conversation message and vice-versa. Birdie calculates a summary for each conversation based on its messages, which is shown in the feed and can be expanded to see individual messages.

Feedbacks

A single feedback record posted by a user (e.g., NPS response or app review). Feedbacks are displayed alongside conversation summaries in the feed.

Audios

An Audio represents a recording file and the metadata required to process it.

Both components must be submitted together in the same request.

Audience: Accounts and Users (optional)

Accounts and users are optional records to further segment feedbacks and conversations. Use account-id and author-id fields inside the kind fields of feedbacks or conversation messages. After uploading feedbacks/conversations, you can upload accounts and users.

Kinds

For conversations, messages, and feedbacks, the schema includes a kind field to distinguish different kinds (e.g., support_ticket, review). Kinds add fields specific to the origin of the data.

Kinds are used to add more fields that are more specific to the origin of the data.

For example, for conversations and messages, the Zendesk Tickets example falls under the support_ticket kind. The app store user review example falls under the review kind.

We have multiple kinds, which can be listed here: https://api.birdie.ai/ingestion/schemas

You will need to analyze your source of data and see which record type (so Conversation vs Feedbacks) and which Kind best fits your data.

The value of the kind field within a feedback, conversation or conversation message is always an object with two fields:

  • name: specifies the kind

  • fields: contains data specific to this kind.

The valid kinds and their schemas are documented at the URL given above.

Other common concepts

  • Path parameters in endpoints are identifiers for records. They should be strings (alpha-numerical suggested) and must be unique for records that co-exist in your Birdie account.

  • Common fields across record types:

    • additional_fields: lets clients upload any fields that don't fit the pre-defined schema (can be mapped to custom fields in Birdie — contact Birdie team for setup).

    • batch_id: optional field to group uploaded records into a batch. Guidelines:

      1. Upload all records with the same batch_id within 24 hours.

      2. Avoid using a different batch_id for each record (this would create too many batches).

Size limitations

The payload / row for any type of event (e.g an entire conversation upload with all its messages, an entire feedback, or an entire account upload) will be serialized into a JSON object by Birdie, which has a size limit of 10MB.

Endpoints

There are five endpoints to upload different types of data.

Conversations endpoint

Use to create or update a conversation. Updates overwrite the entire record (no partial updates).

The messages belonging to the conversation are uploaded separately.

Example 1 - Conversation of kind support_ticket

Example 2 - Conversation of kind issue

Messages endpoint

Use to create or update a message that belongs to a conversation. Updates overwrite the entire record (no partial updates).

The conversation ID must match a conversation uploaded separately. Order of uploads (conversation vs messages) is not important.

Example 1 - Message of kind support_ticket

Example 2 - First message of kind issue by User

Example 3 - Second message of kind issue by another user

Feedbacks endpoint

Use to create or update feedbacks that don't belong to a conversation. Updates overwrite the entire record (no partial updates).

Example 1 - Feedback of kind review

Example 2 - Feedback of kind nps

Audios endpoint

This endpoint is used to upload (create or update) an Audio.

The request must use multipart/form-data and contain:

  • A metadata part containing a JSON payload.

  • A file part containing the audio recording.

    • Supported recording formats depend on the transcription pipeline. In general, any common audio-only format is expected to work, including:

      • WAV

      • MP3

    • If you intend to use a different format, please reach out to the Birdie team so compatibility can be validated during implementation.

    • The API is intended for recordings up to approximately 100 MB.

The multipart request establishes the correlation between the recording and its metadata, and the recording-id uniquely identifies the Audio.

No additional upload, synchronization or correlation step is required from clients.

If the same recording-id is submitted again, the existing record will be updated following the same semantics used by the other ingestion endpoints.

Example request:

Response

A successful request returns:

This response indicates that the Audio Record was accepted for processing.

It does not indicate that transcription has completed.

Validation Errors

The request will be rejected with:

if:

  • The metadata part is missing.

  • The recording part is missing.

  • The metadata payload is an invalid JSON.

  • Required metadata fields are missing.

Accounts endpoint

Use to create or update an account. Updates overwrite the entire record (no partial updates).

Example - Match uploaded NPS Feedback

Users endpoint

Use to create or update a user. Updates overwrite the entire record (no partial updates).

Example - Match uploaded NPS Feedback

Results If you successfully managed to execute the previous requests, you should see the following results in your Birdie Feed.

Last updated