/sapi/creative


Use the /sapi/creative endpoint to manage creatives. Creatives are video or image files intended for use as ads, served through VAST/VPAID or SIMID ad tags. They are a specialised type of mediaclip with usetype: "commercial" and include advertising-specific fields such as event trackers and OMID verification settings.

The /sapi/creative endpoint supports the same operations as /sapi/mediaclip, filtered to commercial content only.

Base URL: https://yourcompanyname.bbvms.com/sapi/creative

All requests must be authenticated. See SAPI Authentication for details. All request bodies must use Content-Type: application/json.

1.0 | Creative Object

1.1 | Example Creative Object

Example creative object
{
   "id": "5812043",
   "type": "MediaClip",
   "mediatype": "video",
   "usetype": "commercial",
   "sourcetype": "on_demand",
   "originalfilename": "summer-campaign-30s.mp4",
   "length": 30,
   "title": "Summer Campaign 30s",
   "description": "30-second product ad for the summer campaign",
   "deeplink": "https://www.example.com/summer",
   "gendeeplink": null,
   "copyright": "",
   "author": "Marketing",
   "status": "published",
   "publicationid": "754",
   "clickableEndscreen": "true",
   "shouldReplay": "false",
   "shouldLoop": "false",
   "eventTrackers": [
      {
         "eventType": "start",
         "url": "https://tracking.example.com/pixel?event=start"
      },
      {
         "eventType": "firstQuartile",
         "url": "https://tracking.example.com/pixel?event=q1"
      },
      {
         "eventType": "midpoint",
         "url": "https://tracking.example.com/pixel?event=q2"
      },
      {
         "eventType": "thirdQuartile",
         "url": "https://tracking.example.com/pixel?event=q3"
      },
      {
         "eventType": "complete",
         "url": "https://tracking.example.com/pixel?event=complete"
      }
   ],
   "omidAdVerifications": [],
   "creativeProjectId": null,
   "createddate": "2025-03-10T09:15:00Z",
   "updateddate": "2025-06-01T11:22:45Z",
   "publisheddate": "2025-03-10T09:15:00Z",
   "views": 18450,
   "width": 1920,
   "height": 1080,
   "dar": "16:9",
   "originalWidth": 1920,
   "originalHeight": 1080,
   "createdBy": "support@bluebillywig.com",
   "updatedBy": "support@bluebillywig.com",
   "src": "/yourcompanyname/media/2025/03/10/5812043.mp4",
   "cat": ["summer", "campaign"],
   "thumbnails": [
      {
         "src": "/yourcompanyname/media/2025/03/10/5812043-1710065800000001.jpg",
         "width": "1920",
         "height": "1080",
         "main": true,
         "crops": {
            "landscape": {
               "x": 0,
               "y": 0,
               "width": 1,
               "height": 1,
               "main": true
            }
         }
      }
   ],
   "assets": [
      {
         "mediatype": "MP4_MAIN",
         "id": "1710065800112233",
         "status": "active",
         "src": "/yourcompanyname/media/2025/03/10/asset-5812043-1710065800001234.mp4",
         "length": "30",
         "exactlength": "30000",
         "width": "1280",
         "height": "720",
         "bandwidth": "2000",
         "mimetype": "video/mp4; codecs=\"avc1.4d481f, mp4a.40.2\""
      }
   ],
   "hasJobs": "false",
   "subtitles": [],
   "timelines": null,
   "audiotracks": null
}

1.2 | Attributes

Editorial fields (read/write)

PropertyTypeDescription
titlestringCreative title. Required.
descriptionstringCreative description.
deeplinkstringClick-through URL: the destination page when a viewer clicks the ad.
copyrightstringCopyright notice.
authorstringAuthor or creator of the creative.
statusstringdraft or published. A published creative is publicly available.
originalfilenamestringThe original filename of the uploaded file.
lengthintegerDuration in seconds.
catarrayA list of category tags assigned to the creative.

Advertising fields (read/write)

