---
title: "Save as a new asset"
url: "https://earlyaccess.developers.bynder.com/apis/upload-assets-api-1/versions/df48c638-df62-47a2-917c-b3255c452e8b/operations/Saveasanewasset"
---

> Full API specification: https://earlyaccess.developers.bynder.com/apis/upload-assets-api-1/versions/df48c638-df62-47a2-917c-b3255c452e8b.md

# Save as a new asset

`POST` `/api/v4/media/save/{importId}`

Operation ID: `Saveasanewasset`

For metaproperties that use options (Select, Select2, Autocomplete), modifying an asset's metaproperty options should be done via option UUID's for the API to work optimally, sending name or label values will be deprecated in the future. Other metaproperties (Date, Text and Longtext), values can be submitted directly. Be aware that the endpoints described in Step 6 are an Either/Or choice. You should use either the `Save as a new asset` endpoint to save the uploaded file as a new asset, or the `Update existing asset` endpoint to update an existing asset with the uploaded file.

## Path parameters

- `importId` (string, required) - Import id of a finalised and processed upload to be saved.

## Header parameters

- `Content-Type` (string, required)

## Request body

Content types: `application/x-www-form-urlencoded`

## Responses

- `201` - Created
- `303` - Import not converted yet, please poll
- `400` - Bad Request
- `403` - Access denied
- `404` - Not Found
- `500` - Internal Server Error

## OpenAPI definition

