Bynder API

REST API for managing digital assets, metaproperties, collections, taxonomies, brand guidelines, and asset workflows in a Bynder portal. Authentication uses OAuth 2.0 with authorization code, client credentials, and refresh token flows.

OpenAPI Specification

bynder-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Bynder API
  version: "1.0"
  description: |
    Bynder is a cloud-based digital asset management (DAM) platform. The
    REST API lets developers manage assets, metaproperties, collections,
    taxonomies, workflows, brand guidelines, analytics, webhooks, and
    automations.

    Authentication uses OAuth 2.0 with authorization code, client
    credentials, and refresh token flows against the customer's portal
    domain. All calls require a Bearer access token in JWT format. The
    base URL is the customer's portal hostname, e.g.
    `https://yourportal.bynder.com`.

    Rate limit: 4500 requests per 5-minute window per IP. Exceeding
    returns HTTP 429.
  contact:
    name: Bynder Developer Portal
    url: https://developers.bynder.com
servers:
  - url: https://{portal}.bynder.com
    description: Customer portal
    variables:
      portal:
        default: yourportal
        description: Customer portal subdomain
security:
  - oauth2: []
tags:
  - name: Authentication
  - name: Account
  - name: Users
  - name: Media
  - name: Collections
  - name: Metaproperties
  - name: Taxonomy
  - name: Tags
  - name: Brands
  - name: Derivatives
  - name: Smartfilters
  - name: Analytics
  - name: Quarantine
  - name: Automation
  - name: Upload
  - name: Orders
  - name: Workflow
  - name: Webhooks
  - name: Trash
  - name: ContentAccess