PropertyTypeDescription
clickableEndscreenboolean string"true" or "false". When "true", the endscreen displayed after playback is clickable and links to the deeplink URL.
shouldReplayboolean string"true" or "false". When "true", the creative replays automatically after it finishes.
shouldLoopboolean string"true" or "false". When "true", the creative loops indefinitely.
eventTrackersarrayA list of third-party tracking URLs fired at specific playback events. Each entry has an eventType and a url. See 1.3 Event Tracker Types below.
omidAdVerificationsarrayA list of Open Measurement (OMID) verification entries. Each entry has a vendor (string), scriptUrl (string), and optional parameters (string).
creativeProjectIdstringThe ID of an interactive project linked to this creative, used for interactive (SIMID) ad experiences.

System fields (read-only)

PropertyTypeDescription
idstringUnique identifier of the creative.
typestringFixed value: MediaClip.
usetypestringFixed value: commercial. Set automatically; do not include in requests.
mediatypestringThe type of media: video or image.
sourcetypestringon_demand or live.
publicationidstringThe ID of the publication this creative belongs to.
createddatestringISO 8601 date and time the creative was created.
updateddatestringISO 8601 date and time the creative was last updated.
publisheddatestringISO 8601 date and time the creative’s status was first set to published.
createdBystringUsername or email address of the user who created the creative.
updatedBystringUsername or email address of the user who last updated the creative.
viewsintegerTotal all-time view count (ad impressions).
widthintegerPixel width of the video.
heightintegerPixel height of the video.
darstringDisplay aspect ratio (e.g. 16:9).
originalWidthintegerPixel width of the original uploaded file.
originalHeightintegerPixel height of the original uploaded file.
srcstringFile URI of the primary source file.
gendeeplinkstringAuto-generated deeplink URL, if configured.
hasJobsbooleantrue if there are active transcoding jobs for this creative.

Related entities (read-only)

PropertyTypeDescription
assetsarrayA list of transcoded renditions. Writable only on creation; manage renditions after creation via the /sapi/mediaasset endpoint.
thumbnailsarrayA list of thumbnail images. Each thumbnail has: src (file URI), main (boolean; true for the selected thumbnail), width and height (in pixels), and optional crops.
subtitlesarrayReferences to subtitle tracks. Manage via the /sapi/subtitle endpoint.
timelinesarrayReferences to linked timeline objects. Manage via the /sapi/timeline endpoint.
audiotracksarrayReferences to linked audiotrack objects. Manage via the /sapi/audiotrack endpoint.

1.3 | Event Tracker Types

The eventTrackers array accepts the following eventType values:

ValueDescription
startFired when the creative starts playing.
clickTrackingFired when the viewer clicks the creative.
firstQuartileFired when 25% of the creative has played.
midpointFired when 50% of the creative has played.
thirdQuartileFired when 75% of the creative has played.
completeFired when the creative finishes playing.
skipFired when the viewer skips the creative.
muteFired when the creative is muted.
unmuteFired when the creative is unmuted.
rewindFired when the creative is rewound.
pauseFired when playback is paused.
resumeFired when playback is resumed after a pause.
fullscreenFired when the player enters fullscreen mode.
exitFullscreenFired when the player exits fullscreen mode.

2.0 | Create/Update

Both creating and updating a creative use a PUT request. The presence or absence of an id in the request body determines whether a new creative is created or an existing one is updated. The usetype is automatically set to commercial; it does not need to be included in the request.

2.1 | Create

PUT /sapi/creative

Omit the id property to create a new creative. The response contains the complete created creative object.

Example request: create a new creative
curl -X PUT "https://yourcompanyname.bbvms.com/sapi/creative" \
  -H "rpctoken: {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "MediaClip",
    "mediatype": "video",
    "sourcetype": "on_demand",
    "originalfilename": "summer-campaign-30s.mp4",
    "title": "Summer Campaign 30s",
    "description": "30-second product ad for the summer campaign",
    "deeplink": "https://www.example.com/summer",
    "status": "published",
    "clickableEndscreen": "true",
    "shouldReplay": "false",
    "shouldLoop": "false"
  }'
Direct AWS S3 Upload

To add a video or image file to a newly created creative: upload the file to the AWS S3 source bucket. Read more about uploading directly to AWS S3.

2.2 | Update

PUT /sapi/creative/{id}

Include the id property to update an existing creative. Only the properties included in the request body are updated. The response contains the complete updated creative object.

