Skip to main content

Bring Your Own Content (BYOC) Overview

The Meltwater platform ingests and enriches data from a wide variety of sources, including news and social platforms. With Bring Your Own Content (BYOC), you can also ingest your own first-party content into the platform.

BYOC content is visible only to your company. Once ingested, it is stored in the same data schema as other Meltwater data and enriched with the same metadata (such as sentiment, language, and key phrases). This makes your content searchable and analyzable alongside Meltwater's global media coverage.

The API enables you to upload this content in JSON format, using a schema defined by Meltwater. Once uploaded, the content is indexed and available in the Meltwater application and API for analysis, dashboards, and reporting.

Because BYOC is a push API, ingestion is controlled by you. You decide what to send and when, whether in real-time, scheduled batches, or ad hoc uploads.

Before you start

To run through this tutorial, you will need:

  • Your Meltwater API token
  • Access to the Bring Your Own Content feature, which can be requested from Meltwater Support.

API details to import documents

You can import documents by sending a POST request to the /imports/documents endpoint.

Query Parameters:

  • import_tag (optional): Comma-separated list of string tags to label or group the batch of documents. This can help with tracking and filtering later using monitoring endpoints.
  • company_id (optional): Meltwater company id if running a request on behalf of another company.

Example document import format

{
"documents": [
{
"id": "12345",
"url": "http://example.com",
"timestamp": 1748272125000,
"content": {
"title": "Example Title",
"subtitle": "Example Subtitle",
"text": "Example text content",
"duration": 120
},
"originPlatform": "youtube",
"contentType": "video",
"attachments": [
{
"name": "Attachment Name",
"url": "http://example.com",
"mime": "image/png",
"altText": "Alt text for the attachment",
"type": "image",
"thumbnail": "http://example.com"
}
],
"source": {
"name": "The Meltwater Times",
"url": "http://example.com",
"location": {
"countryCode": "DE",
"locationString": "Berlin, Germany",
"coordinates": {
"lat": 52.52,
"lon": 13.405
}
}
},
"user": {
"name": "John Doe",
"url": "http://example.com",
"imageUrl": "http://example.com/avatar.png",
"gender": "m",
"location": {
"countryCode": "DE",
"locationString": "Berlin, Germany",
"coordinates": {
"lat": 52.52,
"lon": 13.405
}
}
},
"parent": {
"url": "http://example.com",
"title": "Parent Document Title"
},
"metrics": {
"views": 100,
"audience": 50,
"ave": 4.5,
"score": 3.2,
"likes": 50,
"shares": 50,
"comments": 50,
"replies": 50
},
"sentiment": "positive"
}
]
}

Document fields