paths:
  /v6/authentication/oauth2/auth:
    get:
      tags: [Authentication]
      summary: Authorization endpoint (authorization code flow)
      operationId: oauthAuthorize
      parameters:
        - { name: client_id, in: query, required: true, schema: { type: string } }
        - { name: redirect_uri, in: query, required: true, schema: { type: string } }
        - { name: response_type, in: query, required: true, schema: { type: string, enum: [code] } }
        - { name: scope, in: query, schema: { type: string } }
        - { name: state, in: query, schema: { type: string } }
      responses: { "302": { description: Redirect with code } }
  /v6/authentication/oauth2/token/authorization:
    post:
      tags: [Authentication]
      summary: Exchange authorization code for access token
      operationId: oauthTokenAuthorization
      responses: { "200": { description: OAuth token response } }
  /v6/authentication/oauth2/token/client-credentials:
    post:
      tags: [Authentication]
      summary: Get access token via client credentials
      operationId: oauthTokenClientCredentials
      responses: { "200": { description: OAuth token response } }
  /v6/authentication/oauth2/token/refresh:
    post:
      tags: [Authentication]
      summary: Refresh an access token
      operationId: oauthTokenRefresh
      responses: { "200": { description: OAuth token response } }
  /v6/authentication/oauth2/scopes:
    get:
      tags: [Authentication]
      summary: List available OAuth scopes
      operationId: listScopes
      responses: { "200": { description: Scopes list } }

  /api/v4/account:
    get: { tags: [Account], summary: Retrieve account information, operationId: getAccount, responses: { "200": { description: Account } } }
  /api/v4/currentuser:
    get: { tags: [Users], summary: Retrieve current user information, operationId: getCurrentUser, responses: { "200": { description: User } } }
  /api/v4/users:
    get: { tags: [Users], summary: List users, operationId: listUsers, responses: { "200": { description: Users } } }
    post: { tags: [Users], summary: Create user, operationId: createUser, responses: { "201": { description: Created } } }
  /api/v4/users/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Users], summary: Retrieve user, operationId: getUser, responses: { "200": { description: User } } }
    post: { tags: [Users], summary: Modify user, operationId: updateUser, responses: { "200": { description: Updated } } }
    delete: { tags: [Users], summary: Delete user, operationId: deleteUser, responses: { "204": { description: Deleted } } }
  /api/v4/profiles:
    get: { tags: [Users], summary: List security profiles, operationId: listProfiles, responses: { "200": { description: Profiles } } }
  /api/v4/profiles/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Users], summary: Retrieve security profile, operationId: getProfile, responses: { "200": { description: Profile } } }

  /api/v4/media:
    get:
      tags: [Media]
      summary: List assets
      operationId: listAssets
      parameters:
        - { name: limit, in: query, schema: { type: integer } }
        - { name: page, in: query, schema: { type: integer } }
        - { name: keyword, in: query, schema: { type: string } }
        - { name: type, in: query, schema: { type: string, enum: [image, document, audio, video] } }
        - { name: orderBy, in: query, schema: { type: string } }
      responses: { "200": { description: Assets } }
  /api/v4/media/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Media], summary: Retrieve asset, operationId: getAsset, responses: { "200": { description: Asset } } }
    post: { tags: [Media], summary: Modify asset, operationId: updateAsset, responses: { "200": { description: Updated } } }
    delete: { tags: [Media], summary: Delete asset, operationId: deleteAsset, responses: { "204": { description: Deleted } } }
  /api/v4/media/{id}/download:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Media], summary: Retrieve asset download location, operationId: getAssetDownload, responses: { "200": { description: Download URL } } }
  /api/v4/media/{id}/publiclinks:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Media], summary: Get public links for asset, operationId: getAssetPublicLinks, responses: { "200": { description: Public links } } }

  /api/v4/collections:
    get: { tags: [Collections], summary: List collections, operationId: listCollections, responses: { "200": { description: Collections } } }
    post: { tags: [Collections], summary: Create collection, operationId: createCollection, responses: { "201": { description: Created } } }
  /api/v4/collections/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Collections], summary: Retrieve collection, operationId: getCollection, responses: { "200": { description: Collection } } }
    post: { tags: [Collections], summary: Modify collection, operationId: updateCollection, responses: { "200": { description: Updated } } }
    delete: { tags: [Collections], summary: Delete collection, operationId: deleteCollection, responses: { "204": { description: Deleted } } }
  /api/v4/collections/{id}/media:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Collections], summary: Retrieve collection assets, operationId: getCollectionAssets, responses: { "200": { description: Assets } } }
    post: { tags: [Collections], summary: Add assets to collection, operationId: addCollectionAssets, responses: { "200": { description: Added } } }
    delete: { tags: [Collections], summary: Remove assets from collection, operationId: removeCollectionAssets, responses: { "204": { description: Removed } } }
  /api/v4/collections/{id}/share:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    post: { tags: [Collections], summary: Share collection, operationId: shareCollection, responses: { "200": { description: Shared } } }

  /api/v4/metaproperties:
    get: { tags: [Metaproperties], summary: List metaproperties, operationId: listMetaproperties, responses: { "200": { description: Metaproperties } } }
    post: { tags: [Metaproperties], summary: Create metaproperty, operationId: createMetaproperty, responses: { "201": { description: Created } } }
  /api/v4/metaproperties/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Metaproperties], summary: Retrieve metaproperty, operationId: getMetaproperty, responses: { "200": { description: Metaproperty } } }
    post: { tags: [Metaproperties], summary: Modify metaproperty, operationId: updateMetaproperty, responses: { "200": { description: Updated } } }
    delete: { tags: [Metaproperties], summary: Delete metaproperty, operationId: deleteMetaproperty, responses: { "204": { description: Deleted } } }
  /api/v4/metaproperties/{id}/options:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Metaproperties], summary: List options, operationId: listMetapropertyOptions, responses: { "200": { description: Options } } }
    post: { tags: [Metaproperties], summary: Create option, operationId: createMetapropertyOption, responses: { "201": { description: Created } } }

  /api/1/taxonomy/metaproperties:
    get: { tags: [Taxonomy], summary: List metaproperties (paginated), operationId: taxListMetaproperties, responses: { "200": { description: Metaproperties } } }
    post: { tags: [Taxonomy], summary: Create metaproperty, operationId: taxCreateMetaproperty, responses: { "201": { description: Created } } }
  /api/1/taxonomy/metaproperties/{metapropertyid}:
    parameters:
      - { name: metapropertyid, in: path, required: true, schema: { type: string } }
    get: { tags: [Taxonomy], summary: Retrieve metaproperty, operationId: taxGetMetaproperty, responses: { "200": { description: Metaproperty } } }
    patch: { tags: [Taxonomy], summary: Modify metaproperty, operationId: taxUpdateMetaproperty, responses: { "200": { description: Updated } } }
    delete: { tags: [Taxonomy], summary: Delete metaproperty, operationId: taxDeleteMetaproperty, responses: { "204": { description: Deleted } } }

  /api/v4/tags:
    get: { tags: [Tags], summary: List tags, operationId: listTags, responses: { "200": { description: Tags } } }
  /api/v4/tags/{id}/media:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    post: { tags: [Tags], summary: Add tag to assets, operationId: addTagToAssets, responses: { "200": { description: Tagged } } }
    delete: { tags: [Tags], summary: Remove tag from assets, operationId: removeTagFromAssets, responses: { "204": { description: Untagged } } }

  /api/v4/brands:
    get: { tags: [Brands], summary: Retrieve brands, operationId: listBrands, responses: { "200": { description: Brands } } }

  /api/v4/derivatives/presets:
    get: { tags: [Derivatives], summary: List derivative presets, operationId: listDerivativePresets, responses: { "200": { description: Presets } } }
  /api/v4/derivatives/presets/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Derivatives], summary: Retrieve derivative preset, operationId: getDerivativePreset, responses: { "200": { description: Preset } } }

  /api/v4/smartfilters:
    get: { tags: [Smartfilters], summary: List smartfilters, operationId: listSmartfilters, responses: { "200": { description: Smartfilters } } }

  /v7/analytics/api/v1/asset/{assetid}:
    parameters:
      - { name: assetid, in: path, required: true, schema: { type: string } }
    get: { tags: [Analytics], summary: Retrieve all asset events, operationId: assetEvents, responses: { "200": { description: Events } } }
  /v7/analytics/api/v1/asset/download:
    get: { tags: [Analytics], summary: Retrieve asset download events, operationId: assetDownloadEvents, responses: { "200": { description: Events } } }
  /v7/analytics/api/v2/asset/views:
    get: { tags: [Analytics], summary: Retrieve asset views, operationId: assetViewsV2, responses: { "200": { description: Events } } }
  /v7/analytics/api/v1/user/login:
    get: { tags: [Analytics], summary: Retrieve user login events, operationId: userLoginEvents, responses: { "200": { description: Events } } }

  /v7/quarantine/v1/assets:
    get: { tags: [Quarantine], summary: List quarantined assets, operationId: listQuarantined, responses: { "200": { description: Assets } } }
  /v7/quarantine/v1/assets/{asset-id}:
    parameters:
      - { name: asset-id, in: path, required: true, schema: { type: string } }
    get: { tags: [Quarantine], summary: Retrieve quarantined asset, operationId: getQuarantined, responses: { "200": { description: Asset } } }
    put: { tags: [Quarantine], summary: Update quarantined asset review status, operationId: updateQuarantined, responses: { "200": { description: Updated } } }

  /automations/triggers:
    get: { tags: [Automation], summary: List available triggers, operationId: listTriggers, responses: { "200": { description: Triggers } } }
  /automations/conditions:
    get: { tags: [Automation], summary: List available conditions, operationId: listConditions, responses: { "200": { description: Conditions } } }
  /automations/actions:
    get: { tags: [Automation], summary: List available actions, operationId: listActions, responses: { "200": { description: Actions } } }
  /automations/rules:
    get: { tags: [Automation], summary: List automation rules, operationId: listRules, responses: { "200": { description: Rules } } }
    post: { tags: [Automation], summary: Create automation rule, operationId: createRule, responses: { "201": { description: Created } } }
  /automations/rules/{ruleid}:
    parameters:
      - { name: ruleid, in: path, required: true, schema: { type: string } }
    get: { tags: [Automation], summary: Retrieve automation rule, operationId: getRule, responses: { "200": { description: Rule } } }
    put: { tags: [Automation], summary: Update automation rule, operationId: updateRule, responses: { "200": { description: Updated } } }
    delete: { tags: [Automation], summary: Delete automation rule, operationId: deleteRule, responses: { "204": { description: Deleted } } }

  /v7/file/cmds/upload/prepare:
    post: { tags: [Upload], summary: Prepare file upload, operationId: prepareUpload, responses: { "200": { description: Upload prepared } } }
  /v7/file/cmds/upload/{file-id}/chunk/{chunk-number}:
    parameters:
      - { name: file-id, in: path, required: true, schema: { type: string } }
      - { name: chunk-number, in: path, required: true, schema: { type: integer } }
    post: { tags: [Upload], summary: Upload file chunk, operationId: uploadChunk, responses: { "200": { description: Chunk accepted } } }
  /v7/file/cmds/upload/{file-id}/finalise:
    parameters:
      - { name: file-id, in: path, required: true, schema: { type: string } }
    post: { tags: [Upload], summary: Finalize upload, operationId: finaliseUpload, responses: { "200": { description: Finalised } } }

  /api/store/order:
    get: { tags: [Orders], summary: Retrieve orders, operationId: listOrders, responses: { "200": { description: Orders } } }
  /api/store/order/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Orders], summary: Retrieve order, operationId: getOrder, responses: { "200": { description: Order } } }

  /api/workflow/campaigns:
    get: { tags: [Workflow], summary: List campaigns, operationId: listCampaigns, responses: { "200": { description: Campaigns } } }
    post: { tags: [Workflow], summary: Create campaign, operationId: createCampaign, responses: { "201": { description: Created } } }
  /api/workflow/campaigns/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Workflow], summary: Retrieve campaign, operationId: getCampaign, responses: { "200": { description: Campaign } } }
    put: { tags: [Workflow], summary: Modify campaign, operationId: updateCampaign, responses: { "200": { description: Updated } } }
    delete: { tags: [Workflow], summary: Delete campaign, operationId: deleteCampaign, responses: { "204": { description: Deleted } } }
  /api/workflow/jobs:
    get: { tags: [Workflow], summary: List jobs, operationId: listJobs, responses: { "200": { description: Jobs } } }
    post: { tags: [Workflow], summary: Create job, operationId: createJob, responses: { "201": { description: Created } } }
  /api/workflow/jobs/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Workflow], summary: Retrieve job, operationId: getJob, responses: { "200": { description: Job } } }
    put: { tags: [Workflow], summary: Modify job, operationId: updateJob, responses: { "200": { description: Updated } } }
    delete: { tags: [Workflow], summary: Delete job, operationId: deleteJob, responses: { "204": { description: Deleted } } }

  /api/webhooks:
    get: { tags: [Webhooks], summary: List webhook configurations, operationId: listWebhooks, responses: { "200": { description: Webhooks } } }
    post: { tags: [Webhooks], summary: Create webhook configuration, operationId: createWebhook, responses: { "201": { description: Created } } }
  /api/webhooks/{id}:
    parameters:
      - { name: id, in: path, required: true, schema: { type: string } }
    get: { tags: [Webhooks], summary: Retrieve webhook, operationId: getWebhook, responses: { "200": { description: Webhook } } }
    put: { tags: [Webhooks], summary: Update webhook, operationId: updateWebhook, responses: { "200": { description: Updated } } }
    patch: { tags: [Webhooks], summary: Patch webhook, operationId: patchWebhook, responses: { "200": { description: Updated } } }
    delete: { tags: [Webhooks], summary: Delete webhook, operationId: deleteWebhook, responses: { "204": { description: Deleted } } }
  /api/webhooks/ips:
    get: { tags: [Webhooks], summary: Retrieve webhook source IP ranges, operationId: webhookIps, responses: { "200": { description: IP ranges } } }

  /api/trash/media:
    get: { tags: [Trash], summary: Retrieve recently removed assets, operationId: listTrash, responses: { "200": { description: Removed assets } } }

  /api/1/content/access:
    get: { tags: [ContentAccess], summary: Retrieve metaproperty access, operationId: getContentAccess, responses: { "200": { description: Access } } }
    post: { tags: [ContentAccess], summary: Create metaproperty access, operationId: createContentAccess, responses: { "201": { description: Created } } }
    delete: { tags: [ContentAccess], summary: Delete metaproperty access, operationId: deleteContentAccess, responses: { "204": { description: Deleted } } }
components:
  securitySchemes:
    oauth2:
      type: oauth2
      description: OAuth 2.0 with JWT bearer access tokens
      flows:
        authorizationCode:
          authorizationUrl: https://yourportal.bynder.com/v6/authentication/oauth2/auth
          tokenUrl: https://yourportal.bynder.com/v6/authentication/oauth2/token/authorization
          refreshUrl: https://yourportal.bynder.com/v6/authentication/oauth2/token/refresh
          scopes:
            offline: Refresh token access
            asset:read: Read assets
            asset:write: Write assets
            collection:read: Read collections
            collection:write: Write collections
            meta.assetbank:read: Read asset bank metaproperties
            meta.assetbank:write: Write asset bank metaproperties
        clientCredentials:
          tokenUrl: https://yourportal.bynder.com/v6/authentication/oauth2/token/client-credentials
          scopes:
            asset:read: Read assets
            asset:write: Write assets