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

## Description
Publishes a resource to a channel. If the resource is a product, then it's visible in the channel only if the product status is `active`. Products that are sold exclusively on subscription (`requiresSellingPlan: true`) can be published only on online stores.

### Access Scopes
`write_publications` access scope. Also: The user must have permission to create and edit products or create and edit catalogs.


## Arguments
* [id](/docs/api/admin-graphql/2025-01/scalars/ID): ID! - The resource to create or update publications for.
* [input](/docs/api/admin-graphql/2025-01/input-objects/PublicationInput): PublicationInput! - Specifies the input fields required to publish a resource.


## Returns
* [publishable](/docs/api/admin-graphql/2025-01/interfaces/Publishable): Publishable Resource that has been published.
* [shop](/docs/api/admin-graphql/2025-01/objects/Shop): Shop! The user's shop.
* [userErrors](/docs/api/admin-graphql/2025-01/objects/UserError): UserError! The list of errors that occurred from executing the mutation.


## Examples
### Create a collection listing to publish a collection to your app
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 PublishablePublish($collectionId: ID!, $publicationId: ID!) { publishablePublish(id: $collectionId, input: {publicationId: $publicationId}) { publishable { publishedOnPublication(publicationId: $publicationId) } userErrors { field message } } }\",\n \"variables\": {\n    \"collectionId\": \"gid://shopify/Collection/636030761\",\n    \"publicationId\": \"gid://shopify/Publication/762454635\"\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation PublishablePublish($collectionId: ID!, $publicationId: ID!) {\n      publishablePublish(id: $collectionId, input: {publicationId: $publicationId}) {\n        publishable {\n          publishedOnPublication(publicationId: $publicationId)\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"collectionId\": \"gid://shopify/Collection/636030761\",\n      \"publicationId\": \"gid://shopify/Publication/762454635\"\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 PublishablePublish($collectionId: ID!, $publicationId: ID!) {\n    publishablePublish(id: $collectionId, input: {publicationId: $publicationId}) {\n      publishable {\n        publishedOnPublication(publicationId: $publicationId)\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"collectionId\": \"gid://shopify/Collection/636030761\",\n  \"publicationId\": \"gid://shopify/Publication/762454635\"\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 PublishablePublish($collectionId: ID!, $publicationId: ID!) {\n    publishablePublish(id: $collectionId, input: {publicationId: $publicationId}) {\n      publishable {\n        publishedOnPublication(publicationId: $publicationId)\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"collectionId\": \"gid://shopify/Collection/636030761\",\n      \"publicationId\": \"gid://shopify/Publication/762454635\"\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation PublishablePublish($collectionId: ID!, $publicationId: ID!) {\n  publishablePublish(id: $collectionId, input: {publicationId: $publicationId}) {\n    publishable {\n      publishedOnPublication(publicationId: $publicationId)\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "collectionId": "gid://shopify/Collection/636030761",
  "publicationId": "gid://shopify/Publication/762454635"
}
#### Graphql Response
{
  "data": {
    "publishablePublish": {
      "publishable": {
        "publishedOnPublication": true
      },
      "userErrors": []
    }
  }
}