```yaml
openapi: 3.1.0
info:
  title: Upload Assets API
  version: 1.0.0
servers:
  - url: https://{your-bynder-domain}/
    variables:
      your-bynder-domain:
        default: your-bynder-domainDefaultValue
  - url: https://your-bynder-domainDefaultValue
    variables: {}
  - url: https://DefaultParameterValue
    variables: {}
  - url: https://your-bynder-domainDefaultValue
    variables: {}
  - url: https://your-bynder-domainDefaultValue/v6/authentication/oauth2
    variables: {}
  - url: https://your-bynder-domainDefaultValue
    variables: {}
  - url: https://{your-auth-url}
    variables:
      your-auth-url:
        default: DefaultParameterValue
  - url: https://your-bynder-domainDefaultValue
    variables: {}
  - url: https://DefaultParameterValue
    variables: {}
  - url: https://your-bynder-domainDefaultValue
    variables: {}
  - url: https://your-bynder-domainDefaultValue/v6/authentication/oauth2
    variables: {}
  - url: https://your-bynder-domainDefaultValue
    variables: {}
  - url: https://bynder-public-us-east-1.s3.amazonaws.com/
    variables: {}
paths:
  /api/v4/media/save/{importId}:
    parameters: []
    post:
      deprecated: false
      description: >
        For metaproperties that use options (Select, Select2, Autocomplete),
        modifying an asset's metaproperty options should be done via option
        UUID's for the API to work optimally, sending name or label values will
        be deprecated in the future. Other metaproperties (Date, Text and
        Longtext), values can be submitted directly. Be aware that the endpoints
        described in Step 6 are an Either/Or choice. You should use either the
        `Save as a new asset` endpoint to save the uploaded file as a new asset,
        or the `Update existing asset` endpoint to update an existing asset with
        the uploaded file.
      operationId: Saveasanewasset
      parameters:
        - description: Import id of a finalised and processed upload to be saved.
          in: path
          name: importId
          required: true
          schema:
            examples:
              - 00000000-0000-0000-0000-000000000000
            type: string
          style: simple
        - description: ""
          in: header
          name: Content-Type
          required: true
          schema:
            $ref: "#/components/schemas/Content-Type"
          style: simple
      requestBody:
        content:
          application/x-www-form-urlencoded:
            encoding: {}
            schema:
              contentMediaType: application/x-www-form-urlencoded
              properties:
                ISOPublicationDate:
                  contentEncoding: date-time
                  description: Date/time of publication in ISO08601-format.
                  examples:
                    - 2014-06-12T18:53:21.000Z
                  type: string
                accessRequestId:
                  description: If audit is set to `true` you can specify an accessRequestId to
                    batch uploads to the waiting room. The accessRequestId is
                    retrieved in the response of this endpoint, after you save
                    the first asset of your batch.
                  examples:
                    - 00000000-0000-0000-0000000000000000
                  type: string
                accessType:
                  $ref: "#/components/schemas/accessType"
                archiveDate:
                  contentEncoding: date-time
                  description: Archive date/time of the asset in ISO8601-format.
                  examples:
                    - 2014-12-25T10:30:00.000Z
                  type: string
                audit:
                  description: Flags if the asset should be sent to the waiting room.
                  examples:
                    - true
                  type: boolean
                brandId:
                  description: Brand id to save the asset to.
                  examples:
                    - 00000000-0000-0000-0000-0000000000000000
                  type: string
                categories:
                  description: Comma-separated category ids of the asset.
                  examples:
                    - 00000000-0000-0000-0000000000000000,00000000-0000-0000-0000000000000000
                  type: string
                copyright:
                  description: Copyright information of the asset.
                  examples:
                    - Copyright (c) Example corp.
                  type: string
                crc32:
                  contentEncoding: int32
                  description: CRC32 checksum of the original file, used for verification.
                  examples:
                    - 79764919
                  type: integer
                description:
                  description: Extended asset description.
                  examples:
                    - Extended asset description
                  type: string
                isPublic:
                  description: Flags if the asset should be Public.
                  examples:
                    - true
                  type: boolean
                metaproperty:
                  description: Dictionary with (metaproperty) options to set on the asset. Send
                    fields as `metaproperty.METAPROPERY_ID` with a string of all
                    its (metaproperty) options ids comma-separated.
                  examples:
                    - metaproperty.00000000-0000-0000-0000000000000000=00000000-0000-0000-0000000000000000,00000000-0000-0000-0000000000000000
                  type: string
                name:
                  description: Name of the asset.
                  examples:
                    - Asset name
                  type: string
                publicationDate:
                  description: "*DEPRECATED* Date/time of publication in linked API user selected
                    locale-format."
                  examples:
                    - 05-31-2010
                  type: string
                requestorId:
                  description: If audit is set to `true` you can specify a requestor ID (user ID)
                    to identify the user uploading the asset to the waiting
                    room.
                  examples:
                    - 00000000-0000-0000-0000000000000000
                  type: string
                tags:
                  description: Comma-separated list of tags of the asset.
                  examples:
                    - scenery,grassland,Holland
                  type: string
                watermarkDate:
                  contentEncoding: date-time
                  description: "Watermark datetime. ISO8601 format: yyyy-mm-ddThh:mm:ssZ."
                  examples:
                    - 2014-12-25T10:30:00.000Z
                  type: string
              required:
                - brandId
              type: object
        required: false
      responses:
        "201":
          content:
            application/json:
              examples:
                success:
                  summary: Successful response
                  value:
                    accessRequestId: 00000000-0000-0000-0000000000000000
                    batchId: 00000000-0000-0000-0000000000000000
                    mediaid: 00000000-0000-0000-0000000000000000
                    mediaitems:
                      - destination: ___URL_TO_BYNDER_CDN___
                        original: final/00000000-0000-0000-0000000000000000/image.jpg
                      - destination: ___URL_TO_BYNDER_CDN___
                        original: final/00000000-0000-0000-0000000000000000/thul-image.jpg
                      - destination: ___URL_TO_BYNDER_CDN___
                        original: final/00000000-0000-0000-0000000000000000/mini-image.jpg
                    success: true
              schema:
                contentMediaType: application/json
                examples:
                  - accessRequestId: 00000000-0000-0000-0000000000000000
                    batchId: 00000000-0000-0000-0000000000000000
                    mediaid: 00000000-0000-0000-0000000000000000
                    mediaitems:
                      - destination: ___URL_TO_BYNDER_CDN___
                        original: final/00000000-0000-0000-0000000000000000/image.jpg
                      - destination: ___URL_TO_BYNDER_CDN___
                        original: final/00000000-0000-0000-0000000000000000/thul-image.jpg
                      - destination: ___URL_TO_BYNDER_CDN___
                        original: final/00000000-0000-0000-0000000000000000/mini-image.jpg
                    success: true
          description: Created
          headers: {}
        "303":
          content:
            application/json:
              examples:
                poll:
                  summary: Poll response
                  value:
                    message: Import not converted yet, please poll
                    statuscode: "303"
              schema:
                contentMediaType: application/json
                examples:
                  - message: Import not converted yet, please poll
                    statuscode: "303"
          description: Import not converted yet, please poll
          headers: {}
        "400":
          content:
            application/json:
              examples:
                invalidCrc32:
                  summary: Invalid unsigned integer for CRC32
                  value:
                    message: Invalid unsigned integer for CRC32
                    statuscode: "400"
                invalidCrc32Type:
                  summary: Invalid argument type for CRC32
                  value:
                    message: Invalid argument type for CRC32
                    statuscode: "400"
                invalidDateFormat:
                  summary: Date format not ISO8601-compliant
                  value:
                    message: Date format not ISO8601-compliant
                    statuscode: "400"
                noBrandId:
                  summary: No brandId provided
                  value:
                    message: No brandid provided
                    statuscode: "400"
                noImportId:
                  summary: No importId provided
                  value:
                    message: No importid provided
                    statuscode: "400"
              schema:
                contentMediaType: application/json
                examples:
                  - '{"message":"No importid provided","statuscode":"400"}'
                  - '{"message":"No brandid provided","statuscode":"400"}'
                  - '{"message":"Invalid unsigned integer for
                    CRC32","statuscode":"400"}'
                  - '{"message":"Invalid argument type for
                    CRC32","statuscode":"400"}'
                  - '{"message":"Date format not
                    ISO8601-compliant","statuscode":"400"}'
          description: Bad Request
          headers: {}
        "403":
          content:
            application/json:
              examples:
                accessDenied:
                  summary: Access denied response
                  value:
                    message: Access denied
                    statuscode: "403"
              schema:
                contentMediaType: application/json
                examples:
                  - message: Access denied
                    statuscode: "403"
          description: Access denied
          headers: {}
        "404":
          content:
            application/json:
              examples:
                importIdNotFound:
                  summary: Import ID not found
                  value:
                    message: Import ID not found
                    statuscode: "404"
                uploadNotExist:
                  summary: Upload doesn't exist
                  value:
                    message: Upload doesn't exist
                    statuscode: "404"
              schema:
                contentMediaType: application/json
                examples:
                  - '{"message":"Import ID not found","statuscode":"404"}'
                  - "{\"message\":\"Upload doesn't
                    exist\",\"statuscode\":\"404\"}"
          description: Not Found
          headers: {}
        "500":
          content:
            application/json:
              examples:
                uploadFailed:
                  summary: Upload failed or not ready
                  value:
                    message: Upload failed or not ready
                    statuscode: "500"
              schema:
                contentMediaType: application/json
                examples:
                  - message: Upload failed or not ready
                    statuscode: "500"
          description: Internal Server Error
          headers: {}
      security:
        - OAuth2:
            - MEDIAUPLOAD
            - MEDIAUPLOADFORAPPROVAL
        - permanentToken:
            - MEDIAUPLOAD
            - MEDIAUPLOADFORAPPROVAL
      summary: Save as a new asset
      tags:
        - Step 6 EITHER Save as a new asset
security:
  - OAuth2:
      - MEDIAUPLOAD
      - MEDIAUPLOADFORAPPROVAL
  - permanentToken:
      - MEDIAUPLOAD
      - MEDIAUPLOADFORAPPROVAL
components:
  schemas:
    Content-Type:
      const: application/x-www-form-urlencoded
      title: Content-Type
      type: string
    accessType:
      description: "If audit is set to `true` you can specify an access type to define
        to which waiting room location the asset is uploaded to. The available
        locations are: Upload, Edit, Workflow approval (export), Shutterstock
        and Stock."
      enum:
        - upload
        - edit
        - export
        - shutterstock
        - stock
      examples:
        - upload
      title: accessType
      type: string
  securitySchemes:
    OAuth2:
      flows:
        authorizationCode:
          authorizationUrl: https://your-bynder-domainDefaultValue/
          scopes:
            MEDIAUPLOAD: ""
            MEDIAUPLOADFORAPPROVAL: ""
          tokenUrl: https://your-bynder-domainDefaultValue/token
        clientCredentials:
          scopes:
            MEDIAUPLOAD: ""
            MEDIAUPLOADFORAPPROVAL: ""
          tokenUrl: https://your-bynder-domainDefaultValue/token
      type: oauth2
    permanentToken:
      in: header
      name: Authorization
      type: apiKey
```