Example request: update an existing creative
curl -X PUT "https://yourcompanyname.bbvms.com/sapi/creative/5812043" \
  -H "rpctoken: {api_key}" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "MediaClip",
    "id": "5812043",
    "title": "Summer Campaign 30s: updated",
    "eventTrackers": [
      {
        "eventType": "start",
        "url": "https://tracking.example.com/pixel?event=start&v2=true"
      },
      {
        "eventType": "complete",
        "url": "https://tracking.example.com/pixel?event=complete&v2=true"
      }
    ]
  }'

3.0 | Retrieve List

GET /sapi/creative

Retrieves a list of creatives. By default, the 50 most recently created creatives are returned.

Example request: retrieve a list of creatives
curl -X GET "https://yourcompanyname.bbvms.com/sapi/creative?limit=10&sort=title+asc" \
  -H "rpctoken: {api_key}"

3.1 | Parameters

ParameterTypeDescriptionExample
qstringA query to filter results. See 3.2 Query Syntax below.?q=title:"summer campaign"
sortstringSort field and direction. Default: id desc.?sort=title asc
limitintegerNumber of creatives to return. Default: 50. Maximum: 1000.?limit=100
offsetintegerNumber of results to skip, for pagination.?offset=100

3.2 | Query Syntax

The q parameter uses Solr query syntax. The following patterns are supported:

PatternDescriptionExample
Field matchMatch an exact value in a specific field?q=title:"summer campaign"
Date rangeMatch creatives within a date range (ISO 8601, inclusive)?q=createddate:[2025-01-01T00:00:00Z TO 2025-12-31T23:59:59Z]
Status filterFilter by publication status?q=status:published

3.3 | Response

A successful request returns a 200 OK response with the following envelope:

Example list response
{
   "type": "MediaClipList",
   "numfound": 34,
   "offset": 0,
   "limit": 50,
   "count": 34,
   "items": [
      { /* creative object */ },
      { /* creative object */ }
   ]
}
FieldTypeDescription
typestringFixed value: MediaClipList.
numfoundintegerTotal number of matching creatives across all pages. Use with limit and offset to build pagination.
offsetintegerThe offset used in the current request.
limitintegerThe limit used in the current request.
countintegerThe number of creatives returned in the current response.
itemsarrayThe list of creative objects.

4.0 | Retrieve

GET /sapi/creative/{id}

Retrieves a single creative object.

Example request: retrieve a single creative
curl -X GET "https://yourcompanyname.bbvms.com/sapi/creative/5812043" \
  -H "rpctoken: {api_key}"

A successful request returns a 200 OK response with the full creative object.

5.0 | Delete

DELETE /sapi/creative/{id}

Moves a creative to the trash. To permanently delete the creative, use the purge parameter.

Example request: delete a creative
# Move to trash
curl -X DELETE "https://yourcompanyname.bbvms.com/sapi/creative/5812043" \
  -H "rpctoken: {api_key}"

# Permanently delete
curl -X DELETE "https://yourcompanyname.bbvms.com/sapi/creative/5812043?purge=true" \
  -H "rpctoken: {api_key}"

A successful request returns a 200 OK response.

5.1 | Parameters

ParameterTypeDescriptionExample
purgebooleanPermanently deletes the creative. Without this parameter, the creative is moved to the trash.?purge=true

6.0 | HTTP Status Codes

CodeMeaningWhen it occurs
200 OKSuccessReturned for all successful requests (retrieve, create, update, delete).
400 Bad RequestInvalid requestThe request body is malformed or contains invalid values.
401 UnauthorizedAuthentication failedThe rpctoken is missing or invalid.
403 ForbiddenInsufficient permissionsThe authenticated user does not have permission to perform this action.
404 Not FoundResource not foundNo creative exists with the given ID or query.
409 ConflictValidation errorThe request is valid but violates a business rule (e.g. a required field is missing). The response body includes a violations array with details.
Example error response (409)
{
   "type": "Response",
   "code": 409,
   "error": true,
   "violations": [
      "title is required"
   ]
}

Was this article helpful?

Related Articles

Contact Support
Can't find the answer you're looking for?
Contact Support