### Create a product listing to publish a product to your app
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 publishablePublish($id: ID!, $input: [PublicationInput!]!) { publishablePublish(id: $id, input: $input) { publishable { availablePublicationsCount { count } resourcePublicationsCount { count } } shop { publicationCount } userErrors { field message } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/Product/558169081\",\n    \"input\": {\n      \"publicationId\": \"gid://shopify/Publication/762454635\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n      publishablePublish(id: $id, input: $input) {\n        publishable {\n          availablePublicationsCount {\n            count\n          }\n          resourcePublicationsCount {\n            count\n          }\n        }\n        shop {\n          publicationCount\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/Product/558169081\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/Product/558169081\",\n  \"input\": {\n    \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/Product/558169081\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n  publishablePublish(id: $id, input: $input) {\n    publishable {\n      availablePublicationsCount {\n        count\n      }\n      resourcePublicationsCount {\n        count\n      }\n    }\n    shop {\n      publicationCount\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/Product/558169081",
  "input": {
    "publicationId": "gid://shopify/Publication/762454635"
  }
}
#### Graphql Response
{
  "data": {
    "publishablePublish": {
      "publishable": {
        "availablePublicationsCount": {
          "count": 1
        },
        "resourcePublicationsCount": {
          "count": 1
        }
      },
      "shop": {
        "publicationCount": 8
      },
      "userErrors": []
    }
  }
}

### Publish a collection with a publication ID
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 publishablePublish($id: ID!, $input: [PublicationInput!]!) { publishablePublish(id: $id, input: $input) { publishable { availablePublicationsCount { count } resourcePublicationsCount { count } } shop { publicationCount } userErrors { field message } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/Collection/636030761\",\n    \"input\": {\n      \"publicationId\": \"gid://shopify/Publication/762454635\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n      publishablePublish(id: $id, input: $input) {\n        publishable {\n          availablePublicationsCount {\n            count\n          }\n          resourcePublicationsCount {\n            count\n          }\n        }\n        shop {\n          publicationCount\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/Collection/636030761\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/Collection/636030761\",\n  \"input\": {\n    \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/Collection/636030761\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n  publishablePublish(id: $id, input: $input) {\n    publishable {\n      availablePublicationsCount {\n        count\n      }\n      resourcePublicationsCount {\n        count\n      }\n    }\n    shop {\n      publicationCount\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/Collection/636030761",
  "input": {
    "publicationId": "gid://shopify/Publication/762454635"
  }
}
#### Graphql Response
{
  "data": {
    "publishablePublish": {
      "publishable": {
        "availablePublicationsCount": {
          "count": 1
        },
        "resourcePublicationsCount": {
          "count": 1
        }
      },
      "shop": {
        "publicationCount": 8
      },
      "userErrors": []
    }
  }
}

### Publish a product that does not belong to the shop
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 publishablePublish($id: ID!, $input: [PublicationInput!]!) { publishablePublish(id: $id, input: $input) { publishable { availablePublicationsCount { count } resourcePublicationsCount { count } } shop { publicationCount } userErrors { field message } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/Product/921728736\",\n    \"input\": {\n      \"publicationId\": \"gid://shopify/Publication/762454635\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n      publishablePublish(id: $id, input: $input) {\n        publishable {\n          availablePublicationsCount {\n            count\n          }\n          resourcePublicationsCount {\n            count\n          }\n        }\n        shop {\n          publicationCount\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/Product/921728736\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/Product/921728736\",\n  \"input\": {\n    \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/Product/921728736\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n  publishablePublish(id: $id, input: $input) {\n    publishable {\n      availablePublicationsCount {\n        count\n      }\n      resourcePublicationsCount {\n        count\n      }\n    }\n    shop {\n      publicationCount\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/Product/921728736",
  "input": {
    "publicationId": "gid://shopify/Publication/762454635"
  }
}
#### Graphql Response
{
  "data": {
    "publishablePublish": {
      "publishable": null,
      "shop": {
        "publicationCount": 8
      },
      "userErrors": [
        {
          "field": [
            "id"
          ],
          "message": "Resource does not exist"
        }
      ]
    }
  }
}

### Publish a product that does not exist
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 publishablePublish($id: ID!, $input: [PublicationInput!]!) { publishablePublish(id: $id, input: $input) { publishable { availablePublicationsCount { count } resourcePublicationsCount { count } } shop { publicationCount } userErrors { field message } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/Product/0\",\n    \"input\": {\n      \"publicationId\": \"gid://shopify/Publication/762454635\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n      publishablePublish(id: $id, input: $input) {\n        publishable {\n          availablePublicationsCount {\n            count\n          }\n          resourcePublicationsCount {\n            count\n          }\n        }\n        shop {\n          publicationCount\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/Product/0\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/Product/0\",\n  \"input\": {\n    \"publicationId\": \"gid://shopify/Publication/762454635\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/Product/0\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n  publishablePublish(id: $id, input: $input) {\n    publishable {\n      availablePublicationsCount {\n        count\n      }\n      resourcePublicationsCount {\n        count\n      }\n    }\n    shop {\n      publicationCount\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/Product/0",
  "input": {
    "publicationId": "gid://shopify/Publication/762454635"
  }
}
#### Graphql Response
{
  "data": {
    "publishablePublish": {
      "publishable": null,
      "shop": {
        "publicationCount": 8
      },
      "userErrors": [
        {
          "field": [
            "id"
          ],
          "message": "Resource does not exist"
        }
      ]
    }
  }
}

### Publish a product with a future publication date
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 publishablePublish($id: ID!, $input: [PublicationInput!]!) { publishablePublish(id: $id, input: $input) { publishable { availablePublicationsCount { count } resourcePublicationsCount { count } } shop { publicationCount } userErrors { field message } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/Product/558169081\",\n    \"input\": {\n      \"publicationId\": \"gid://shopify/Publication/762454635\",\n      \"publishDate\": \"2999-01-01T00:00:00-00:00\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n      publishablePublish(id: $id, input: $input) {\n        publishable {\n          availablePublicationsCount {\n            count\n          }\n          resourcePublicationsCount {\n            count\n          }\n        }\n        shop {\n          publicationCount\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/Product/558169081\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\",\n        \"publishDate\": \"2999-01-01T00:00:00-00:00\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/Product/558169081\",\n  \"input\": {\n    \"publicationId\": \"gid://shopify/Publication/762454635\",\n    \"publishDate\": \"2999-01-01T00:00:00-00:00\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/Product/558169081\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/762454635\",\n        \"publishDate\": \"2999-01-01T00:00:00-00:00\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n  publishablePublish(id: $id, input: $input) {\n    publishable {\n      availablePublicationsCount {\n        count\n      }\n      resourcePublicationsCount {\n        count\n      }\n    }\n    shop {\n      publicationCount\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/Product/558169081",
  "input": {
    "publicationId": "gid://shopify/Publication/762454635",
    "publishDate": "2999-01-01T00:00:00-00:00"
  }
}
#### Graphql Response
{
  "data": {
    "publishablePublish": {
      "publishable": {
        "availablePublicationsCount": {
          "count": 0
        },
        "resourcePublicationsCount": {
          "count": 0
        }
      },
      "shop": {
        "publicationCount": 8
      },
      "userErrors": []
    }
  }
}

### Publish a product with an invalid publication ID
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 publishablePublish($id: ID!, $input: [PublicationInput!]!) { publishablePublish(id: $id, input: $input) { publishable { availablePublicationsCount { count } resourcePublicationsCount { count } } shop { publicationCount } userErrors { field message } } }\",\n \"variables\": {\n    \"id\": \"gid://shopify/Product/558169081\",\n    \"input\": {\n      \"publicationId\": \"gid://shopify/Publication/0\"\n    }\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n      publishablePublish(id: $id, input: $input) {\n        publishable {\n          availablePublicationsCount {\n            count\n          }\n          resourcePublicationsCount {\n            count\n          }\n        }\n        shop {\n          publicationCount\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }`,\n    \"variables\": {\n      \"id\": \"gid://shopify/Product/558169081\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/0\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"id\": \"gid://shopify/Product/558169081\",\n  \"input\": {\n    \"publicationId\": \"gid://shopify/Publication/0\"\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 publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n    publishablePublish(id: $id, input: $input) {\n      publishable {\n        availablePublicationsCount {\n          count\n        }\n        resourcePublicationsCount {\n          count\n        }\n      }\n      shop {\n        publicationCount\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"id\": \"gid://shopify/Product/558169081\",\n      \"input\": {\n        \"publicationId\": \"gid://shopify/Publication/0\"\n      }\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "mutation publishablePublish($id: ID!, $input: [PublicationInput!]!) {\n  publishablePublish(id: $id, input: $input) {\n    publishable {\n      availablePublicationsCount {\n        count\n      }\n      resourcePublicationsCount {\n        count\n      }\n    }\n    shop {\n      publicationCount\n    }\n    userErrors {\n      field\n      message\n    }\n  }\n}"
#### Graphql Input
{
  "id": "gid://shopify/Product/558169081",
  "input": {
    "publicationId": "gid://shopify/Publication/0"
  }
}
#### Graphql Response
{
  "data": {
    "publishablePublish": {
      "publishable": {
        "availablePublicationsCount": {
          "count": 0
        },
        "resourcePublicationsCount": {
          "count": 0
        }
      },
      "shop": {
        "publicationCount": 8
      },
      "userErrors": [
        {
          "field": [
            "input",
            "0",
            "publicationId"
          ],
          "message": "Publication does not exist or is not publishable"
        }
      ]
    }
  }
}