FieldRequiredNotes
idOptionalAn id that you would like to use to identify the document during future requests (e.g. updates/deletes). If provided, the value must be unique within the batch.
urlRequiredArticle / post url
timestampRequiredEpoch (in milliseconds)
contentOptional
content.titleOptionalTitle of the document
content.subtitleOptionalSubtitle / ingress
content.textOptionalFull text of the article / post
content.durationOptionalRelevant for video/audio content (in seconds)
originPlatformRequiredSee note [1]
contentTypeRequiredSee note [2]
attachmentsOptionalItems are objects with required subfields. Use for attaching additional media objects, like: images, videos, etc.
attachments[].nameOptionalArbitrary name of the attachment
attachments[].urlRequiredUrl of the attachment
attachments[].mimeRequiredMime type
attachments[].altTextOptionalAlternative text / description. Usually for image / video attachments
attachments[].typeRequiredSee note [3]
attachments[].thumbnailOptionalThumbnail URL of the attachment, i.e. image thumbnail for video attachment
sourceRequired
source.nameRequiredSource name. If not applicable set it empty
source.urlRequiredUrl of the source, channel, etc.
source.locationOptional
source.location.countryCodeOptionalISO 3166-1 alpha-2 country code
source.location.locationStringOptionalFree text description of the location
source.location.coordinatesOptionalContains required fields lat and lon
source.location.coordinates.latRequired (if parent exists)Geo latitude (numeric, decimal)
source.location.coordinates.lonRequired (if parent exists)Geo longitude (numeric, decimal)
userOptionalUser / author / presenter / speaker. Name or handle must be present
user.nameRequired if handle not suppliedUser / author / presenter / speaker full name
user.handleRequired if name not suppliedIntended mainly for social
user.urlOptionalUser / author / presenter / speaker profile url
user.imageUrlOptionalUser / author / presenter / speaker profile image url
user.genderOptionalSee note [4]
user.locationOptional
user.location.countryCodeOptionalISO 3166-1 alpha-2 country code
user.location.locationStringOptionalFree text description of the location
user.location.coordinatesOptionalContains required fields lat and lon
user.location.coordinates.latRequired (if parent exists)Geo latitude (numeric, decimal)
user.location.coordinates.lonRequired (if parent exists)Geo longitude (numeric, decimal)
parentOptionalParent entity of this document - parent post, etc.
parent.urlOptionalUrl of the parent post
parent.titleOptionalTitle of the parent post
productOptionalMainly for product reviews
product.nameOptionalProduct name
metricsOptional
metrics.viewsOptionalView / impression count
metrics.audienceOptionalAudience / reach for given source
metrics.aveOptionalAdvertising Value Equivalency
metrics.scoreOptionalMainly for product reviews and voice of customers. Review score.
metrics.likesOptionalLikes count
metrics.sharesOptionalShares count
metrics.commentsOptionalComments count
metrics.repliesOptionalReplies count
sentimentOptionalSentiment of the document. See note [5]
customFieldsOptionalExplore+ custom fields. See note [6]

Notes on fields

[1] originPlatform possible values: youtube, podcasts, facebook, instagram, reddit, sina_weibo, wechat, twitter, linkedin, pinterest, twitch, tiktok, douyin, little_red_book, youku, bilibili, threads, kakaotalk, linevoom, discord, snapchat, bluesky, news_publisher, broadcast, tender_portal, reviews, blogs, forums, social_comments, telegram

[2] contentType possible values: video, comment, repost, reply, quoted, audio, post, online_press, print_press, tender, product_review, voc Note: Values must match platform-specific rules.

[3] attachments[].type possible values: image, audio, video

[4] user.gender possible values: m (male), f (female), n (other)

[5] sentiment possible values: neutral, positive, negative, unknown

[6] For using Explore+ custom fields, see the Explore+ Custom Fields guide.

JSON schema

A schema for validating individual documents is available here: BYOC JSON schema

Sending the documents

Suppose that you save a set of documents as defined above into a file named documents.json.

Then to upload that file with curl you can execute:

curl -X POST \
--url "https://api.meltwater.com/v3/imports/documents" \
--header "Accept: application/json" \
--header "apikey: **********"
--data @documents.json

You can also submit documents on behalf of another Meltwater company you're authorised for. For more information on working with multiple Meltwater companies, see the Multiple Companies guide.

API Limitations

Verification

If all goes well, you will receive a response providing a batch ID and a count of the uploaded documents:

{
"batchId": "3ccd4b7f-5987-45ca-a774-7be330763489",
"count": 20
}

It is possible to track the progress of your batch using Monitoring APIs. Alternatively, you can also check your documents in the Meltwater app.

To find all documents that you have imported via this API, you can query like this:

metaData.provider.type:"byod"

To find the documents using the supplied batchId from the response, you can query like this:

metaData.applicationTags:"byod:batchId={batchId}"

If you supplied your own id field on the documents, you can find them individually like this:

externalId:{id}

We recommend including an id field with every document, as in general it makes it easier to reliably find it later on. Otherwise you may need to search on some other known pieces of information from the documents (e.g. title).

Frequently Asked Questions

For answers to common questions, see the BYOC FAQ.