# fileCreate - admin-graphql - MUTATION
Version: 2025-01

## Description
Creates file assets using an external URL or for files that were previously uploaded using the
[stagedUploadsCreate mutation](https://shopify.dev/api/admin-graphql/latest/mutations/stageduploadscreate).
These files are added to the [Files page](https://shopify.com/admin/settings/files) in Shopify admin.

Files are processed asynchronously. Some data is not available until processing is completed.
Check [fileStatus](https://shopify.dev/api/admin-graphql/latest/interfaces/File#field-file-filestatus)
to know when the files are READY or FAILED. See the [FileStatus](https://shopify.dev/api/admin-graphql/latest/enums/filestatus)
for the complete set of possible fileStatus values.

To get a list of all files, use the [files query](https://shopify.dev/api/admin-graphql/latest/queries/files).

### Access Scopes
`write_files` access scope, `write_themes` access scope or `write_images` access scope.


## Arguments
* [files](/docs/api/admin-graphql/2025-01/input-objects/FileCreateInput): FileCreateInput! - List of new files to be created.


## Returns
* [files](/docs/api/admin-graphql/2025-01/interfaces/File): File The newly created files.
* [userErrors](/docs/api/admin-graphql/2025-01/objects/FilesUserError): FilesUserError! The list of errors that occurred from executing the mutation.


## Examples
### Create a file using a staged upload URL
Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"mutation fileCreate($files: [FileCreateInput!]!) { fileCreate(files: $files) { files { id fileStatus alt createdAt } } }\",\n \"variables\": {\n    \"files\": {\n      \"alt\": \"fallback text for a video\",\n      \"contentType\": \"VIDEO\",\n      \"originalSource\": \"https://snowdevil.myshopify.com/admin/tmp/files\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation fileCreate($files: [FileCreateInput!]!) {\n      fileCreate(files: $files) {\n        files {\n          id\n          fileStatus\n          alt\n          createdAt\n        }\n      }\n    }`,\n    \"variables\": {\n      \"files\": {\n        \"alt\": \"fallback text for a video\",\n        \"contentType\": \"VIDEO\",\n        \"originalSource\": \"https://snowdevil.myshopify.com/admin/tmp/files\"\n      }\n    },\n  },\n});\n"
Ruby example: "session = ShopifyAPI::Auth::Session.new(\n  shop: \"your-development-store.myshopify.com\",\n  access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n  session: session\n)\n\nquery = <<~QUERY\n  mutation fileCreate($files: [FileCreateInput!]!) {\n    fileCreate(files: $files) {\n      files {\n        id\n        fileStatus\n        alt\n        createdAt\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"files\": {\n    \"alt\": \"fallback text for a video\",\n    \"contentType\": \"VIDEO\",\n    \"originalSource\": \"https://snowdevil.myshopify.com/admin/tmp/files\"\n  }\n}\n\nresponse = client.query(query: query, variables: variables)\n" 
Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n  `#graphql\n  mutation fileCreate($files: [FileCreateInput!]!) {\n    fileCreate(files: $files) {\n      files {\n        id\n        fileStatus\n        alt\n        createdAt\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"files\": {\n        \"alt\": \"fallback text for a video\",\n        \"contentType\": \"VIDEO\",\n        \"originalSource\": \"https://snowdevil.myshopify.com/admin/tmp/files\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation fileCreate($files: [FileCreateInput!]!) {\n  fileCreate(files: $files) {\n    files {\n      id\n      fileStatus\n      alt\n      createdAt\n    }\n  }\n}"
#### Graphql Input
{
  "files": {
    "alt": "fallback text for a video",
    "contentType": "VIDEO",
    "originalSource": "https://snowdevil.myshopify.com/admin/tmp/files"
  }
}
#### Graphql Response
{
  "data": {
    "fileCreate": {
      "files": []
    }
  }
}

### Create a file using an external URL
Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"mutation fileCreate($files: [FileCreateInput!]!) { fileCreate(files: $files) { files { id fileStatus alt createdAt } } }\",\n \"variables\": {\n    \"files\": {\n      \"alt\": \"fallback text for an image\",\n      \"contentType\": \"IMAGE\",\n      \"originalSource\": \"https://example.com/image.jpg\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation fileCreate($files: [FileCreateInput!]!) {\n      fileCreate(files: $files) {\n        files {\n          id\n          fileStatus\n          alt\n          createdAt\n        }\n      }\n    }`,\n    \"variables\": {\n      \"files\": {\n        \"alt\": \"fallback text for an image\",\n        \"contentType\": \"IMAGE\",\n        \"originalSource\": \"https://example.com/image.jpg\"\n      }\n    },\n  },\n});\n"
Ruby example: "session = ShopifyAPI::Auth::Session.new(\n  shop: \"your-development-store.myshopify.com\",\n  access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n  session: session\n)\n\nquery = <<~QUERY\n  mutation fileCreate($files: [FileCreateInput!]!) {\n    fileCreate(files: $files) {\n      files {\n        id\n        fileStatus\n        alt\n        createdAt\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"files\": {\n    \"alt\": \"fallback text for an image\",\n    \"contentType\": \"IMAGE\",\n    \"originalSource\": \"https://example.com/image.jpg\"\n  }\n}\n\nresponse = client.query(query: query, variables: variables)\n" 
Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n  `#graphql\n  mutation fileCreate($files: [FileCreateInput!]!) {\n    fileCreate(files: $files) {\n      files {\n        id\n        fileStatus\n        alt\n        createdAt\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"files\": {\n        \"alt\": \"fallback text for an image\",\n        \"contentType\": \"IMAGE\",\n        \"originalSource\": \"https://example.com/image.jpg\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation fileCreate($files: [FileCreateInput!]!) {\n  fileCreate(files: $files) {\n    files {\n      id\n      fileStatus\n      alt\n      createdAt\n    }\n  }\n}"
#### Graphql Input
{
  "files": {
    "alt": "fallback text for an image",
    "contentType": "IMAGE",
    "originalSource": "https://example.com/image.jpg"
  }
}
#### Graphql Response
{
  "data": {
    "fileCreate": {
      "files": [
        {
          "id": "gid://shopify/MediaImage/1072273195",
          "fileStatus": "UPLOADED",
          "alt": "fallback text for an image",
          "createdAt": "2024-09-12T01:07:45Z"
        }
      ]
    }
  }
}

### Create an image with custom filename
Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"mutation fileCreate($files: [FileCreateInput!]!) { fileCreate(files: $files) { files { id fileStatus alt createdAt } } }\",\n \"variables\": {\n    \"files\": {\n      \"alt\": \"fallback text for an image\",\n      \"contentType\": \"IMAGE\",\n      \"originalSource\": \"https://burst.shopifycdn.com/photos/pug-in-city.jpg\",\n      \"filename\": \"dog.jpg\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation fileCreate($files: [FileCreateInput!]!) {\n      fileCreate(files: $files) {\n        files {\n          id\n          fileStatus\n          alt\n          createdAt\n        }\n      }\n    }`,\n    \"variables\": {\n      \"files\": {\n        \"alt\": \"fallback text for an image\",\n        \"contentType\": \"IMAGE\",\n        \"originalSource\": \"https://burst.shopifycdn.com/photos/pug-in-city.jpg\",\n        \"filename\": \"dog.jpg\"\n      }\n    },\n  },\n});\n"
Ruby example: "session = ShopifyAPI::Auth::Session.new(\n  shop: \"your-development-store.myshopify.com\",\n  access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n  session: session\n)\n\nquery = <<~QUERY\n  mutation fileCreate($files: [FileCreateInput!]!) {\n    fileCreate(files: $files) {\n      files {\n        id\n        fileStatus\n        alt\n        createdAt\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"files\": {\n    \"alt\": \"fallback text for an image\",\n    \"contentType\": \"IMAGE\",\n    \"originalSource\": \"https://burst.shopifycdn.com/photos/pug-in-city.jpg\",\n    \"filename\": \"dog.jpg\"\n  }\n}\n\nresponse = client.query(query: query, variables: variables)\n" 
Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n  `#graphql\n  mutation fileCreate($files: [FileCreateInput!]!) {\n    fileCreate(files: $files) {\n      files {\n        id\n        fileStatus\n        alt\n        createdAt\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"files\": {\n        \"alt\": \"fallback text for an image\",\n        \"contentType\": \"IMAGE\",\n        \"originalSource\": \"https://burst.shopifycdn.com/photos/pug-in-city.jpg\",\n        \"filename\": \"dog.jpg\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation fileCreate($files: [FileCreateInput!]!) {\n  fileCreate(files: $files) {\n    files {\n      id\n      fileStatus\n      alt\n      createdAt\n    }\n  }\n}"
#### Graphql Input
{
  "files": {
    "alt": "fallback text for an image",
    "contentType": "IMAGE",
    "originalSource": "https://burst.shopifycdn.com/photos/pug-in-city.jpg",
    "filename": "dog.jpg"
  }
}
#### Graphql Response
{
  "data": {
    "fileCreate": {
      "files": [
        {
          "id": "gid://shopify/MediaImage/1072273196",
          "fileStatus": "UPLOADED",
          "alt": "fallback text for an image",
          "createdAt": "2024-09-12T01:07:45Z"
        }
      ]
    }
  }
}