diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..2bd3e32
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,33 @@
+name: Build Test Publish
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+ workflow_dispatch: # Allows manual triggering of the workflow
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ global-json-file: global.json
+
+ - name: Install dependencies
+ run: dotnet restore
+
+ - name: Build
+ run: dotnet build -c Release --no-restore
+
+ - name: Test
+ run: dotnet test --no-restore --verbosity normal
+
+ - name: Publish to nuget
+ if: github.event_name == 'workflow_dispatch' # Only runs when manually triggered for deployment
+ run: dotnet nuget push ShopifyNet/bin/Release/*.nupkg -s https://api.nuget.org/v3/index.json --skip-duplicate -k "${{ secrets.NUGET_API_KEY }}"
diff --git a/.gitignore b/.gitignore
index 35063fc..147dc5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -51,4 +51,6 @@ CodeCoverage/
# NUnit
*.VisualState.xml
TestResult.xml
-nunit-*.xml
\ No newline at end of file
+nunit-*.xml
+.vs/
+.vscode/
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..21a67c2
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+
+ net9.0
+ latest
+ enable
+ true
+ true
+
+
diff --git a/ShopifyNet.TypeGenerator/ShopifyNet.TypeGenerator.csproj b/ShopifyNet.TypeGenerator/ShopifyNet.TypeGenerator.csproj
new file mode 100644
index 0000000..849e99e
--- /dev/null
+++ b/ShopifyNet.TypeGenerator/ShopifyNet.TypeGenerator.csproj
@@ -0,0 +1,13 @@
+
+
+
+ Exe
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/ShopifyNet.TypeGenerator/TypeGenerator.cs b/ShopifyNet.TypeGenerator/TypeGenerator.cs
new file mode 100644
index 0000000..1273332
--- /dev/null
+++ b/ShopifyNet.TypeGenerator/TypeGenerator.cs
@@ -0,0 +1,45 @@
+using System.Text.Json;
+using GraphQLSharp;
+using ShopifySharp;
+
+var options = new GraphQLTypeGeneratorOptions
+{
+ Namespace = "ShopifyNet.AdminTypes",
+ ScalarNameTypeToTypeName = new Dictionary
+ {
+ { "UnsignedInt64", "ulong" },
+ { "Money", "decimal" },
+ { "Float", "decimal" },
+ { "Decimal", "decimal" },
+ { "DateTime", "DateTime" },
+ { "Date", "DateOnly" },
+ { "UtcOffset", "TimeSpan" },
+ { "URL", "string" },
+ { "HTML", "string" },
+ { "JSON", "string" },
+ { "FormattedString", "string" },
+ { "ARN", "string" },
+ { "StorefrontID", "string" },
+ { "Color", "string" },
+ { "BigInt", "long" },
+ },
+ GraphQLTypeToTypeNameOverride = new Dictionary<(string, string), string>
+ {
+ { ("ShopifyPaymentsDispute", "evidenceDueBy"), "DateTime" },
+ { ("ShopifyPaymentsDispute", "evidenceSentOn"), "DateTime" },
+ { ("ShopifyPaymentsDispute", "finalizedOn"), "DateTime" },
+ },
+ EnumMembersAsString = true
+};
+
+var generator = new GraphQLTypeGenerator();
+string csharpCode = await generator.GenerateTypesAsync(options, async query =>
+{
+ string shopId = Environment.GetEnvironmentVariable("SHOPIFYNET_SHOPID", EnvironmentVariableTarget.User)!;
+ string token = Environment.GetEnvironmentVariable("SHOPIFYNET_TOKEN", EnvironmentVariableTarget.User)!;
+ var res = await new GraphService(shopId, token, "2024-10").PostAsync(query);
+ var doc = JsonDocument.Parse(res.ToString());
+ return doc;
+});
+
+File.WriteAllText(@"../../../../ShopifyNet/AdminTypes.cs", csharpCode);
diff --git a/ShopifyNet.sln b/ShopifyNet.sln
new file mode 100644
index 0000000..7bc6fe5
--- /dev/null
+++ b/ShopifyNet.sln
@@ -0,0 +1,48 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShopifyNet", "ShopifyNet\ShopifyNet.csproj", "{F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShopifyNet.TypeGenerator", "ShopifyNet.TypeGenerator\ShopifyNet.TypeGenerator.csproj", "{2A893113-4D49-409B-9511-07122FDFB81A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Debug|x64.Build.0 = Debug|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Debug|x86.Build.0 = Debug|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Release|x64.ActiveCfg = Release|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Release|x64.Build.0 = Release|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Release|x86.ActiveCfg = Release|Any CPU
+ {F402CA4F-E89F-46CE-849B-EA7AAC13F7E6}.Release|x86.Build.0 = Release|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Debug|x64.Build.0 = Debug|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Debug|x86.Build.0 = Debug|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Release|x64.ActiveCfg = Release|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Release|x64.Build.0 = Release|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Release|x86.ActiveCfg = Release|Any CPU
+ {2A893113-4D49-409B-9511-07122FDFB81A}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/ShopifyNet/AdminTypes.cs b/ShopifyNet/AdminTypes.cs
new file mode 100644
index 0000000..2e7d281
--- /dev/null
+++ b/ShopifyNet/AdminTypes.cs
@@ -0,0 +1,67454 @@
+#nullable enable
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace ShopifyNet.AdminTypes
+{
+ public static class Serializer
+ {
+ public static readonly JsonSerializerOptions Options = new JsonSerializerOptions
+ {
+ NumberHandling = JsonNumberHandling.AllowReadingFromString,
+ Converters =
+ {
+ new JsonStringEnumConverter()
+ },
+ DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
+ };
+ public static string Serialize(object obj)
+ {
+ return JsonSerializer.Serialize(obj, obj.GetType(), Options);
+ }
+
+ public static object? Deserialize(string json, Type type)
+ {
+ return JsonSerializer.Deserialize(json, type, Options);
+ }
+
+ public static T? Deserialize(string json)
+ where T : class
+ {
+ return JsonSerializer.Deserialize(json, Options);
+ }
+ }
+
+ public interface IGraphQLObject
+ {
+ }
+
+ public abstract class GraphQLObject : IGraphQLObject where TSelf : GraphQLObject
+ {
+ public static TSelf? FromJson(string json) => Serializer.Deserialize(json);
+ }
+
+ public static class GraphQLObjectExtensions
+ {
+ public static string ToJson(this IGraphQLObject o) => Serializer.Serialize(o);
+ }
+
+ public interface IEdge
+ {
+ string? cursor { get; set; }
+
+ object? node { get; set; }
+ }
+
+ public interface IEdge : IEdge
+ {
+ object? IEdge.node { get => this.node; set => this.node = (TNode? )value; }
+ new TNode? node { get; set; }
+ }
+
+ public interface IConnection
+ {
+ PageInfo? pageInfo { get; set; }
+
+ Type GetNodeType();
+ IEnumerable? GetNodes();
+ }
+
+ public interface IConnectionWithNodes : IConnection
+ {
+ IEnumerable? nodes { get; set; }
+
+ IEnumerable? IConnection.GetNodes() => this.nodes;
+ }
+
+ public interface IConnectionWithNodes : IConnectionWithNodes
+ {
+ IEnumerable? IConnectionWithNodes.nodes { get => this.nodes; set => this.nodes = (IEnumerable? )value; }
+ new IEnumerable? nodes { get; set; }
+
+ Type IConnection.GetNodeType() => typeof(TNode);
+ }
+
+ public interface IConnectionWithEdges : IConnection
+ {
+ IEnumerable? edges { get; set; }
+
+ Type GetEdgeType();
+ IEnumerable? IConnection.GetNodes() => this.edges?.Select(e => e.node);
+ }
+
+ public interface IConnectionWithEdges : IConnectionWithEdges
+ {
+ IEnumerable? IConnectionWithEdges.edges { get => this.edges; set => this.edges = (IEnumerable>? )value; }
+ new IEnumerable>? edges { get; set; }
+
+ Type IConnection.GetNodeType() => typeof(TNode);
+ }
+
+ public interface IConnectionWithEdges : IConnectionWithEdges where TEdge : IEdge
+ {
+ IEnumerable>? IConnectionWithEdges.edges { get => this.edges?.Cast>(); set => this.edges = value?.Cast(); }
+ new IEnumerable? edges { get; set; }
+
+ Type IConnectionWithEdges.GetEdgeType() => typeof(TEdge);
+ }
+
+ public interface IConnectionWithNodesAndEdges : IConnectionWithEdges, IConnectionWithNodes where TEdge : IEdge
+ {
+ Type IConnection.GetNodeType() => typeof(TNode);
+ IEnumerable? IConnection.GetNodes() => this.nodes ?? this.edges?.Select(e => e.node);
+ }
+
+ ///
+ ///A checkout that was abandoned by the customer.
+ ///
+ public class AbandonedCheckout : GraphQLObject, INavigable, INode
+ {
+ ///
+ ///The URL for the buyer to recover their checkout.
+ ///
+ public string? abandonedCheckoutUrl { get; set; }
+ ///
+ ///The billing address provided by the buyer.
+ ///Null if the user did not provide a billing address.
+ ///
+ public MailingAddress? billingAddress { get; set; }
+ ///
+ ///The date and time when the buyer completed the checkout.
+ ///Null if the checkout has not been completed.
+ ///
+ public DateTime? completedAt { get; set; }
+ ///
+ ///The date and time when the checkout was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///A list of extra information that has been added to the checkout.
+ ///
+ public IEnumerable? customAttributes { get; set; }
+ ///
+ ///The customer who created this checkout.
+ ///May be null if the checkout was created from a draft order or via an app.
+ ///
+ public Customer? customer { get; set; }
+ ///
+ ///A default [cursor](https://shopify.dev/api/usage/pagination-graphql) that returns the single next record, sorted ascending by ID.
+ ///
+ public string? defaultCursor { get; set; }
+ ///
+ ///The discount codes entered by the buyer at checkout.
+ ///
+ public IEnumerable? discountCodes { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///A list of the line items in this checkout.
+ ///
+ public AbandonedCheckoutLineItemConnection? lineItems { get; set; }
+
+ ///
+ ///The number of products in the checkout.
+ ///
+ [Obsolete("Use [AbandonedCheckoutLineItem.quantity](https://shopify.dev/api/admin-graphql/unstable/objects/AbandonedCheckoutLineItem#field-quantity) instead.")]
+ public int? lineItemsQuantity { get; set; }
+ ///
+ ///Unique merchant-facing identifier for the checkout.
+ ///
+ public string? name { get; set; }
+ ///
+ ///A merchant-facing note added to the checkout. Not visible to the buyer.
+ ///
+ public string? note { get; set; }
+ ///
+ ///The shipping address to where the line items will be shipped.
+ ///Null if the user did not provide a shipping address.
+ ///
+ public MailingAddress? shippingAddress { get; set; }
+ ///
+ ///The sum of all items in the checkout, including discounts but excluding shipping, taxes and tips.
+ ///
+ public MoneyBag? subtotalPriceSet { get; set; }
+ ///
+ ///Individual taxes charged on the checkout.
+ ///
+ public IEnumerable? taxLines { get; set; }
+ ///
+ ///Whether taxes are included in line item and shipping line prices.
+ ///
+ public bool? taxesIncluded { get; set; }
+ ///
+ ///The total amount of discounts to be applied.
+ ///
+ public MoneyBag? totalDiscountSet { get; set; }
+ ///
+ ///The total duties applied to the checkout.
+ ///
+ public MoneyBag? totalDutiesSet { get; set; }
+ ///
+ ///The sum of the prices of all line items in the checkout.
+ ///
+ public MoneyBag? totalLineItemsPriceSet { get; set; }
+ ///
+ ///The sum of all items in the checkout, including discounts, shipping, taxes, and tips.
+ ///
+ public MoneyBag? totalPriceSet { get; set; }
+ ///
+ ///The total tax applied to the checkout.
+ ///
+ public MoneyBag? totalTaxSet { get; set; }
+ ///
+ ///The date and time when the checkout was most recently updated.
+ ///
+ public DateTime? updatedAt { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AbandonedCheckouts.
+ ///
+ public class AbandonedCheckoutConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AbandonedCheckoutEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one AbandonedCheckout and a cursor during pagination.
+ ///
+ public class AbandonedCheckoutEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AbandonedCheckoutEdge.
+ ///
+ public AbandonedCheckout? node { get; set; }
+ }
+
+ ///
+ ///A single line item in an abandoned checkout.
+ ///
+ public class AbandonedCheckoutLineItem : GraphQLObject, INode
+ {
+ ///
+ ///A list of extra information that has been added to the line item.
+ ///
+ public IEnumerable? customAttributes { get; set; }
+ ///
+ ///Discount allocations that have been applied on the line item.
+ ///
+ public DiscountAllocationConnection? discountAllocations { get; set; }
+ ///
+ ///Final total price for the entire quantity of this line item, including discounts.
+ ///
+ public MoneyBag? discountedTotalPriceSet { get; set; }
+ ///
+ ///The total price for the entire quantity of this line item, after all discounts are applied, at both the line item and code-based line item level.
+ ///
+ public MoneyBag? discountedTotalPriceWithCodeDiscount { get; set; }
+ ///
+ ///The price of a single variant unit after discounts are applied at the line item level, in shop and presentment currencies.
+ ///
+ public MoneyBag? discountedUnitPriceSet { get; set; }
+ ///
+ ///The price of a single variant unit after all discounts are applied, at both the line item and code-based line item level.
+ ///
+ public MoneyBag? discountedUnitPriceWithCodeDiscount { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The image associated with the line item's variant or product.
+ ///NULL if the line item has no product, or if neither the variant nor the product have an image.
+ ///
+ public Image? image { get; set; }
+ ///
+ ///Original total price for the entire quantity of this line item, before discounts.
+ ///
+ public MoneyBag? originalTotalPriceSet { get; set; }
+ ///
+ ///Original price for a single unit of this line item, before discounts.
+ ///
+ public MoneyBag? originalUnitPriceSet { get; set; }
+ ///
+ ///Product for this line item.
+ ///NULL for custom line items and products that were deleted after checkout began.
+ ///
+ public Product? product { get; set; }
+ ///
+ ///The quantity of the line item.
+ ///
+ public int? quantity { get; set; }
+ ///
+ ///SKU for the inventory item associated with the variant, if any.
+ ///
+ public string? sku { get; set; }
+ ///
+ ///Title of the line item. Defaults to the product's title.
+ ///
+ public string? title { get; set; }
+ ///
+ ///Product variant for this line item.
+ ///NULL for custom line items and variants that were deleted after checkout began.
+ ///
+ public ProductVariant? variant { get; set; }
+ ///
+ ///Title of the variant for this line item.
+ ///NULL for custom line items and products that don't have distinct variants.
+ ///
+ public string? variantTitle { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AbandonedCheckoutLineItems.
+ ///
+ public class AbandonedCheckoutLineItemConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AbandonedCheckoutLineItemEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one AbandonedCheckoutLineItem and a cursor during pagination.
+ ///
+ public class AbandonedCheckoutLineItemEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AbandonedCheckoutLineItemEdge.
+ ///
+ public AbandonedCheckoutLineItem? node { get; set; }
+ }
+
+ ///
+ ///The set of valid sort keys for the AbandonedCheckout query.
+ ///
+ public enum AbandonedCheckoutSortKeys
+ {
+ ///
+ ///Sort by the `checkout_id` value.
+ ///
+ CHECKOUT_ID,
+ ///
+ ///Sort by the `created_at` value.
+ ///
+ CREATED_AT,
+ ///
+ ///Sort by the `customer_name` value.
+ ///
+ CUSTOMER_NAME,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ ///
+ ///Sort by the `total_price` value.
+ ///
+ TOTAL_PRICE,
+ }
+
+ ///
+ ///A browse, cart, or checkout that was abandoned by a customer.
+ ///
+ public class Abandonment : GraphQLObject, INode
+ {
+ ///
+ ///The abandonment payload for the abandoned checkout.
+ ///
+ public AbandonedCheckout? abandonedCheckoutPayload { get; set; }
+ ///
+ ///The abandonment type.
+ ///
+ public string? abandonmentType { get; set; }
+ ///
+ ///The app associated with an abandoned checkout.
+ ///
+ public App? app { get; set; }
+ ///
+ ///Permalink to the cart page.
+ ///
+ public string? cartUrl { get; set; }
+ ///
+ ///The date and time when the abandonment was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///The customer who abandoned this event.
+ ///
+ public Customer? customer { get; set; }
+ ///
+ ///Whether the customer has a draft order since this abandonment has been abandoned.
+ ///
+ public bool? customerHasNoDraftOrderSinceAbandonment { get; set; }
+ ///
+ ///Whether the customer has completed an order since this checkout has been abandoned.
+ ///
+ public bool? customerHasNoOrderSinceAbandonment { get; set; }
+ ///
+ ///The number of days since the last abandonment email was sent to the customer.
+ ///
+ public int? daysSinceLastAbandonmentEmail { get; set; }
+ ///
+ ///When the email was sent, if that's the case.
+ ///
+ public DateTime? emailSentAt { get; set; }
+ ///
+ ///The email state (e.g., sent or not sent).
+ ///
+ public string? emailState { get; set; }
+ ///
+ ///The number of hours since the customer has last abandoned a checkout.
+ ///
+ public decimal? hoursSinceLastAbandonedCheckout { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///Whether the products in abandonment are available.
+ ///
+ public bool? inventoryAvailable { get; set; }
+ ///
+ ///Whether the abandonment event comes from a custom storefront channel.
+ ///
+ public bool? isFromCustomStorefront { get; set; }
+ ///
+ ///Whether the abandonment event comes from the Online Store sales channel.
+ ///
+ public bool? isFromOnlineStore { get; set; }
+ ///
+ ///Whether the abandonment event comes from the Shop app sales channel.
+ ///
+ public bool? isFromShopApp { get; set; }
+ ///
+ ///Whether the abandonment event comes from Shop Pay.
+ ///
+ public bool? isFromShopPay { get; set; }
+ ///
+ ///Whether the customer didn't complete another most significant step since this abandonment.
+ ///
+ public bool? isMostSignificantAbandonment { get; set; }
+ ///
+ ///The date for the latest browse abandonment.
+ ///
+ public DateTime? lastBrowseAbandonmentDate { get; set; }
+ ///
+ ///The date for the latest cart abandonment.
+ ///
+ public DateTime? lastCartAbandonmentDate { get; set; }
+ ///
+ ///The date for the latest checkout abandonment.
+ ///
+ public DateTime? lastCheckoutAbandonmentDate { get; set; }
+ ///
+ ///The most recent step type.
+ ///
+ public string? mostRecentStep { get; set; }
+ ///
+ ///The products added to the cart during the customer abandoned visit.
+ ///
+ public CustomerVisitProductInfoConnection? productsAddedToCart { get; set; }
+ ///
+ ///The products viewed during the customer abandoned visit.
+ ///
+ public CustomerVisitProductInfoConnection? productsViewed { get; set; }
+ ///
+ ///The date and time when the visit started.
+ ///
+ public DateTime? visitStartedAt { get; set; }
+ }
+
+ ///
+ ///Specifies the abandonment type.
+ ///
+ public enum AbandonmentAbandonmentType
+ {
+ ///
+ ///The abandonment event is an abandoned browse.
+ ///
+ BROWSE,
+ ///
+ ///The abandonment event is an abandoned cart.
+ ///
+ CART,
+ ///
+ ///The abandonment event is an abandoned checkout.
+ ///
+ CHECKOUT,
+ }
+
+ ///
+ ///Specifies the delivery state of a marketing activity.
+ ///
+ public enum AbandonmentDeliveryState
+ {
+ ///
+ ///The marketing activity action has not yet been sent.
+ ///
+ NOT_SENT,
+ ///
+ ///The marketing activity action has been sent.
+ ///
+ SENT,
+ ///
+ ///The marketing activity action has been scheduled for later delivery.
+ ///
+ SCHEDULED,
+ }
+
+ ///
+ ///Specifies the email state.
+ ///
+ public enum AbandonmentEmailState
+ {
+ ///
+ ///The email has not yet been sent.
+ ///
+ NOT_SENT,
+ ///
+ ///The email has been sent.
+ ///
+ SENT,
+ ///
+ ///The email has been scheduled for later delivery.
+ ///
+ SCHEDULED,
+ }
+
+ ///
+ ///Return type for `abandonmentEmailStateUpdate` mutation.
+ ///
+ public class AbandonmentEmailStateUpdatePayload : GraphQLObject
+ {
+ ///
+ ///The updated abandonment.
+ ///
+ public Abandonment? abandonment { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `AbandonmentEmailStateUpdate`.
+ ///
+ public class AbandonmentEmailStateUpdateUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `AbandonmentEmailStateUpdateUserError`.
+ ///
+ public enum AbandonmentEmailStateUpdateUserErrorCode
+ {
+ ///
+ ///Unable to find an Abandonment for the provided ID.
+ ///
+ ABANDONMENT_NOT_FOUND,
+ }
+
+ ///
+ ///Return type for `abandonmentUpdateActivitiesDeliveryStatuses` mutation.
+ ///
+ public class AbandonmentUpdateActivitiesDeliveryStatusesPayload : GraphQLObject
+ {
+ ///
+ ///The updated abandonment.
+ ///
+ public Abandonment? abandonment { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `AbandonmentUpdateActivitiesDeliveryStatuses`.
+ ///
+ public class AbandonmentUpdateActivitiesDeliveryStatusesUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `AbandonmentUpdateActivitiesDeliveryStatusesUserError`.
+ ///
+ public enum AbandonmentUpdateActivitiesDeliveryStatusesUserErrorCode
+ {
+ ///
+ ///Unable to find an Abandonment for the provided ID.
+ ///
+ ABANDONMENT_NOT_FOUND,
+ ///
+ ///Unable to find a marketing activity for the provided ID.
+ ///
+ MARKETING_ACTIVITY_NOT_FOUND,
+ ///
+ ///Unable to find delivery status info for the provided ID.
+ ///
+ DELIVERY_STATUS_INFO_NOT_FOUND,
+ }
+
+ ///
+ ///The permission required to access a Shopify Admin API or Storefront API resource for a shop. Merchants grant access scopes that are requested by applications.
+ ///
+ public class AccessScope : GraphQLObject
+ {
+ ///
+ ///A description of the actions that the access scope allows an app to perform.
+ ///
+ public string? description { get; set; }
+ ///
+ ///A readable string that represents the access scope. The string usually follows the format `{action}_{resource}`. `{action}` is `read` or `write`, and `{resource}` is the resource that the action can be performed on. `{action}` and `{resource}` are separated by an underscore. For example, `read_orders` or `write_products`.
+ ///
+ public string? handle { get; set; }
+ }
+
+ ///
+ ///Possible account types that a staff member can have.
+ ///
+ public enum AccountType
+ {
+ ///
+ ///The account can access the Shopify admin.
+ ///
+ REGULAR,
+ ///
+ ///The account cannot access the Shopify admin.
+ ///
+ RESTRICTED,
+ ///
+ ///The user has not yet accepted the invitation to create an account.
+ ///
+ INVITED,
+ ///
+ ///The admin has not yet accepted the request to create a collaborator account.
+ ///
+ REQUESTED,
+ ///
+ ///The account of a partner who collaborates with the merchant.
+ ///
+ COLLABORATOR,
+ ///
+ ///The account of a partner collaborator team member.
+ ///
+ COLLABORATOR_TEAM_MEMBER,
+ ///
+ ///The account can be signed into via a SAML provider.
+ ///
+ SAML,
+ ///
+ ///The user has not yet accepted the invitation to become the store owner.
+ ///
+ INVITED_STORE_OWNER,
+ }
+
+ ///
+ ///Represents an operation publishing all products to a publication.
+ ///
+ public class AddAllProductsOperation : GraphQLObject, INode, IResourceOperation, IPublicationOperation
+ {
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The count of processed rows, summing imported, failed, and skipped rows.
+ ///
+ public int? processedRowCount { get; set; }
+ ///
+ ///Represents a rows objects within this background operation.
+ ///
+ public RowCount? rowCount { get; set; }
+ ///
+ ///The status of this operation.
+ ///
+ public string? status { get; set; }
+ }
+
+ ///
+ ///The additional fees that have been applied to the order.
+ ///
+ public class AdditionalFee : GraphQLObject, INode
+ {
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The name of the additional fee.
+ ///
+ public string? name { get; set; }
+ ///
+ ///The price of the additional fee.
+ ///
+ public MoneyBag? price { get; set; }
+ ///
+ ///A list of taxes charged on the additional fee.
+ ///
+ public IEnumerable? taxLines { get; set; }
+ }
+
+ ///
+ ///A sale associated with an additional fee charge.
+ ///
+ public class AdditionalFeeSale : GraphQLObject, ISale
+ {
+ ///
+ ///The type of order action that the sale represents.
+ ///
+ public string? actionType { get; set; }
+ ///
+ ///The additional fees for the associated sale.
+ ///
+ public SaleAdditionalFee? additionalFee { get; set; }
+ ///
+ ///The unique ID for the sale.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The line type assocated with the sale.
+ ///
+ public string? lineType { get; set; }
+ ///
+ ///The number of units either ordered or intended to be returned.
+ ///
+ public int? quantity { get; set; }
+ ///
+ ///All individual taxes associated with the sale.
+ ///
+ public IEnumerable? taxes { get; set; }
+ ///
+ ///The total sale amount after taxes and discounts.
+ ///
+ public MoneyBag? totalAmount { get; set; }
+ ///
+ ///The total discounts allocated to the sale after taxes.
+ ///
+ public MoneyBag? totalDiscountAmountAfterTaxes { get; set; }
+ ///
+ ///The total discounts allocated to the sale before taxes.
+ ///
+ public MoneyBag? totalDiscountAmountBeforeTaxes { get; set; }
+ ///
+ ///The total amount of taxes for the sale.
+ ///
+ public MoneyBag? totalTaxAmount { get; set; }
+ }
+
+ ///
+ ///A sale associated with an order price adjustment.
+ ///
+ public class AdjustmentSale : GraphQLObject, ISale
+ {
+ ///
+ ///The type of order action that the sale represents.
+ ///
+ public string? actionType { get; set; }
+ ///
+ ///The unique ID for the sale.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The line type assocated with the sale.
+ ///
+ public string? lineType { get; set; }
+ ///
+ ///The number of units either ordered or intended to be returned.
+ ///
+ public int? quantity { get; set; }
+ ///
+ ///All individual taxes associated with the sale.
+ ///
+ public IEnumerable? taxes { get; set; }
+ ///
+ ///The total sale amount after taxes and discounts.
+ ///
+ public MoneyBag? totalAmount { get; set; }
+ ///
+ ///The total discounts allocated to the sale after taxes.
+ ///
+ public MoneyBag? totalDiscountAmountAfterTaxes { get; set; }
+ ///
+ ///The total discounts allocated to the sale before taxes.
+ ///
+ public MoneyBag? totalDiscountAmountBeforeTaxes { get; set; }
+ ///
+ ///The total amount of taxes for the sale.
+ ///
+ public MoneyBag? totalTaxAmount { get; set; }
+ }
+
+ ///
+ ///The set of valid sort keys for the Adjustments query.
+ ///
+ public enum AdjustmentsSortKeys
+ {
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ ///
+ ///Sort by the `time` value.
+ ///
+ TIME,
+ }
+
+ ///
+ ///Targets all items the cart for a specified discount.
+ ///
+ public class AllDiscountItems : GraphQLObject, IDiscountItems
+ {
+ ///
+ ///Whether all items are eligible for the discount. This value always returns `true`.
+ ///
+ public bool? allItems { get; set; }
+ }
+
+ ///
+ ///The Android mobile platform application.
+ ///
+ public class AndroidApplication : GraphQLObject, IMobilePlatformApplication
+ {
+ ///
+ ///Whether Android App Links are supported by this app.
+ ///
+ public bool? appLinksEnabled { get; set; }
+ ///
+ ///The Android application ID.
+ ///
+ public string? applicationId { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The SHA256 fingerprints of the app's signing certificate.
+ ///
+ public IEnumerable? sha256CertFingerprints { get; set; }
+ }
+
+ ///
+ ///A version of the API, as defined by [Shopify API versioning](https://shopify.dev/api/usage/versioning).
+ ///Versions are commonly referred to by their handle (for example, `2021-10`).
+ ///
+ public class ApiVersion : GraphQLObject
+ {
+ ///
+ ///The human-readable name of the version.
+ ///
+ public string? displayName { get; set; }
+ ///
+ ///The unique identifier of an ApiVersion. All supported API versions have a date-based (YYYY-MM) or `unstable` handle.
+ ///
+ public string? handle { get; set; }
+ ///
+ ///Whether the version is actively supported by Shopify. Supported API versions are guaranteed to be stable. Unsupported API versions include unstable, release candidate, and end-of-life versions that are marked as unsupported. For more information, refer to [Versioning](https://shopify.dev/api/usage/versioning).
+ ///
+ public bool? supported { get; set; }
+ }
+
+ ///
+ ///A Shopify application.
+ ///
+ public class App : GraphQLObject, INode
+ {
+ ///
+ ///A unique application API identifier.
+ ///
+ public string? apiKey { get; set; }
+ ///
+ ///App store page URL of the app.
+ ///
+ public string? appStoreAppUrl { get; set; }
+ ///
+ ///App store page URL of the developer who created the app.
+ ///
+ public string? appStoreDeveloperUrl { get; set; }
+ ///
+ ///All requestable access scopes available to the app.
+ ///
+ public IEnumerable? availableAccessScopes { get; set; }
+ ///
+ ///Banner image for the app.
+ ///
+ public Image? banner { get; set; }
+ ///
+ ///Description of the app.
+ ///
+ public string? description { get; set; }
+ ///
+ ///The name of the app developer.
+ ///
+ public string? developerName { get; set; }
+ ///
+ ///The type of app developer.
+ ///
+ public string? developerType { get; set; }
+
+ ///
+ ///Website of the developer who created the app.
+ ///
+ [Obsolete("Use `appStoreDeveloperUrl` instead.")]
+ public string? developerUrl { get; set; }
+ ///
+ ///Whether the app uses the Embedded App SDK.
+ ///
+ public bool? embedded { get; set; }
+ ///
+ ///Requirements that must be met before the app can be installed.
+ ///
+ public IEnumerable? failedRequirements { get; set; }
+ ///
+ ///A list of app features that are shown in the Shopify App Store listing.
+ ///
+ public IEnumerable? features { get; set; }
+ ///
+ ///Feedback from this app about the store.
+ ///
+ public AppFeedback? feedback { get; set; }
+ ///
+ ///Handle of the app.
+ ///
+ public string? handle { get; set; }
+ ///
+ ///Icon that represents the app.
+ ///
+ public Image? icon { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///Webpage where you can install the app.
+ ///
+ public string? installUrl { get; set; }
+ ///
+ ///Corresponding AppInstallation for this shop and App.
+ ///Returns null if the App is not installed.
+ ///
+ public AppInstallation? installation { get; set; }
+ ///
+ ///Whether the app is the [post purchase](https://shopify.dev/apps/checkout/post-purchase) app in use.
+ ///
+ public bool? isPostPurchaseAppInUse { get; set; }
+
+ ///
+ ///Webpage that the app starts in.
+ ///
+ [Obsolete("Use AppInstallation.launchUrl instead")]
+ public string? launchUrl { get; set; }
+
+ ///
+ ///Menu items for the app, which also appear as submenu items in left navigation sidebar in the Shopify admin.
+ ///
+ [Obsolete("Use AppInstallation.navigationItems instead")]
+ public IEnumerable? navigationItems { get; set; }
+ ///
+ ///The optional scopes requested by the app. Lists the optional access scopes the app has declared in its configuration. These scopes are optionally requested by the app after installation.
+ ///
+ public IEnumerable? optionalAccessScopes { get; set; }
+ ///
+ ///Whether the app was previously installed on the current shop.
+ ///
+ public bool? previouslyInstalled { get; set; }
+ ///
+ ///Detailed information about the app pricing.
+ ///
+ public string? pricingDetails { get; set; }
+ ///
+ ///Summary of the app pricing details.
+ ///
+ public string? pricingDetailsSummary { get; set; }
+ ///
+ ///Link to app privacy policy.
+ ///
+ public string? privacyPolicyUrl { get; set; }
+ ///
+ ///The public category for the app.
+ ///
+ public string? publicCategory { get; set; }
+ ///
+ ///Whether the app is published to the Shopify App Store.
+ ///
+ public bool? published { get; set; }
+ ///
+ ///The access scopes requested by the app. Lists the access scopes the app has declared in its configuration. Merchant must grant approval to these scopes for the app to be installed.
+ ///
+ public IEnumerable? requestedAccessScopes { get; set; }
+ ///
+ ///Screenshots of the app.
+ ///
+ public IEnumerable? screenshots { get; set; }
+ ///
+ ///Whether the app was developed by Shopify.
+ ///
+ public bool? shopifyDeveloped { get; set; }
+ ///
+ ///Name of the app.
+ ///
+ public string? title { get; set; }
+ ///
+ ///Message that appears when the app is uninstalled. For example:
+ ///By removing this app, you will no longer be able to publish products to MySocialSite or view this app in your Shopify admin. You can re-enable this channel at any time.
+ ///
+ public string? uninstallMessage { get; set; }
+
+ ///
+ ///Webpage where you can uninstall the app.
+ ///
+ [Obsolete("Use AppInstallation.uninstallUrl instead")]
+ public string? uninstallUrl { get; set; }
+ ///
+ ///The webhook API version for the app.
+ ///
+ public string? webhookApiVersion { get; set; }
+ }
+
+ ///
+ ///A catalog that defines the publication associated with an app.
+ ///
+ public class AppCatalog : GraphQLObject, ICatalog, INode
+ {
+ ///
+ ///The apps associated with the catalog.
+ ///
+ public AppConnection? apps { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///Most recent catalog operations.
+ ///
+ public IEnumerable? operations { get; set; }
+ ///
+ ///The price list associated with the catalog.
+ ///
+ public PriceList? priceList { get; set; }
+ ///
+ ///A group of products and collections that's published to a catalog.
+ ///
+ public Publication? publication { get; set; }
+ ///
+ ///The status of the catalog.
+ ///
+ public string? status { get; set; }
+ ///
+ ///The name of the catalog.
+ ///
+ public string? title { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple Apps.
+ ///
+ public class AppConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AppEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///App credits can be applied by the merchant towards future app purchases, subscriptions, or usage records in Shopify.
+ ///
+ public class AppCredit : GraphQLObject, INode
+ {
+ ///
+ ///The amount that can be used towards future app purchases in Shopify.
+ ///
+ public MoneyV2? amount { get; set; }
+ ///
+ ///The date and time when the app credit was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///The description of the app credit.
+ ///
+ public string? description { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///Whether the app credit is a test transaction.
+ ///
+ public bool? test { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AppCredits.
+ ///
+ public class AppCreditConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AppCreditEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one AppCredit and a cursor during pagination.
+ ///
+ public class AppCreditEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AppCreditEdge.
+ ///
+ public AppCredit? node { get; set; }
+ }
+
+ ///
+ ///Possible types of app developer.
+ ///
+ public enum AppDeveloperType
+ {
+ ///
+ ///Indicates the app developer is Shopify.
+ ///
+ SHOPIFY,
+ ///
+ ///Indicates the app developer is a Partner.
+ ///
+ PARTNER,
+ ///
+ ///Indicates the app developer works directly for a Merchant.
+ ///
+ MERCHANT,
+ ///
+ ///Indicates the app developer is unknown. It is not categorized as any of the other developer types.
+ ///
+ UNKNOWN,
+ }
+
+ ///
+ ///The details about the app extension that's providing the
+ ///[discount type](https://help.shopify.com/manual/discounts/discount-types).
+ ///This information includes the app extension's name and
+ ///[client ID](https://shopify.dev/docs/apps/build/authentication-authorization/client-secrets),
+ ///[App Bridge configuration](https://shopify.dev/docs/api/app-bridge),
+ ///[discount class](https://help.shopify.com/manual/discounts/combining-discounts/discount-combinations),
+ ///[function ID](https://shopify.dev/docs/apps/build/functions/input-output/metafields-for-input-queries),
+ ///and other metadata about the discount type, including the discount type's name and description.
+ ///
+ public class AppDiscountType : GraphQLObject
+ {
+ ///
+ ///The name of the app extension that's providing the
+ ///[discount type](https://help.shopify.com/manual/discounts/discount-types).
+ ///
+ public App? app { get; set; }
+ ///
+ ///The [App Bridge configuration](https://shopify.dev/docs/api/app-bridge)
+ ///for the [discount type](https://help.shopify.com/manual/discounts/discount-types).
+ ///
+ public FunctionsAppBridge? appBridge { get; set; }
+ ///
+ ///The [client ID](https://shopify.dev/docs/apps/build/authentication-authorization/client-secrets)
+ ///of the app extension that's providing the [discount type](https://help.shopify.com/manual/discounts/discount-types).
+ ///
+ public string? appKey { get; set; }
+ ///
+ ///A description of the
+ ///[discount type](https://help.shopify.com/manual/discounts/discount-types)
+ ///provided by the app extension.
+ ///
+ public string? description { get; set; }
+
+ ///
+ ///The [discount class](https://help.shopify.com/manual/discounts/combining-discounts/discount-combinations)
+ ///that's used to control how discounts can be combined.
+ ///
+ [Obsolete("Use `discountClasses` instead.")]
+ public string? discountClass { get; set; }
+ ///
+ ///The
+ ///[function ID](https://shopify.dev/docs/apps/build/functions/input-output/metafields-for-input-queries)
+ ///associated with the app extension providing the
+ ///[discount type](https://help.shopify.com/manual/discounts/discount-types).
+ ///
+ public string? functionId { get; set; }
+
+ ///
+ ///The type of line item on an order that the
+ ///[discount type](https://help.shopify.com/manual/discounts/discount-types) applies to.
+ ///Valid values: `SHIPPING_LINE` and `LINE_ITEM`.
+ ///
+ [Obsolete("Use `discountClasses` instead.")]
+ public string? targetType { get; set; }
+ ///
+ ///The name of the [discount type](https://help.shopify.com/manual/discounts/discount-types)
+ ///that the app extension is providing.
+ ///
+ public string? title { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one App and a cursor during pagination.
+ ///
+ public class AppEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AppEdge.
+ ///
+ public App? node { get; set; }
+ }
+
+ ///
+ ///Reports the status of shops and their resources and displays this information
+ ///within Shopify admin. AppFeedback is used to notify merchants about steps they need to take
+ ///to set up an app on their store.
+ ///
+ public class AppFeedback : GraphQLObject
+ {
+ ///
+ ///The application associated to the feedback.
+ ///
+ public App? app { get; set; }
+ ///
+ ///The date and time when the app feedback was generated.
+ ///
+ public DateTime? feedbackGeneratedAt { get; set; }
+ ///
+ ///A link to where merchants can resolve errors.
+ ///
+ public Link? link { get; set; }
+ ///
+ ///The feedback message presented to the merchant.
+ ///
+ public IEnumerable? messages { get; set; }
+ ///
+ ///Conveys the state of the feedback and whether it requires merchant action or not.
+ ///
+ public string? state { get; set; }
+ }
+
+ ///
+ ///Represents an installed application on a shop.
+ ///
+ public class AppInstallation : GraphQLObject, IHasMetafields, INode, IMetafieldReferencer
+ {
+ ///
+ ///The access scopes granted to the application by a merchant during installation.
+ ///
+ public IEnumerable? accessScopes { get; set; }
+ ///
+ ///The active application subscriptions billed to the shop on a recurring basis.
+ ///
+ public IEnumerable? activeSubscriptions { get; set; }
+ ///
+ ///All subscriptions created for a shop.
+ ///
+ public AppSubscriptionConnection? allSubscriptions { get; set; }
+ ///
+ ///Application which is installed.
+ ///
+ public App? app { get; set; }
+
+ ///
+ ///Channel associated with the installed application.
+ ///
+ [Obsolete("Use `publication` instead.")]
+ public Channel? channel { get; set; }
+ ///
+ ///Credits that can be used towards future app purchases.
+ ///
+ public AppCreditConnection? credits { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The URL to launch the application.
+ ///
+ public string? launchUrl { get; set; }
+ ///
+ ///A [custom field](https://shopify.dev/docs/apps/build/custom-data),
+ ///including its `namespace` and `key`, that's associated with a Shopify resource
+ ///for the purposes of adding and storing additional information.
+ ///
+ public Metafield? metafield { get; set; }
+ ///
+ ///A list of [custom fields](https://shopify.dev/docs/apps/build/custom-data)
+ ///that a merchant associates with a Shopify resource.
+ ///
+ public MetafieldConnection? metafields { get; set; }
+ ///
+ ///One-time purchases to a shop.
+ ///
+ public AppPurchaseOneTimeConnection? oneTimePurchases { get; set; }
+
+ ///
+ ///Returns a private metafield by namespace and key that belongs to the resource.
+ ///
+ [Obsolete("Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).")]
+ public PrivateMetafield? privateMetafield { get; set; }
+
+ ///
+ ///List of private metafields that belong to the resource.
+ ///
+ [Obsolete("Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).")]
+ public PrivateMetafieldConnection? privateMetafields { get; set; }
+ ///
+ ///The publication associated with the installed application.
+ ///
+ public Publication? publication { get; set; }
+ ///
+ ///The records that track the externally-captured revenue for the app. The records are used for revenue attribution purposes.
+ ///
+ public AppRevenueAttributionRecordConnection? revenueAttributionRecords { get; set; }
+
+ ///
+ ///Subscriptions charge to a shop on a recurring basis.
+ ///
+ [Obsolete("Use `activeSubscriptions` instead.")]
+ public IEnumerable? subscriptions { get; set; }
+ ///
+ ///The URL to uninstall the application.
+ ///
+ public string? uninstallUrl { get; set; }
+ }
+
+ ///
+ ///The possible categories of an app installation, based on their purpose
+ ///or the environment they can run in.
+ ///
+ public enum AppInstallationCategory
+ {
+ ///
+ ///Apps that serve as channels through which sales are made, such as the online store.
+ ///
+ CHANNEL,
+ ///
+ ///Apps that can be used in the POS mobile client.
+ ///
+ POS_EMBEDDED,
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AppInstallations.
+ ///
+ public class AppInstallationConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AppInstallationEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one AppInstallation and a cursor during pagination.
+ ///
+ public class AppInstallationEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AppInstallationEdge.
+ ///
+ public AppInstallation? node { get; set; }
+ }
+
+ ///
+ ///The levels of privacy of an app installation.
+ ///
+ public enum AppInstallationPrivacy
+ {
+ PUBLIC,
+ PRIVATE,
+ }
+
+ ///
+ ///The set of valid sort keys for the AppInstallation query.
+ ///
+ public enum AppInstallationSortKeys
+ {
+ ///
+ ///Sort by the `app_title` value.
+ ///
+ APP_TITLE,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by the `installed_at` value.
+ ///
+ INSTALLED_AT,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ }
+
+ ///
+ ///The app plan that the merchant is subscribed to.
+ ///
+ public class AppPlanV2 : GraphQLObject
+ {
+ ///
+ ///The plan billed to a shop on a recurring basis.
+ ///
+ public IAppPricingDetails? pricingDetails { get; set; }
+ }
+
+ ///
+ ///The information about the price that's charged to a shop every plan period.
+ ///The concrete type can be `AppRecurringPricing` for recurring billing or `AppUsagePricing` for usage-based billing.
+ ///
+ [JsonPolymorphic(TypeDiscriminatorPropertyName = "__typename")]
+ [JsonDerivedType(typeof(AppRecurringPricing), typeDiscriminator: "AppRecurringPricing")]
+ [JsonDerivedType(typeof(AppUsagePricing), typeDiscriminator: "AppUsagePricing")]
+ public interface IAppPricingDetails : IGraphQLObject
+ {
+ public AppRecurringPricing? AsAppRecurringPricing() => this as AppRecurringPricing;
+ public AppUsagePricing? AsAppUsagePricing() => this as AppUsagePricing;
+ ///
+ ///The frequency at which the subscribing shop is billed for an app subscription.
+ ///
+ public string? interval { get; set; }
+ }
+
+ ///
+ ///The frequency at which the shop is billed for an app subscription.
+ ///
+ public enum AppPricingInterval
+ {
+ ///
+ ///The app subscription bills the shop annually.
+ ///
+ ANNUAL,
+ ///
+ ///The app subscription bills the shop every 30 days.
+ ///
+ EVERY_30_DAYS,
+ }
+
+ ///
+ ///The public-facing category for an app.
+ ///
+ public enum AppPublicCategory
+ {
+ ///
+ ///The app's public category is [private](https://shopify.dev/apps/distribution#deprecated-app-types).
+ ///
+ PRIVATE,
+ ///
+ ///The app's public category is [public](https://shopify.dev/apps/distribution#capabilities-and-requirements).
+ ///
+ PUBLIC,
+ ///
+ ///The app's public category is [custom](https://shopify.dev/apps/distribution#capabilities-and-requirements).
+ ///
+ CUSTOM,
+ ///
+ ///The app's public category is other. An app is in this category if it's not classified under any of the other app types (private, public, or custom).
+ ///
+ OTHER,
+ }
+
+ ///
+ ///Services and features purchased once by the store.
+ ///
+ [JsonPolymorphic(TypeDiscriminatorPropertyName = "__typename")]
+ [JsonDerivedType(typeof(AppPurchaseOneTime), typeDiscriminator: "AppPurchaseOneTime")]
+ public interface IAppPurchase : IGraphQLObject
+ {
+ public AppPurchaseOneTime? AsAppPurchaseOneTime() => this as AppPurchaseOneTime;
+ ///
+ ///The date and time when the app purchase occurred.
+ ///
+ public DateTime? createdAt { get; }
+ ///
+ ///The name of the app purchase.
+ ///
+ public string? name { get; }
+ ///
+ ///The amount to be charged to the store for the app purchase.
+ ///
+ public MoneyV2? price { get; }
+ ///
+ ///The status of the app purchase.
+ ///
+ public string? status { get; }
+ ///
+ ///Whether the app purchase is a test transaction.
+ ///
+ public bool? test { get; }
+ }
+
+ ///
+ ///Services and features purchased once by a store.
+ ///
+ public class AppPurchaseOneTime : GraphQLObject, IAppPurchase, INode
+ {
+ ///
+ ///The date and time when the app purchase occurred.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The name of the app purchase.
+ ///
+ public string? name { get; set; }
+ ///
+ ///The amount to be charged to the store for the app purchase.
+ ///
+ public MoneyV2? price { get; set; }
+ ///
+ ///The status of the app purchase.
+ ///
+ public string? status { get; set; }
+ ///
+ ///Whether the app purchase is a test transaction.
+ ///
+ public bool? test { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AppPurchaseOneTimes.
+ ///
+ public class AppPurchaseOneTimeConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AppPurchaseOneTimeEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///Return type for `appPurchaseOneTimeCreate` mutation.
+ ///
+ public class AppPurchaseOneTimeCreatePayload : GraphQLObject
+ {
+ ///
+ ///The newly created app one-time purchase.
+ ///
+ public AppPurchaseOneTime? appPurchaseOneTime { get; set; }
+ ///
+ ///The URL that the merchant can access to approve or decline the newly created app one-time purchase.
+ ///
+ ///If the merchant declines, then the merchant is redirected to the app and receives a notification message stating that the charge was declined.
+ ///If the merchant approves and they're successfully invoiced, then the state of the charge changes from `pending` to `active`.
+ ///
+ ///You get paid after the charge is activated.
+ ///
+ public string? confirmationUrl { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one AppPurchaseOneTime and a cursor during pagination.
+ ///
+ public class AppPurchaseOneTimeEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AppPurchaseOneTimeEdge.
+ ///
+ public AppPurchaseOneTime? node { get; set; }
+ }
+
+ ///
+ ///The approval status of the app purchase.
+ ///
+ ///The merchant is charged for the purchase immediately after approval, and the status changes to `active`.
+ ///If the payment fails, then the app purchase remains `pending`.
+ ///
+ ///Purchases start as `pending` and can change to: `active`, `declined`, `expired`. After a purchase changes, it
+ ///remains in that final state.
+ ///
+ public enum AppPurchaseStatus
+ {
+ ///
+ ///The app purchase has been approved by the merchant and is ready to be activated by the app. App purchases created through the GraphQL Admin API are activated upon approval.
+ ///
+ [Obsolete("As of API version 2021-01, when a merchant accepts an app purchase, the status immediately changes from `pending` to `active`.")]
+ ACCEPTED,
+ ///
+ ///The app purchase was approved by the merchant and has been activated by the app. Active app purchases are charged to the merchant and are paid out to the partner.
+ ///
+ ACTIVE,
+ ///
+ ///The app purchase was declined by the merchant.
+ ///
+ DECLINED,
+ ///
+ ///The app purchase was not accepted within two days of being created.
+ ///
+ EXPIRED,
+ ///
+ ///The app purchase is pending approval by the merchant.
+ ///
+ PENDING,
+ }
+
+ ///
+ ///The pricing information about a subscription app.
+ ///The object contains an interval (the frequency at which the shop is billed for an app subscription) and
+ ///a price (the amount to be charged to the subscribing shop at each interval).
+ ///
+ public class AppRecurringPricing : GraphQLObject, IAppPricingDetails
+ {
+ ///
+ ///The discount applied to the subscription for a given number of billing intervals.
+ ///
+ public AppSubscriptionDiscount? discount { get; set; }
+ ///
+ ///The frequency at which the subscribing shop is billed for an app subscription.
+ ///
+ public string? interval { get; set; }
+ ///
+ ///The amount and currency to be charged to the subscribing shop every billing interval.
+ ///
+ public MoneyV2? price { get; set; }
+ }
+
+ ///
+ ///Represents app revenue that was captured externally by the partner.
+ ///
+ public class AppRevenueAttributionRecord : GraphQLObject, INode
+ {
+ ///
+ ///The financial amount captured in this attribution.
+ ///
+ public MoneyV2? amount { get; set; }
+ ///
+ ///The timestamp when the financial amount was captured.
+ ///
+ public DateTime? capturedAt { get; set; }
+ ///
+ ///The timestamp at which this revenue attribution was issued.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The unique value submitted during the creation of the app revenue attribution record.
+ ///For more information, refer to
+ ///[Idempotent requests](https://shopify.dev/api/usage/idempotent-requests).
+ ///
+ public string? idempotencyKey { get; set; }
+ ///
+ ///Indicates whether this is a test submission.
+ ///
+ public bool? test { get; set; }
+ ///
+ ///The type of revenue attribution.
+ ///
+ public string? type { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AppRevenueAttributionRecords.
+ ///
+ public class AppRevenueAttributionRecordConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AppRevenueAttributionRecordEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one AppRevenueAttributionRecord and a cursor during pagination.
+ ///
+ public class AppRevenueAttributionRecordEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AppRevenueAttributionRecordEdge.
+ ///
+ public AppRevenueAttributionRecord? node { get; set; }
+ }
+
+ ///
+ ///The set of valid sort keys for the AppRevenueAttributionRecord query.
+ ///
+ public enum AppRevenueAttributionRecordSortKeys
+ {
+ ///
+ ///Sort by the `created_at` value.
+ ///
+ CREATED_AT,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ }
+
+ ///
+ ///Represents the billing types of revenue attribution.
+ ///
+ public enum AppRevenueAttributionType
+ {
+ ///
+ ///App purchase related revenue collection.
+ ///
+ APPLICATION_PURCHASE,
+ ///
+ ///App subscription revenue collection.
+ ///
+ APPLICATION_SUBSCRIPTION,
+ ///
+ ///App usage-based revenue collection.
+ ///
+ APPLICATION_USAGE,
+ ///
+ ///Other app revenue collection type.
+ ///
+ OTHER,
+ }
+
+ ///
+ ///Represents an error that happens while revoking a granted scope.
+ ///
+ public class AppRevokeAccessScopesAppRevokeScopeError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `AppRevokeAccessScopesAppRevokeScopeError`.
+ ///
+ public enum AppRevokeAccessScopesAppRevokeScopeErrorCode
+ {
+ ///
+ ///No app found on the access token.
+ ///
+ MISSING_SOURCE_APP,
+ ///
+ ///The application cannot be found.
+ ///
+ APPLICATION_CANNOT_BE_FOUND,
+ ///
+ ///The requested list of scopes to revoke includes invalid handles.
+ ///
+ UNKNOWN_SCOPES,
+ ///
+ ///Required scopes cannot be revoked.
+ ///
+ CANNOT_REVOKE_REQUIRED_SCOPES,
+ ///
+ ///Already granted implied scopes cannot be revoked.
+ ///
+ CANNOT_REVOKE_IMPLIED_SCOPES,
+ ///
+ ///Cannot revoke optional scopes that haven't been declared.
+ ///
+ CANNOT_REVOKE_UNDECLARED_SCOPES,
+ ///
+ ///App is not installed on shop.
+ ///
+ APP_NOT_INSTALLED,
+ }
+
+ ///
+ ///Return type for `appRevokeAccessScopes` mutation.
+ ///
+ public class AppRevokeAccessScopesPayload : GraphQLObject
+ {
+ ///
+ ///The list of scope handles that have been revoked.
+ ///
+ public IEnumerable? revoked { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///Provides users access to services and/or features for a duration of time.
+ ///
+ public class AppSubscription : GraphQLObject, INode
+ {
+ ///
+ ///The date and time when the app subscription was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///The date and time when the current app subscription period ends. Returns `null` if the subscription isn't active.
+ ///
+ public DateTime? currentPeriodEnd { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The plans attached to the app subscription.
+ ///
+ public IEnumerable? lineItems { get; set; }
+ ///
+ ///The name of the app subscription.
+ ///
+ public string? name { get; set; }
+ ///
+ ///The URL that the merchant is redirected to after approving the app subscription.
+ ///
+ public string? returnUrl { get; set; }
+ ///
+ ///The status of the app subscription.
+ ///
+ public string? status { get; set; }
+ ///
+ ///Specifies whether the app subscription is a test transaction.
+ ///
+ public bool? test { get; set; }
+ ///
+ ///The number of free trial days, starting at the subscription's creation date, by which billing is delayed.
+ ///
+ public int? trialDays { get; set; }
+ }
+
+ ///
+ ///Return type for `appSubscriptionCancel` mutation.
+ ///
+ public class AppSubscriptionCancelPayload : GraphQLObject
+ {
+ ///
+ ///The cancelled app subscription.
+ ///
+ public AppSubscription? appSubscription { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AppSubscriptions.
+ ///
+ public class AppSubscriptionConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AppSubscriptionEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///Return type for `appSubscriptionCreate` mutation.
+ ///
+ public class AppSubscriptionCreatePayload : GraphQLObject
+ {
+ ///
+ ///The newly-created app subscription.
+ ///
+ public AppSubscription? appSubscription { get; set; }
+ ///
+ ///The URL pointing to the page where the merchant approves or declines the charges for an app subscription.
+ ///
+ public string? confirmationUrl { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///Discount applied to the recurring pricing portion of a subscription.
+ ///
+ public class AppSubscriptionDiscount : GraphQLObject
+ {
+ ///
+ ///The total number of billing intervals to which the discount will be applied.
+ ///The discount will be applied to an indefinite number of billing intervals if this value is blank.
+ ///
+ public int? durationLimitInIntervals { get; set; }
+ ///
+ ///The price of the subscription after the discount is applied.
+ ///
+ public MoneyV2? priceAfterDiscount { get; set; }
+ ///
+ ///The remaining number of billing intervals to which the discount will be applied.
+ ///
+ public int? remainingDurationInIntervals { get; set; }
+ ///
+ ///The value of the discount applied every billing interval.
+ ///
+ public IAppSubscriptionDiscountValue? value { get; set; }
+ }
+
+ ///
+ ///The fixed amount value of a discount.
+ ///
+ public class AppSubscriptionDiscountAmount : GraphQLObject, IAppSubscriptionDiscountValue
+ {
+ ///
+ ///The fixed amount value of a discount.
+ ///
+ public MoneyV2? amount { get; set; }
+ }
+
+ ///
+ ///The percentage value of a discount.
+ ///
+ public class AppSubscriptionDiscountPercentage : GraphQLObject, IAppSubscriptionDiscountValue
+ {
+ ///
+ ///The percentage value of a discount.
+ ///
+ public decimal? percentage { get; set; }
+ }
+
+ ///
+ ///The value of the discount.
+ ///
+ [JsonPolymorphic(TypeDiscriminatorPropertyName = "__typename")]
+ [JsonDerivedType(typeof(AppSubscriptionDiscountAmount), typeDiscriminator: "AppSubscriptionDiscountAmount")]
+ [JsonDerivedType(typeof(AppSubscriptionDiscountPercentage), typeDiscriminator: "AppSubscriptionDiscountPercentage")]
+ public interface IAppSubscriptionDiscountValue : IGraphQLObject
+ {
+ public AppSubscriptionDiscountAmount? AsAppSubscriptionDiscountAmount() => this as AppSubscriptionDiscountAmount;
+ public AppSubscriptionDiscountPercentage? AsAppSubscriptionDiscountPercentage() => this as AppSubscriptionDiscountPercentage;
+ }
+
+ ///
+ ///An auto-generated type which holds one AppSubscription and a cursor during pagination.
+ ///
+ public class AppSubscriptionEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AppSubscriptionEdge.
+ ///
+ public AppSubscription? node { get; set; }
+ }
+
+ ///
+ ///The plan attached to an app subscription.
+ ///
+ public class AppSubscriptionLineItem : GraphQLObject
+ {
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The pricing model for the app subscription.
+ ///
+ public AppPlanV2? plan { get; set; }
+ ///
+ ///A list of the store's usage records for a usage pricing plan.
+ ///
+ public AppUsageRecordConnection? usageRecords { get; set; }
+ }
+
+ ///
+ ///Return type for `appSubscriptionLineItemUpdate` mutation.
+ ///
+ public class AppSubscriptionLineItemUpdatePayload : GraphQLObject
+ {
+ ///
+ ///The updated app subscription.
+ ///
+ public AppSubscription? appSubscription { get; set; }
+ ///
+ ///The URL where the merchant approves or declines the updated app subscription line item.
+ ///
+ public string? confirmationUrl { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///The replacement behavior when creating an app subscription for a merchant with an already existing app subscription.
+ ///
+ public enum AppSubscriptionReplacementBehavior
+ {
+ ///
+ ///Cancels the merchant's current app subscription immediately and replaces it with the newly created app subscription.
+ ///
+ APPLY_IMMEDIATELY,
+ ///
+ ///Defers canceling the merchant's current app subscription and applying the newly created app subscription until the start of the next billing cycle. This value is ignored if the new app subscription is using a different currency than the current app subscription, in which case the new app subscription is applied immediately.
+ ///
+ APPLY_ON_NEXT_BILLING_CYCLE,
+ ///
+ ///Cancels the merchant's current app subscription immediately and replaces it with the newly created app subscription, with the exception of
+ ///the following scenarios where replacing the current app subscription will be deferred until the start of the next billing cycle.
+ ///1) The current app subscription is annual and the newly created app subscription is annual, using the same currency, but is of a lesser value.
+ ///2) The current app subscription is annual and the newly created app subscription is monthly and using the same currency.
+ ///3) The current app subscription and the newly created app subscription are identical except for the `discount` value.
+ ///
+ STANDARD,
+ }
+
+ ///
+ ///The set of valid sort keys for the AppSubscription query.
+ ///
+ public enum AppSubscriptionSortKeys
+ {
+ ///
+ ///Sort by the `created_at` value.
+ ///
+ CREATED_AT,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ }
+
+ ///
+ ///The status of the app subscription.
+ ///
+ public enum AppSubscriptionStatus
+ {
+ ///
+ ///The app subscription is pending approval by the merchant.
+ ///
+ PENDING,
+ ///
+ ///The app subscription has been approved by the merchant and is ready to be activated by the app.
+ ///
+ [Obsolete("As of API version 2021-01, when a merchant approves an app subscription, the status immediately transitions from `pending` to `active`.")]
+ ACCEPTED,
+ ///
+ ///The app subscription has been approved by the merchant. Active app subscriptions are billed to the shop. After payment, partners receive payouts.
+ ///
+ ACTIVE,
+ ///
+ ///The app subscription was declined by the merchant. This is a terminal state.
+ ///
+ DECLINED,
+ ///
+ ///The app subscription wasn't approved by the merchant within two days of being created. This is a terminal state.
+ ///
+ EXPIRED,
+ ///
+ ///The app subscription is on hold due to non-payment. The subscription re-activates after payments resume.
+ ///
+ FROZEN,
+ ///
+ ///The app subscription was cancelled by the app. This could be caused by the app being uninstalled, a new app subscription being activated, or a direct cancellation by the app. This is a terminal state.
+ ///
+ CANCELLED,
+ }
+
+ ///
+ ///Return type for `appSubscriptionTrialExtend` mutation.
+ ///
+ public class AppSubscriptionTrialExtendPayload : GraphQLObject
+ {
+ ///
+ ///The app subscription that had its trial extended.
+ ///
+ public AppSubscription? appSubscription { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `AppSubscriptionTrialExtend`.
+ ///
+ public class AppSubscriptionTrialExtendUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `AppSubscriptionTrialExtendUserError`.
+ ///
+ public enum AppSubscriptionTrialExtendUserErrorCode
+ {
+ ///
+ ///The app subscription wasn't found.
+ ///
+ SUBSCRIPTION_NOT_FOUND,
+ ///
+ ///The trial isn't active.
+ ///
+ TRIAL_NOT_ACTIVE,
+ ///
+ ///The app subscription isn't active.
+ ///
+ SUBSCRIPTION_NOT_ACTIVE,
+ }
+
+ ///
+ ///The set of valid sort keys for the AppTransaction query.
+ ///
+ public enum AppTransactionSortKeys
+ {
+ ///
+ ///Sort by the `created_at` value.
+ ///
+ CREATED_AT,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ }
+
+ ///
+ ///Defines a usage pricing model for the app subscription.
+ ///These charges are variable based on how much the merchant uses the app.
+ ///
+ public class AppUsagePricing : GraphQLObject, IAppPricingDetails
+ {
+ ///
+ ///The total usage records for interval.
+ ///
+ public MoneyV2? balanceUsed { get; set; }
+ ///
+ ///The capped amount prevents the merchant from being charged for any usage over that amount during a billing period.
+ ///This prevents billing from exceeding a maximum threshold over the duration of the billing period.
+ ///For the merchant to continue using the app after exceeding a capped amount, they would need to agree to a new usage charge.
+ ///
+ public MoneyV2? cappedAmount { get; set; }
+ ///
+ ///The frequency with which the app usage records are billed.
+ ///
+ public string? interval { get; set; }
+ ///
+ ///The terms and conditions for app usage pricing.
+ ///Must be present in order to create usage charges.
+ ///The terms are presented to the merchant when they approve an app's usage charges.
+ ///
+ public string? terms { get; set; }
+ }
+
+ ///
+ ///Store usage for app subscriptions with usage pricing.
+ ///
+ public class AppUsageRecord : GraphQLObject, INode
+ {
+ ///
+ ///The date and time when the usage record was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///The description of the app usage record.
+ ///
+ public string? description { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///A unique key generated by the client to avoid duplicate charges.
+ ///
+ public string? idempotencyKey { get; set; }
+ ///
+ ///The price of the usage record.
+ ///
+ public MoneyV2? price { get; set; }
+ ///
+ ///Defines the usage pricing plan the merchant is subscribed to.
+ ///
+ public AppSubscriptionLineItem? subscriptionLineItem { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple AppUsageRecords.
+ ///
+ public class AppUsageRecordConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in AppUsageRecordEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///Return type for `appUsageRecordCreate` mutation.
+ ///
+ public class AppUsageRecordCreatePayload : GraphQLObject
+ {
+ ///
+ ///The newly created app usage record.
+ ///
+ public AppUsageRecord? appUsageRecord { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one AppUsageRecord and a cursor during pagination.
+ ///
+ public class AppUsageRecordEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of AppUsageRecordEdge.
+ ///
+ public AppUsageRecord? node { get; set; }
+ }
+
+ ///
+ ///The set of valid sort keys for the AppUsageRecord query.
+ ///
+ public enum AppUsageRecordSortKeys
+ {
+ ///
+ ///Sort by the `created_at` value.
+ ///
+ CREATED_AT,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ }
+
+ ///
+ ///The Apple mobile platform application.
+ ///
+ public class AppleApplication : GraphQLObject, IMobilePlatformApplication
+ {
+ ///
+ ///The iOS App Clip application ID.
+ ///
+ public string? appClipApplicationId { get; set; }
+ ///
+ ///Whether iOS App Clips are enabled for this app.
+ ///
+ public bool? appClipsEnabled { get; set; }
+ ///
+ ///The iOS App ID.
+ ///
+ public string? appId { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///Whether iOS shared web credentials are enabled for this app.
+ ///
+ public bool? sharedWebCredentialsEnabled { get; set; }
+ ///
+ ///Whether iOS Universal Links are supported by this app.
+ ///
+ public bool? universalLinksEnabled { get; set; }
+ }
+
+ ///
+ ///An article in the blogging system.
+ ///
+ public class Article : GraphQLObject, IHasEvents, IHasMetafieldDefinitions, IHasMetafields, IHasPublishedTranslations, INavigable, INode, IMetafieldReferencer
+ {
+ ///
+ ///The name of the author of the article.
+ ///
+ public ArticleAuthor? author { get; set; }
+ ///
+ ///The blog containing the article.
+ ///
+ public Blog? blog { get; set; }
+ ///
+ ///The text of the article's body, complete with HTML markup.
+ ///
+ public string? body { get; set; }
+ ///
+ ///List of the article's comments.
+ ///
+ public CommentConnection? comments { get; set; }
+ ///
+ ///Count of comments.
+ ///
+ public Count? commentsCount { get; set; }
+ ///
+ ///The date and time (ISO 8601 format) when the article was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///A default [cursor](https://shopify.dev/api/usage/pagination-graphql) that returns the single next record, sorted ascending by ID.
+ ///
+ public string? defaultCursor { get; set; }
+ ///
+ ///The paginated list of events associated with the host subject.
+ ///
+ public EventConnection? events { get; set; }
+ ///
+ ///A unique, human-friendly string for the article that's automatically generated from the article's title.
+ ///The handle is used in the article's URL.
+ ///
+ public string? handle { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The image associated with the article.
+ ///
+ public Image? image { get; set; }
+ ///
+ ///Whether or not the article is visible.
+ ///
+ public bool? isPublished { get; set; }
+ ///
+ ///A [custom field](https://shopify.dev/docs/apps/build/custom-data),
+ ///including its `namespace` and `key`, that's associated with a Shopify resource
+ ///for the purposes of adding and storing additional information.
+ ///
+ public Metafield? metafield { get; set; }
+
+ ///
+ ///List of metafield definitions.
+ ///
+ [Obsolete("This field will be removed in a future version. Use the root `metafieldDefinitions` field instead.")]
+ public MetafieldDefinitionConnection? metafieldDefinitions { get; set; }
+ ///
+ ///A list of [custom fields](https://shopify.dev/docs/apps/build/custom-data)
+ ///that a merchant associates with a Shopify resource.
+ ///
+ public MetafieldConnection? metafields { get; set; }
+
+ ///
+ ///Returns a private metafield by namespace and key that belongs to the resource.
+ ///
+ [Obsolete("Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).")]
+ public PrivateMetafield? privateMetafield { get; set; }
+
+ ///
+ ///List of private metafields that belong to the resource.
+ ///
+ [Obsolete("Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).")]
+ public PrivateMetafieldConnection? privateMetafields { get; set; }
+ ///
+ ///The date and time (ISO 8601 format) when the article became or will become visible.
+ ///Returns null when the article isn't visible.
+ ///
+ public DateTime? publishedAt { get; set; }
+ ///
+ ///A summary of the article, which can include HTML markup.
+ ///The summary is used by the online store theme to display the article on other pages, such as the home page or the main blog page.
+ ///
+ public string? summary { get; set; }
+ ///
+ ///A comma-separated list of tags.
+ ///Tags are additional short descriptors formatted as a string of comma-separated values.
+ ///
+ public IEnumerable? tags { get; set; }
+ ///
+ ///The name of the template an article is using if it's using an alternate template.
+ ///If an article is using the default `article.liquid` template, then the value returned is `null`.
+ ///
+ public string? templateSuffix { get; set; }
+ ///
+ ///The title of the article.
+ ///
+ public string? title { get; set; }
+ ///
+ ///The published translations associated with the resource.
+ ///
+ public IEnumerable? translations { get; set; }
+ ///
+ ///The date and time (ISO 8601 format) when the article was last updated.
+ ///
+ public DateTime? updatedAt { get; set; }
+ }
+
+ ///
+ ///Represents an article author in an Article.
+ ///
+ public class ArticleAuthor : GraphQLObject
+ {
+ ///
+ ///The author's full name.
+ ///
+ public string? name { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple Articles.
+ ///
+ public class ArticleConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in ArticleEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///Return type for `articleCreate` mutation.
+ ///
+ public class ArticleCreatePayload : GraphQLObject
+ {
+ ///
+ ///The article that was created.
+ ///
+ public Article? article { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `ArticleCreate`.
+ ///
+ public class ArticleCreateUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `ArticleCreateUserError`.
+ ///
+ public enum ArticleCreateUserErrorCode
+ {
+ ///
+ ///Can't create an article author if both author name and user ID are supplied.
+ ///
+ AMBIGUOUS_AUTHOR,
+ ///
+ ///Can't create a blog from input if a blog ID is supplied.
+ ///
+ AMBIGUOUS_BLOG,
+ ///
+ ///Can't create an article if both author name and user ID are blank.
+ ///
+ AUTHOR_FIELD_REQUIRED,
+ ///
+ ///User must exist if a user ID is supplied.
+ ///
+ AUTHOR_MUST_EXIST,
+ ///
+ ///Can’t set isPublished to true and also set a future publish date.
+ ///
+ INVALID_PUBLISH_DATE,
+ ///
+ ///Must reference or create a blog when creating an article.
+ ///
+ BLOG_REFERENCE_REQUIRED,
+ ///
+ ///Image upload failed.
+ ///
+ UPLOAD_FAILED,
+ ///
+ ///The input value is blank.
+ ///
+ BLANK,
+ ///
+ ///The record with the ID used as the input value couldn't be found.
+ ///
+ NOT_FOUND,
+ ///
+ ///The input value is too long.
+ ///
+ TOO_LONG,
+ ///
+ ///The input value is already taken.
+ ///
+ TAKEN,
+ ///
+ ///The input value is invalid.
+ ///
+ INVALID,
+ ///
+ ///The value is invalid for the metafield type or for the definition options.
+ ///
+ INVALID_VALUE,
+ ///
+ ///The metafield type is invalid.
+ ///
+ INVALID_TYPE,
+ }
+
+ ///
+ ///Return type for `articleDelete` mutation.
+ ///
+ public class ArticleDeletePayload : GraphQLObject
+ {
+ ///
+ ///The ID of the deleted article.
+ ///
+ public string? deletedArticleId { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `ArticleDelete`.
+ ///
+ public class ArticleDeleteUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `ArticleDeleteUserError`.
+ ///
+ public enum ArticleDeleteUserErrorCode
+ {
+ ///
+ ///The record with the ID used as the input value couldn't be found.
+ ///
+ NOT_FOUND,
+ }
+
+ ///
+ ///An auto-generated type which holds one Article and a cursor during pagination.
+ ///
+ public class ArticleEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of ArticleEdge.
+ ///
+ public Article? node { get; set; }
+ }
+
+ ///
+ ///The set of valid sort keys for the Article query.
+ ///
+ public enum ArticleSortKeys
+ {
+ ///
+ ///Sort by the `author` value.
+ ///
+ AUTHOR,
+ ///
+ ///Sort by the `blog_title` value.
+ ///
+ BLOG_TITLE,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by the `published_at` value.
+ ///
+ PUBLISHED_AT,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ ///
+ ///Sort by the `title` value.
+ ///
+ TITLE,
+ ///
+ ///Sort by the `updated_at` value.
+ ///
+ UPDATED_AT,
+ }
+
+ ///
+ ///Possible sort of tags.
+ ///
+ public enum ArticleTagSort
+ {
+ ///
+ ///Sort alphabetically..
+ ///
+ ALPHABETICAL,
+ ///
+ ///Sort by popularity, starting with the most popular tag.
+ ///
+ POPULAR,
+ }
+
+ ///
+ ///Return type for `articleUpdate` mutation.
+ ///
+ public class ArticleUpdatePayload : GraphQLObject
+ {
+ ///
+ ///The article that was updated.
+ ///
+ public Article? article { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `ArticleUpdate`.
+ ///
+ public class ArticleUpdateUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `ArticleUpdateUserError`.
+ ///
+ public enum ArticleUpdateUserErrorCode
+ {
+ ///
+ ///Can't update an article author if both author name and user ID are supplied.
+ ///
+ AMBIGUOUS_AUTHOR,
+ ///
+ ///Can't create a blog from input if a blog ID is supplied.
+ ///
+ AMBIGUOUS_BLOG,
+ ///
+ ///User must exist if a user ID is supplied.
+ ///
+ AUTHOR_MUST_EXIST,
+ ///
+ ///Can’t set isPublished to true and also set a future publish date.
+ ///
+ INVALID_PUBLISH_DATE,
+ ///
+ ///Image upload failed.
+ ///
+ UPLOAD_FAILED,
+ ///
+ ///The input value is blank.
+ ///
+ BLANK,
+ ///
+ ///The record with the ID used as the input value couldn't be found.
+ ///
+ NOT_FOUND,
+ ///
+ ///The input value is too long.
+ ///
+ TOO_LONG,
+ ///
+ ///The input value is already taken.
+ ///
+ TAKEN,
+ ///
+ ///The input value is invalid.
+ ///
+ INVALID,
+ }
+
+ ///
+ ///A custom property. Attributes are used to store additional information about a Shopify resource, such as
+ ///products, customers, or orders. Attributes are stored as key-value pairs.
+ ///
+ ///For example, a list of attributes might include whether a customer is a first-time buyer (`"customer_first_order": "true"`),
+ ///whether an order is gift-wrapped (`"gift_wrapped": "true"`), a preferred delivery date
+ ///(`"preferred_delivery_date": "2025-10-01"`), the discount applied (`"loyalty_discount_applied": "10%"`), and any
+ ///notes provided by the customer (`"customer_notes": "Please leave at the front door"`).
+ ///
+ public class Attribute : GraphQLObject
+ {
+ ///
+ ///The key or name of the attribute. For example, `"customer_first_order"`.
+ ///
+ public string? key { get; set; }
+ ///
+ ///The value of the attribute. For example, `"true"`.
+ ///
+ public string? value { get; set; }
+ }
+
+ ///
+ ///Automatic discount applications capture the intentions of a discount that was automatically applied.
+ ///
+ public class AutomaticDiscountApplication : GraphQLObject, IDiscountApplication
+ {
+ ///
+ ///The method by which the discount's value is applied to its entitled items.
+ ///
+ public string? allocationMethod { get; set; }
+ ///
+ ///An ordered index that can be used to identify the discount application and indicate the precedence
+ ///of the discount application for calculations.
+ ///
+ public int? index { get; set; }
+ ///
+ ///How the discount amount is distributed on the discounted lines.
+ ///
+ public string? targetSelection { get; set; }
+ ///
+ ///Whether the discount is applied on line items or shipping lines.
+ ///
+ public string? targetType { get; set; }
+ ///
+ ///The title of the discount application.
+ ///
+ public string? title { get; set; }
+ ///
+ ///The value of the discount application.
+ ///
+ public IPricingValue? value { get; set; }
+ }
+
+ ///
+ ///The set of valid sort keys for the AutomaticDiscount query.
+ ///
+ public enum AutomaticDiscountSortKeys
+ {
+ ///
+ ///Sort by the `created_at` value.
+ ///
+ CREATED_AT,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ }
+
+ ///
+ ///Represents an object containing all information for channels available to a shop.
+ ///
+ public class AvailableChannelDefinitionsByChannel : GraphQLObject
+ {
+ ///
+ ///The channel definitions for channels installed on a shop.
+ ///
+ public IEnumerable? channelDefinitions { get; set; }
+ ///
+ ///The name of the channel.
+ ///
+ public string? channelName { get; set; }
+ }
+
+ ///
+ ///The possible types for a badge.
+ ///
+ public enum BadgeType
+ {
+ ///
+ ///This badge has type `default`.
+ ///
+ DEFAULT,
+ ///
+ ///This badge has type `success`.
+ ///
+ SUCCESS,
+ ///
+ ///This badge has type `attention`.
+ ///
+ ATTENTION,
+ ///
+ ///This badge has type `warning`.
+ ///
+ WARNING,
+ ///
+ ///This badge has type `info`.
+ ///
+ INFO,
+ ///
+ ///This badge has type `critical`.
+ ///
+ CRITICAL,
+ }
+
+ ///
+ ///The set of valid sort keys for the BalanceTransaction query.
+ ///
+ public enum BalanceTransactionSortKeys
+ {
+ ///
+ ///Sort by the `amount` value.
+ ///
+ AMOUNT,
+ ///
+ ///Sort by the `fee` value.
+ ///
+ FEE,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by the `net` value.
+ ///
+ NET,
+ ///
+ ///Sort by the `order_name` value.
+ ///
+ ORDER_NAME,
+ ///
+ ///Sort by the `payment_method_name` value.
+ ///
+ PAYMENT_METHOD_NAME,
+ ///
+ ///Sort by the `payout_date` value.
+ ///
+ PAYOUT_DATE,
+ ///
+ ///Sort by the `payout_status` value.
+ ///
+ PAYOUT_STATUS,
+ ///
+ ///Sort by the `processed_at` value.
+ ///
+ PROCESSED_AT,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ ///
+ ///Sort by the `transaction_type` value.
+ ///
+ TRANSACTION_TYPE,
+ }
+
+ ///
+ ///Generic payment details that are related to a transaction.
+ ///
+ [JsonPolymorphic(TypeDiscriminatorPropertyName = "__typename")]
+ [JsonDerivedType(typeof(CardPaymentDetails), typeDiscriminator: "CardPaymentDetails")]
+ [JsonDerivedType(typeof(LocalPaymentMethodsPaymentDetails), typeDiscriminator: "LocalPaymentMethodsPaymentDetails")]
+ [JsonDerivedType(typeof(ShopPayInstallmentsPaymentDetails), typeDiscriminator: "ShopPayInstallmentsPaymentDetails")]
+ public interface IBasePaymentDetails : IGraphQLObject
+ {
+ public CardPaymentDetails? AsCardPaymentDetails() => this as CardPaymentDetails;
+ public LocalPaymentMethodsPaymentDetails? AsLocalPaymentMethodsPaymentDetails() => this as LocalPaymentMethodsPaymentDetails;
+ public ShopPayInstallmentsPaymentDetails? AsShopPayInstallmentsPaymentDetails() => this as ShopPayInstallmentsPaymentDetails;
+ ///
+ ///The name of payment method used by the buyer.
+ ///
+ public string? paymentMethodName { get; }
+ }
+
+ ///
+ ///Basic events chronicle resource activities such as the creation of an article, the fulfillment of an order, or
+ ///the addition of a product.
+ ///
+ ///### General events
+ ///
+ ///| Action | Description |
+ ///|---|---|
+ ///| `create` | The item was created. |
+ ///| `destroy` | The item was destroyed. |
+ ///| `published` | The item was published. |
+ ///| `unpublished` | The item was unpublished. |
+ ///| `update` | The item was updated. |
+ ///
+ ///### Order events
+ ///
+ ///Order events can be divided into the following categories:
+ ///
+ ///- *Authorization*: Includes whether the authorization succeeded, failed, or is pending.
+ ///- *Capture*: Includes whether the capture succeeded, failed, or is pending.
+ ///- *Email*: Includes confirmation or cancellation of the order, as well as shipping.
+ ///- *Fulfillment*: Includes whether the fulfillment succeeded, failed, or is pending. Also includes cancellation, restocking, and fulfillment updates.
+ ///- *Order*: Includess the placement, confirmation, closing, re-opening, and cancellation of the order.
+ ///- *Refund*: Includes whether the refund succeeded, failed, or is pending.
+ ///- *Sale*: Includes whether the sale succeeded, failed, or is pending.
+ ///- *Void*: Includes whether the void succeeded, failed, or is pending.
+ ///
+ ///| Action | Message | Description |
+ ///|---|---|---|
+ ///| `authorization_failure` | The customer, unsuccessfully, tried to authorize: `{money_amount}`. | Authorization failed. The funds cannot be captured. |
+ ///| `authorization_pending` | Authorization for `{money_amount}` is pending. | Authorization pending. |
+ ///| `authorization_success` | The customer successfully authorized us to capture: `{money_amount}`. | Authorization was successful and the funds are available for capture. |
+ ///| `cancelled` | Order was cancelled by `{shop_staff_name}`. | The order was cancelled. |
+ ///| `capture_failure` | We failed to capture: `{money_amount}`. | The capture failed. The funds cannot be transferred to the shop. |
+ ///| `capture_pending` | Capture for `{money_amount}` is pending. | The capture is in process. The funds are not yet available to the shop. |
+ ///| `capture_success` | We successfully captured: `{money_amount}` | The capture was successful and the funds are now available to the shop. |
+ ///| `closed` | Order was closed. | The order was closed. |
+ ///| `confirmed` | Received a new order: `{order_number}` by `{customer_name}`. | The order was confirmed. |
+ ///| `fulfillment_cancelled` | We cancelled `{number_of_line_items}` from being fulfilled by the third party fulfillment service. | Fulfillment for one or more of the line_items failed. |
+ ///| `fulfillment_pending` | We submitted `{number_of_line_items}` to the third party service. | One or more of the line_items has been assigned to a third party service for fulfillment. |
+ ///| `fulfillment_success` | We successfully fulfilled line_items. | Fulfillment was successful for one or more line_items. |
+ ///| `mail_sent` | `{message_type}` email was sent to the customer. | An email was sent to the customer. |
+ ///| `placed` | Order was placed. | An order was placed by the customer. |
+ ///| `re_opened` | Order was re-opened. | An order was re-opened. |
+ ///| `refund_failure` | We failed to refund `{money_amount}`. | The refund failed. The funds are still with the shop. |
+ ///| `refund_pending` | Refund of `{money_amount}` is still pending. | The refund is in process. The funds are still with shop. |
+ ///| `refund_success` | We successfully refunded `{money_amount}`. | The refund was successful. The funds have been transferred to the customer. |
+ ///| `restock_line_items` | We restocked `{number_of_line_items}`. | One or more of the order's line items have been restocked. |
+ ///| `sale_failure` | The customer failed to pay `{money_amount}`. | The sale failed. The funds are not available to the shop. |
+ ///| `sale_pending` | The `{money_amount}` is pending. | The sale is in process. The funds are not yet available to the shop. |
+ ///| `sale_success` | We successfully captured `{money_amount}`. | The sale was successful. The funds are now with the shop. |
+ ///| `update` | `{order_number}` was updated. | The order was updated. |
+ ///| `void_failure` | We failed to void the authorization. | Voiding the authorization failed. The authorization is still valid. |
+ ///| `void_pending` | Authorization void is pending. | Voiding the authorization is in process. The authorization is still valid. |
+ ///| `void_success` | We successfully voided the authorization. | Voiding the authorization was successful. The authorization is no longer valid. |
+ ///
+ public class BasicEvent : GraphQLObject, IEvent, INode
+ {
+ ///
+ ///The action that occured.
+ ///
+ public string? action { get; set; }
+ ///
+ ///Provides additional content for collapsible timeline events.
+ ///
+ public string? additionalContent { get; set; }
+ ///
+ ///Provides additional data for event consumers.
+ ///
+ public string? additionalData { get; set; }
+ ///
+ ///The name of the app that created the event.
+ ///
+ public string? appTitle { get; set; }
+ ///
+ ///Refers to a certain event and its resources.
+ ///
+ public string? arguments { get; set; }
+ ///
+ ///Whether the event was created by an app.
+ ///
+ public bool? attributeToApp { get; set; }
+ ///
+ ///Whether the event was caused by an admin user.
+ ///
+ public bool? attributeToUser { get; set; }
+ ///
+ ///The date and time when the event was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///Whether the event is critical.
+ ///
+ public bool? criticalAlert { get; set; }
+ ///
+ ///Whether this event has additional content.
+ ///
+ public bool? hasAdditionalContent { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///Human readable text that describes the event.
+ ///
+ public string? message { get; set; }
+ ///
+ ///Human readable text that supports the event message.
+ ///
+ public string? secondaryMessage { get; set; }
+ ///
+ ///The resource that generated the event. To see a list of possible types,
+ ///refer to [HasEvents](https://shopify.dev/docs/api/admin-graphql/unstable/interfaces/HasEvents#implemented-in).
+ ///
+ public IHasEvents? subject { get; set; }
+ ///
+ ///The ID of the resource that generated the event.
+ ///
+ public string? subjectId { get; set; }
+ ///
+ ///The type of the resource that generated the event.
+ ///
+ public string? subjectType { get; set; }
+ }
+
+ ///
+ ///Represents an error that happens during the execution of a billing attempt mutation.
+ ///
+ public class BillingAttemptUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `BillingAttemptUserError`.
+ ///
+ public enum BillingAttemptUserErrorCode
+ {
+ ///
+ ///The input value is invalid.
+ ///
+ INVALID,
+ ///
+ ///The input value is blank.
+ ///
+ BLANK,
+ ///
+ ///Subscription contract does not exist.
+ ///
+ CONTRACT_NOT_FOUND,
+ ///
+ ///Origin time cannot be before the contract creation time.
+ ///
+ ORIGIN_TIME_BEFORE_CONTRACT_CREATION,
+ ///
+ ///Billing cycle selector cannot select upcoming billing cycle past limit.
+ ///
+ UPCOMING_CYCLE_LIMIT_EXCEEDED,
+ ///
+ ///Billing cycle selector cannot select billing cycle outside of index range.
+ ///
+ CYCLE_INDEX_OUT_OF_RANGE,
+ ///
+ ///Billing cycle selector cannot select billing cycle outside of start date range.
+ ///
+ CYCLE_START_DATE_OUT_OF_RANGE,
+ ///
+ ///Origin time needs to be within the selected billing cycle's start and end at date.
+ ///
+ ORIGIN_TIME_OUT_OF_RANGE,
+ ///
+ ///Billing cycle charge attempt made more than 24 hours before the billing cycle `billingAttemptExpectedDate`.
+ ///
+ BILLING_CYCLE_CHARGE_BEFORE_EXPECTED_DATE,
+ ///
+ ///Billing cycle must not be skipped.
+ ///
+ BILLING_CYCLE_SKIPPED,
+ ///
+ ///Subscription contract is under review.
+ ///
+ CONTRACT_UNDER_REVIEW,
+ ///
+ ///Subscription contract cannot be billed once terminated.
+ ///
+ CONTRACT_TERMINATED,
+ ///
+ ///Subscription contract cannot be billed if paused.
+ ///
+ CONTRACT_PAUSED,
+ }
+
+ ///
+ ///Shopify stores come with a built-in blogging engine, allowing a shop to have one or more blogs. Blogs are meant
+ ///to be used as a type of magazine or newsletter for the shop, with content that changes over time.
+ ///
+ public class Blog : GraphQLObject, IHasEvents, IHasMetafieldDefinitions, IHasMetafields, IHasPublishedTranslations, INode, IMetafieldReferencer
+ {
+ ///
+ ///List of the blog's articles.
+ ///
+ public ArticleConnection? articles { get; set; }
+ ///
+ ///Count of articles.
+ ///
+ public Count? articlesCount { get; set; }
+ ///
+ ///Indicates whether readers can post comments to the blog and if comments are moderated or not.
+ ///
+ public string? commentPolicy { get; set; }
+ ///
+ ///The date and time when the blog was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///The paginated list of events associated with the host subject.
+ ///
+ public EventConnection? events { get; set; }
+ ///
+ ///FeedBurner provider details. Any blogs that aren't already integrated with FeedBurner can't use the service.
+ ///
+ public BlogFeed? feed { get; set; }
+ ///
+ ///A unique, human-friendly string for the blog. If no handle is specified, a handle will be generated automatically from the blog title.
+ ///The handle is customizable and is used by the Liquid templating language to refer to the blog.
+ ///
+ public string? handle { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///A [custom field](https://shopify.dev/docs/apps/build/custom-data),
+ ///including its `namespace` and `key`, that's associated with a Shopify resource
+ ///for the purposes of adding and storing additional information.
+ ///
+ public Metafield? metafield { get; set; }
+
+ ///
+ ///List of metafield definitions.
+ ///
+ [Obsolete("This field will be removed in a future version. Use the root `metafieldDefinitions` field instead.")]
+ public MetafieldDefinitionConnection? metafieldDefinitions { get; set; }
+ ///
+ ///A list of [custom fields](https://shopify.dev/docs/apps/build/custom-data)
+ ///that a merchant associates with a Shopify resource.
+ ///
+ public MetafieldConnection? metafields { get; set; }
+
+ ///
+ ///Returns a private metafield by namespace and key that belongs to the resource.
+ ///
+ [Obsolete("Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).")]
+ public PrivateMetafield? privateMetafield { get; set; }
+
+ ///
+ ///List of private metafields that belong to the resource.
+ ///
+ [Obsolete("Metafields created using a reserved namespace are private by default. See our guide for\n[migrating private metafields](https://shopify.dev/docs/apps/custom-data/metafields/migrate-private-metafields).")]
+ public PrivateMetafieldConnection? privateMetafields { get; set; }
+ ///
+ ///A list of tags associated with the 200 most recent blog articles.
+ ///
+ public IEnumerable? tags { get; set; }
+ ///
+ ///The name of the template a blog is using if it's using an alternate template.
+ ///Returns `null` if a blog is using the default blog.liquid template.
+ ///
+ public string? templateSuffix { get; set; }
+ ///
+ ///The title of the blog.
+ ///
+ public string? title { get; set; }
+ ///
+ ///The published translations associated with the resource.
+ ///
+ public IEnumerable? translations { get; set; }
+ ///
+ ///The date and time when the blog was update.
+ ///
+ public DateTime? updatedAt { get; set; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple Blogs.
+ ///
+ public class BlogConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in BlogEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///Return type for `blogCreate` mutation.
+ ///
+ public class BlogCreatePayload : GraphQLObject
+ {
+ ///
+ ///The blog that was created.
+ ///
+ public Blog? blog { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `BlogCreate`.
+ ///
+ public class BlogCreateUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `BlogCreateUserError`.
+ ///
+ public enum BlogCreateUserErrorCode
+ {
+ ///
+ ///The input value is invalid.
+ ///
+ INVALID,
+ ///
+ ///The input value is too long.
+ ///
+ TOO_LONG,
+ ///
+ ///The input value isn't included in the list.
+ ///
+ INCLUSION,
+ ///
+ ///The value is invalid for the metafield type or for the definition options.
+ ///
+ INVALID_VALUE,
+ ///
+ ///The metafield type is invalid.
+ ///
+ INVALID_TYPE,
+ }
+
+ ///
+ ///Return type for `blogDelete` mutation.
+ ///
+ public class BlogDeletePayload : GraphQLObject
+ {
+ ///
+ ///The ID of the deleted blog.
+ ///
+ public string? deletedBlogId { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `BlogDelete`.
+ ///
+ public class BlogDeleteUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `BlogDeleteUserError`.
+ ///
+ public enum BlogDeleteUserErrorCode
+ {
+ ///
+ ///The record with the ID used as the input value couldn't be found.
+ ///
+ NOT_FOUND,
+ }
+
+ ///
+ ///An auto-generated type which holds one Blog and a cursor during pagination.
+ ///
+ public class BlogEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of BlogEdge.
+ ///
+ public Blog? node { get; set; }
+ }
+
+ ///
+ ///FeedBurner provider details. Any blogs that aren't already integrated with FeedBurner can't use the service.
+ ///
+ public class BlogFeed : GraphQLObject
+ {
+ ///
+ ///Blog feed provider url.
+ ///
+ public string? location { get; set; }
+ ///
+ ///Blog feed provider path.
+ ///
+ public string? path { get; set; }
+ }
+
+ ///
+ ///The set of valid sort keys for the Blog query.
+ ///
+ public enum BlogSortKeys
+ {
+ ///
+ ///Sort by the `handle` value.
+ ///
+ HANDLE,
+ ///
+ ///Sort by the `id` value.
+ ///
+ ID,
+ ///
+ ///Sort by relevance to the search terms when the `query` parameter is specified on the connection.
+ ///Don't use this sort key when no search query is specified.
+ ///
+ RELEVANCE,
+ ///
+ ///Sort by the `title` value.
+ ///
+ TITLE,
+ }
+
+ ///
+ ///Return type for `blogUpdate` mutation.
+ ///
+ public class BlogUpdatePayload : GraphQLObject
+ {
+ ///
+ ///The blog that was updated.
+ ///
+ public Blog? blog { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `BlogUpdate`.
+ ///
+ public class BlogUpdateUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `BlogUpdateUserError`.
+ ///
+ public enum BlogUpdateUserErrorCode
+ {
+ ///
+ ///The record with the ID used as the input value couldn't be found.
+ ///
+ NOT_FOUND,
+ ///
+ ///The input value is invalid.
+ ///
+ INVALID,
+ ///
+ ///The input value is blank.
+ ///
+ BLANK,
+ ///
+ ///The input value is too long.
+ ///
+ TOO_LONG,
+ ///
+ ///The input value isn't included in the list.
+ ///
+ INCLUSION,
+ }
+
+ ///
+ ///Possible error codes that can be returned by `BulkMutationUserError`.
+ ///
+ public enum BulkMutationErrorCode
+ {
+ ///
+ ///The operation did not run because another bulk mutation is already running. [Wait for the operation to finish](https://shopify.dev/api/usage/bulk-operations/imports#wait-for-the-operation-to-finish) before retrying this operation.
+ ///
+ OPERATION_IN_PROGRESS,
+ ///
+ ///The operation did not run because the mutation is invalid. Check your mutation syntax and try again.
+ ///
+ INVALID_MUTATION,
+ ///
+ ///The JSONL file submitted via the `stagedUploadsCreate` mutation is invalid. Update the file and try again.
+ ///
+ INVALID_STAGED_UPLOAD_FILE,
+ ///
+ ///The JSONL file could not be found. Try [uploading the file](https://shopify.dev/api/usage/bulk-operations/imports#generate-the-uploaded-url-and-parameters) again, and check that you've entered the URL correctly for the `stagedUploadPath` mutation argument.
+ ///
+ NO_SUCH_FILE,
+ ///
+ ///There was a problem reading the JSONL file. This error might be intermittent, so you can try performing the same query again.
+ ///
+ INTERNAL_FILE_SERVER_ERROR,
+ }
+
+ ///
+ ///Represents an error that happens during execution of a bulk mutation.
+ ///
+ public class BulkMutationUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///An asynchronous long-running operation to fetch data in bulk or to bulk import data.
+ ///
+ ///Bulk operations are created using the `bulkOperationRunQuery` or `bulkOperationRunMutation` mutation. After
+ ///they are created, clients should poll the `status` field for updates. When `COMPLETED`, the `url` field contains
+ ///a link to the data in [JSONL](http://jsonlines.org/) format.
+ ///
+ ///Refer to the [bulk operations guide](https://shopify.dev/api/usage/bulk-operations/imports) for more details.
+ ///
+ public class BulkOperation : GraphQLObject, INode
+ {
+ ///
+ ///When the bulk operation was successfully completed.
+ ///
+ public DateTime? completedAt { get; set; }
+ ///
+ ///When the bulk operation was created.
+ ///
+ public DateTime? createdAt { get; set; }
+ ///
+ ///Error code for failed operations.
+ ///
+ public string? errorCode { get; set; }
+ ///
+ ///File size in bytes of the file in the `url` field.
+ ///
+ public ulong? fileSize { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///A running count of all the objects processed.
+ ///For example, when fetching all the products and their variants, this field counts both products and variants.
+ ///This field can be used to track operation progress.
+ ///
+ public ulong? objectCount { get; set; }
+ ///
+ ///The URL that points to the partial or incomplete response data (in [JSONL](http://jsonlines.org/) format) that was returned by a failed operation.
+ ///The URL expires 7 days after the operation fails. Returns `null` when there's no data available.
+ ///
+ public string? partialDataUrl { get; set; }
+ ///
+ ///GraphQL query document specified in `bulkOperationRunQuery`.
+ ///
+ public string? query { get; set; }
+ ///
+ ///A running count of all the objects that are processed at the root of the query.
+ ///For example, when fetching all the products and their variants, this field only counts products.
+ ///This field can be used to track operation progress.
+ ///
+ public ulong? rootObjectCount { get; set; }
+ ///
+ ///Status of the bulk operation.
+ ///
+ public string? status { get; set; }
+ ///
+ ///The bulk operation's type.
+ ///
+ public string? type { get; set; }
+ ///
+ ///The URL that points to the response data in [JSONL](http://jsonlines.org/) format.
+ ///The URL expires 7 days after the operation completes.
+ ///
+ public string? url { get; set; }
+ }
+
+ ///
+ ///Return type for `bulkOperationCancel` mutation.
+ ///
+ public class BulkOperationCancelPayload : GraphQLObject
+ {
+ ///
+ ///The bulk operation to be canceled.
+ ///
+ public BulkOperation? bulkOperation { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///Error codes for failed bulk operations.
+ ///
+ public enum BulkOperationErrorCode
+ {
+ ///
+ ///The provided operation `query` returned access denied due to missing
+ ///[access scopes](https://shopify.dev/api/usage/access-scopes).
+ ///Review the requested object permissions and execute the query as a normal non-bulk GraphQL request to see more details.
+ ///
+ ACCESS_DENIED,
+ ///
+ ///The operation resulted in partial or incomplete data due to internal server errors during execution.
+ ///These errors might be intermittent, so you can try performing the same query again.
+ ///
+ INTERNAL_SERVER_ERROR,
+ ///
+ ///The operation resulted in partial or incomplete data due to query timeouts during execution.
+ ///In some cases, timeouts can be avoided by modifying your `query` to select fewer fields.
+ ///
+ TIMEOUT,
+ }
+
+ ///
+ ///Return type for `bulkOperationRunMutation` mutation.
+ ///
+ public class BulkOperationRunMutationPayload : GraphQLObject
+ {
+ ///
+ ///The newly created bulk operation.
+ ///
+ public BulkOperation? bulkOperation { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///Return type for `bulkOperationRunQuery` mutation.
+ ///
+ public class BulkOperationRunQueryPayload : GraphQLObject
+ {
+ ///
+ ///The newly created bulk operation.
+ ///
+ public BulkOperation? bulkOperation { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///The valid values for the status of a bulk operation.
+ ///
+ public enum BulkOperationStatus
+ {
+ ///
+ ///The bulk operation has been canceled.
+ ///
+ CANCELED,
+ ///
+ ///Cancelation has been initiated on the bulk operation. There may be a short delay from when a cancelation
+ ///starts until the operation is actually canceled.
+ ///
+ CANCELING,
+ ///
+ ///The bulk operation has successfully completed.
+ ///
+ COMPLETED,
+ ///
+ ///The bulk operation has been created.
+ ///
+ CREATED,
+ ///
+ ///The bulk operation URL has expired.
+ ///
+ EXPIRED,
+ ///
+ ///The bulk operation has failed. For information on why the operation failed, use
+ ///[BulkOperation.errorCode](https://shopify.dev/api/admin-graphql/latest/enums/bulkoperationerrorcode).
+ ///
+ FAILED,
+ ///
+ ///The bulk operation is runnning.
+ ///
+ RUNNING,
+ }
+
+ ///
+ ///The valid values for the bulk operation's type.
+ ///
+ public enum BulkOperationType
+ {
+ ///
+ ///The bulk operation is a query.
+ ///
+ QUERY,
+ ///
+ ///The bulk operation is a mutation.
+ ///
+ MUTATION,
+ }
+
+ ///
+ ///Return type for `bulkProductResourceFeedbackCreate` mutation.
+ ///
+ public class BulkProductResourceFeedbackCreatePayload : GraphQLObject
+ {
+ ///
+ ///The feedback that's created.
+ ///
+ public IEnumerable? feedback { get; set; }
+ ///
+ ///The list of errors that occurred from executing the mutation.
+ ///
+ public IEnumerable? userErrors { get; set; }
+ }
+
+ ///
+ ///An error that occurs during the execution of `BulkProductResourceFeedbackCreate`.
+ ///
+ public class BulkProductResourceFeedbackCreateUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `BulkProductResourceFeedbackCreateUserError`.
+ ///
+ public enum BulkProductResourceFeedbackCreateUserErrorCode
+ {
+ ///
+ ///The operation was attempted on too many feedback objects. The maximum number of feedback objects that you can operate on is 50.
+ ///
+ MAXIMUM_FEEDBACK_LIMIT_EXCEEDED,
+ ///
+ ///The feedback for a later version of this resource was already accepted.
+ ///
+ OUTDATED_FEEDBACK,
+ ///
+ ///The product wasn't found or isn't available to the channel.
+ ///
+ PRODUCT_NOT_FOUND,
+ ///
+ ///The input value is invalid.
+ ///
+ INVALID,
+ ///
+ ///The input value is blank.
+ ///
+ BLANK,
+ ///
+ ///The input value needs to be blank.
+ ///
+ PRESENT,
+ ///
+ ///The input value should be less than or equal to the maximum value allowed.
+ ///
+ LESS_THAN_OR_EQUAL_TO,
+ }
+
+ ///
+ ///Represents the Bundles feature configuration for the shop.
+ ///
+ public class BundlesFeature : GraphQLObject
+ {
+ ///
+ ///Whether a shop is configured properly to sell bundles.
+ ///
+ public bool? eligibleForBundles { get; set; }
+ ///
+ ///The reason why a shop is not eligible for bundles.
+ ///
+ public string? ineligibilityReason { get; set; }
+ ///
+ ///Whether a shop has any fixed bundle products or has a cartTransform function installed.
+ ///
+ public bool? sellsBundles { get; set; }
+ }
+
+ ///
+ ///Possible error codes that can be returned by `BusinessCustomerUserError`.
+ ///
+ public enum BusinessCustomerErrorCode
+ {
+ ///
+ ///An internal error occurred.
+ ///
+ INTERNAL_ERROR,
+ ///
+ ///The resource wasn't found.
+ ///
+ RESOURCE_NOT_FOUND,
+ ///
+ ///Deleting the resource failed.
+ ///
+ FAILED_TO_DELETE,
+ ///
+ ///Missing a required field.
+ ///
+ REQUIRED,
+ ///
+ ///The input is empty.
+ ///
+ NO_INPUT,
+ ///
+ ///The input is invalid.
+ ///
+ INVALID_INPUT,
+ ///
+ ///Unexpected type.
+ ///
+ UNEXPECTED_TYPE,
+ ///
+ ///The field value is too long.
+ ///
+ TOO_LONG,
+ ///
+ ///The number of resources exceeded the limit.
+ ///
+ LIMIT_REACHED,
+ ///
+ ///The input value is invalid.
+ ///
+ INVALID,
+ ///
+ ///The input value is blank.
+ ///
+ BLANK,
+ ///
+ ///The input value is already taken.
+ ///
+ TAKEN,
+ }
+
+ ///
+ ///An error that happens during the execution of a business customer mutation.
+ ///
+ public class BusinessCustomerUserError : GraphQLObject, IDisplayableError
+ {
+ ///
+ ///The error code.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The path to the input field that caused the error.
+ ///
+ public IEnumerable? field { get; set; }
+ ///
+ ///The error message.
+ ///
+ public string? message { get; set; }
+ }
+
+ ///
+ ///Represents a merchant's Business Entity.
+ ///
+ public class BusinessEntity : GraphQLObject, INode
+ {
+ ///
+ ///The address of the merchant's Business Entity.
+ ///
+ public BusinessEntityAddress? address { get; set; }
+ ///
+ ///The name of the company associated with the merchant's Business Entity.
+ ///
+ public string? companyName { get; set; }
+ ///
+ ///The display name of the merchant's Business Entity.
+ ///
+ public string? displayName { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///Whether it's the merchant's primary Business Entity.
+ ///
+ public bool? primary { get; set; }
+ ///
+ ///Shopify Payments account information, including balances and payouts.
+ ///
+ public ShopifyPaymentsAccount? shopifyPaymentsAccount { get; set; }
+ }
+
+ ///
+ ///Represents the address of a merchant's Business Entity.
+ ///
+ public class BusinessEntityAddress : GraphQLObject
+ {
+ ///
+ ///The first line of the address. Typically the street address or PO Box number.
+ ///
+ public string? address1 { get; set; }
+ ///
+ ///The second line of the address. Typically the number of the apartment, suite, or unit.
+ ///
+ public string? address2 { get; set; }
+ ///
+ ///The name of the city, district, village, or town.
+ ///
+ public string? city { get; set; }
+ ///
+ ///The country code of the merchant's Business Entity.
+ ///
+ public string? countryCode { get; set; }
+ ///
+ ///The region of the address, such as the province, state, or district.
+ ///
+ public string? province { get; set; }
+ ///
+ ///The zip or postal code of the address.
+ ///
+ public string? zip { get; set; }
+ }
+
+ ///
+ ///Settings describing the behavior of checkout for a B2B buyer.
+ ///
+ public class BuyerExperienceConfiguration : GraphQLObject
+ {
+ ///
+ ///Whether to checkout to draft order for merchant review.
+ ///
+ public bool? checkoutToDraft { get; set; }
+ ///
+ ///The portion required to be paid at checkout.
+ ///
+ public IDepositConfiguration? deposit { get; set; }
+ ///
+ ///Whether to allow customers to use editable shipping addresses.
+ ///
+ public bool? editableShippingAddress { get; set; }
+
+ ///
+ ///Whether a buyer must pay at checkout or they can also choose to pay
+ ///later using net terms.
+ ///
+ [Obsolete("Please use `checkoutToDraft`(must be false) and `paymentTermsTemplate`(must be nil) to derive this instead.")]
+ public bool? payNowOnly { get; set; }
+ ///
+ ///Represents the merchant configured payment terms.
+ ///
+ public PaymentTermsTemplate? paymentTermsTemplate { get; set; }
+ }
+
+ ///
+ ///A discount that is automatically applied to an order that is being edited.
+ ///
+ public class CalculatedAutomaticDiscountApplication : GraphQLObject, ICalculatedDiscountApplication
+ {
+ ///
+ ///The method by which the discount's value is allocated to its entitled items.
+ ///
+ public string? allocationMethod { get; set; }
+ ///
+ ///The level at which the discount was applied.
+ ///
+ public string? appliedTo { get; set; }
+ ///
+ ///The description of discount application. Indicates the reason why the discount was applied.
+ ///
+ public string? description { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///How the discount amount is distributed on the discounted lines.
+ ///
+ public string? targetSelection { get; set; }
+ ///
+ ///Whether the discount is applied on line items or shipping lines.
+ ///
+ public string? targetType { get; set; }
+ ///
+ ///The value of the discount application.
+ ///
+ public IPricingValue? value { get; set; }
+ }
+
+ ///
+ ///An amount discounting the line that has been allocated by an associated discount application.
+ ///
+ public class CalculatedDiscountAllocation : GraphQLObject
+ {
+ ///
+ ///The money amount that's allocated by the discount application in shop and presentment currencies.
+ ///
+ public MoneyBag? allocatedAmountSet { get; set; }
+ ///
+ ///The discount that the allocated amount originated from.
+ ///
+ public ICalculatedDiscountApplication? discountApplication { get; set; }
+ }
+
+ ///
+ ///A [discount application](https://shopify.dev/api/admin-graphql/latest/interfaces/discountapplication) involved in order editing that might be newly added or have new changes applied.
+ ///
+ [JsonPolymorphic(TypeDiscriminatorPropertyName = "__typename")]
+ [JsonDerivedType(typeof(CalculatedAutomaticDiscountApplication), typeDiscriminator: "CalculatedAutomaticDiscountApplication")]
+ [JsonDerivedType(typeof(CalculatedDiscountCodeApplication), typeDiscriminator: "CalculatedDiscountCodeApplication")]
+ [JsonDerivedType(typeof(CalculatedManualDiscountApplication), typeDiscriminator: "CalculatedManualDiscountApplication")]
+ [JsonDerivedType(typeof(CalculatedScriptDiscountApplication), typeDiscriminator: "CalculatedScriptDiscountApplication")]
+ public interface ICalculatedDiscountApplication : IGraphQLObject
+ {
+ public CalculatedAutomaticDiscountApplication? AsCalculatedAutomaticDiscountApplication() => this as CalculatedAutomaticDiscountApplication;
+ public CalculatedDiscountCodeApplication? AsCalculatedDiscountCodeApplication() => this as CalculatedDiscountCodeApplication;
+ public CalculatedManualDiscountApplication? AsCalculatedManualDiscountApplication() => this as CalculatedManualDiscountApplication;
+ public CalculatedScriptDiscountApplication? AsCalculatedScriptDiscountApplication() => this as CalculatedScriptDiscountApplication;
+ ///
+ ///The method by which the discount's value is allocated to its entitled items.
+ ///
+ public string? allocationMethod { get; }
+ ///
+ ///The level at which the discount was applied.
+ ///
+ public string? appliedTo { get; }
+ ///
+ ///The description of discount application. Indicates the reason why the discount was applied.
+ ///
+ public string? description { get; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; }
+ ///
+ ///How the discount amount is distributed on the discounted lines.
+ ///
+ public string? targetSelection { get; }
+ ///
+ ///Whether the discount is applied on line items or shipping lines.
+ ///
+ public string? targetType { get; }
+ ///
+ ///The value of the discount application.
+ ///
+ public IPricingValue? value { get; }
+ }
+
+ ///
+ ///An auto-generated type for paginating through multiple CalculatedDiscountApplications.
+ ///
+ public class CalculatedDiscountApplicationConnection : GraphQLObject, IConnectionWithNodesAndEdges
+ {
+ ///
+ ///The connection between the node and its parent. Each edge contains a minimum of the edge's cursor and the node.
+ ///
+ public IEnumerable? edges { get; set; }
+ ///
+ ///A list of nodes that are contained in CalculatedDiscountApplicationEdge. You can fetch data about an individual node, or you can follow the edges to fetch data about a collection of related nodes. At each node, you specify the fields that you want to retrieve.
+ ///
+ public IEnumerable? nodes { get; set; }
+ ///
+ ///An object that’s used to retrieve [cursor information](https://shopify.dev/api/usage/pagination-graphql) about the current page.
+ ///
+ public PageInfo? pageInfo { get; set; }
+ }
+
+ ///
+ ///An auto-generated type which holds one CalculatedDiscountApplication and a cursor during pagination.
+ ///
+ public class CalculatedDiscountApplicationEdge : GraphQLObject, IEdge
+ {
+ ///
+ ///The position of each node in an array, used in [pagination](https://shopify.dev/api/usage/pagination-graphql).
+ ///
+ public string? cursor { get; set; }
+ ///
+ ///The item at the end of CalculatedDiscountApplicationEdge.
+ ///
+ public ICalculatedDiscountApplication? node { get; set; }
+ }
+
+ ///
+ ///A discount code that is applied to an order that is being edited.
+ ///
+ public class CalculatedDiscountCodeApplication : GraphQLObject, ICalculatedDiscountApplication
+ {
+ ///
+ ///The method by which the discount's value is allocated to its entitled items.
+ ///
+ public string? allocationMethod { get; set; }
+ ///
+ ///The level at which the discount was applied.
+ ///
+ public string? appliedTo { get; set; }
+ ///
+ ///The string identifying the discount code that was used at the time of application.
+ ///
+ public string? code { get; set; }
+ ///
+ ///The description of discount application. Indicates the reason why the discount was applied.
+ ///
+ public string? description { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///How the discount amount is distributed on the discounted lines.
+ ///
+ public string? targetSelection { get; set; }
+ ///
+ ///Whether the discount is applied on line items or shipping lines.
+ ///
+ public string? targetType { get; set; }
+ ///
+ ///The value of the discount application.
+ ///
+ public IPricingValue? value { get; set; }
+ }
+
+ ///
+ ///The calculated fields for a draft order.
+ ///
+ public class CalculatedDraftOrder : GraphQLObject
+ {
+ ///
+ ///Whether or not to accept automatic discounts on the draft order during calculation.
+ ///If false, only discount codes and custom draft order discounts (see `appliedDiscount`) will be applied.
+ ///If true, eligible automatic discounts will be applied in addition to discount codes and custom draft order discounts.
+ ///
+ public bool? acceptAutomaticDiscounts { get; set; }
+ ///
+ ///The list of alerts raised while calculating.
+ ///
+ public IEnumerable? alerts { get; set; }
+ ///
+ ///The custom order-level discount applied.
+ ///
+ public DraftOrderAppliedDiscount? appliedDiscount { get; set; }
+ ///
+ ///The available shipping rates.
+ ///Requires a customer with a valid shipping address and at least one line item.
+ ///
+ public IEnumerable? availableShippingRates { get; set; }
+ ///
+ ///Whether the billing address matches the shipping address.
+ ///
+ public bool? billingAddressMatchesShippingAddress { get; set; }
+ ///
+ ///The shop currency used for calculation.
+ ///
+ public string? currencyCode { get; set; }
+ ///
+ ///The customer who will be sent an invoice.
+ ///
+ public Customer? customer { get; set; }
+ ///
+ ///All discount codes applied.
+ ///
+ public IEnumerable? discountCodes { get; set; }
+ ///
+ ///The list of the line items in the calculated draft order.
+ ///
+ public IEnumerable? lineItems { get; set; }
+ ///
+ ///A subtotal of the line items and corresponding discounts,
+ ///excluding include shipping charges, shipping discounts, taxes, or order discounts.
+ ///
+ public MoneyBag? lineItemsSubtotalPrice { get; set; }
+
+ ///
+ ///The name of the selected market.
+ ///
+ [Obsolete("This field is now incompatible with Markets.")]
+ public string? marketName { get; set; }
+
+ ///
+ ///The selected country code that determines the pricing.
+ ///
+ [Obsolete("This field is now incompatible with Markets.")]
+ public string? marketRegionCountryCode { get; set; }
+ ///
+ ///The assigned phone number.
+ ///
+ public string? phone { get; set; }
+ ///
+ ///The list of platform discounts applied.
+ ///
+ public IEnumerable? platformDiscounts { get; set; }
+ ///
+ ///The payment currency used for calculation.
+ ///
+ public string? presentmentCurrencyCode { get; set; }
+ ///
+ ///The purchasing entity.
+ ///
+ public IPurchasingEntity? purchasingEntity { get; set; }
+ ///
+ ///The line item containing the shipping information and costs.
+ ///
+ public ShippingLine? shippingLine { get; set; }
+
+ ///
+ ///The subtotal, in shop currency, of the line items and their discounts, excluding shipping charges, shipping discounts, and taxes.
+ ///
+ [Obsolete("Use `subtotalPriceSet` instead.")]
+ public decimal? subtotalPrice { get; set; }
+ ///
+ ///The subtotal, of the line items and their discounts, excluding shipping charges, shipping discounts, and taxes.
+ ///
+ public MoneyBag? subtotalPriceSet { get; set; }
+ ///
+ ///The list of of taxes lines charged for each line item and shipping line.
+ ///
+ public IEnumerable? taxLines { get; set; }
+ ///
+ ///Whether the line item prices include taxes.
+ ///
+ public bool? taxesIncluded { get; set; }
+ ///
+ ///Total discounts.
+ ///
+ public MoneyBag? totalDiscountsSet { get; set; }
+ ///
+ ///Total price of line items.
+ ///
+ public MoneyBag? totalLineItemsPriceSet { get; set; }
+
+ ///
+ ///The total price, in shop currency, includes taxes, shipping charges, and discounts.
+ ///
+ [Obsolete("Use `totalPriceSet` instead.")]
+ public decimal? totalPrice { get; set; }
+ ///
+ ///The total price, includes taxes, shipping charges, and discounts.
+ ///
+ public MoneyBag? totalPriceSet { get; set; }
+ ///
+ ///The sum of individual line item quantities.
+ ///If the draft order has bundle items, this is the sum containing the quantities of individual items in the bundle.
+ ///
+ public int? totalQuantityOfLineItems { get; set; }
+
+ ///
+ ///The total shipping price in shop currency.
+ ///
+ [Obsolete("Use `totalShippingPriceSet` instead.")]
+ public decimal? totalShippingPrice { get; set; }
+ ///
+ ///The total shipping price.
+ ///
+ public MoneyBag? totalShippingPriceSet { get; set; }
+
+ ///
+ ///The total tax in shop currency.
+ ///
+ [Obsolete("Use `totalTaxSet` instead.")]
+ public decimal? totalTax { get; set; }
+ ///
+ ///The total tax.
+ ///
+ public MoneyBag? totalTaxSet { get; set; }
+ ///
+ ///Fingerprint of the current cart.
+ ///In order to have bundles work, the fingerprint must be passed to
+ ///each request as it was previously returned, unmodified.
+ ///
+ public string? transformerFingerprint { get; set; }
+ ///
+ ///The list of warnings raised while calculating.
+ ///
+ public IEnumerable? warnings { get; set; }
+ }
+
+ ///
+ ///The calculated line item for a draft order.
+ ///
+ public class CalculatedDraftOrderLineItem : GraphQLObject, IDraftOrderPlatformDiscountAllocationTarget
+ {
+ ///
+ ///The custom applied discount.
+ ///
+ public DraftOrderAppliedDiscount? appliedDiscount { get; set; }
+ ///
+ ///The `discountedTotal` divided by `quantity`,
+ ///equal to the average value of the line item price per unit after discounts are applied.
+ ///This value doesn't include discounts applied to the entire draft order.
+ ///
+ public MoneyBag? approximateDiscountedUnitPriceSet { get; set; }
+ ///
+ ///The bundle components of the draft order line item.
+ ///
+ public IEnumerable? bundleComponents { get; set; }
+ ///
+ ///Whether the line item is custom (`true`) or contains a product variant (`false`).
+ ///
+ public bool? custom { get; set; }
+ ///
+ ///A list of attributes that represent custom features or special requests.
+ ///
+ public IEnumerable? customAttributes { get; set; }
+ ///
+ ///The list of additional information (metafields) with the associated types.
+ ///
+ public IEnumerable? customAttributesV2 { get; set; }
+ ///
+ ///The total price with discounts applied.
+ ///
+ public MoneyV2? discountedTotal { get; set; }
+ ///
+ ///The total price with discounts applied.
+ ///
+ public MoneyBag? discountedTotalSet { get; set; }
+
+ ///
+ ///The unit price with discounts applied.
+ ///
+ [Obsolete("Use `approximateDiscountedUnitPriceSet` instead.")]
+ public MoneyV2? discountedUnitPrice { get; set; }
+
+ ///
+ ///The unit price with discounts applied.
+ ///
+ [Obsolete("Use `approximateDiscountedUnitPriceSet` instead.")]
+ public MoneyBag? discountedUnitPriceSet { get; set; }
+ ///
+ ///Name of the service provider who fulfilled the order.
+ ///
+ ///Valid values are either **manual** or the name of the provider.
+ ///For example, **amazon**, **shipwire**.
+ ///
+ ///Deleted fulfillment services will return null.
+ ///
+ public FulfillmentService? fulfillmentService { get; set; }
+ ///
+ ///The image associated with the draft order line item.
+ ///
+ public Image? image { get; set; }
+ ///
+ ///Whether the line item represents the purchase of a gift card.
+ ///
+ public bool? isGiftCard { get; set; }
+ ///
+ ///The name of the product.
+ ///
+ public string? name { get; set; }
+ ///
+ ///The total price, excluding discounts, equal to the original unit price multiplied by quantity.
+ ///
+ public MoneyV2? originalTotal { get; set; }
+ ///
+ ///The total price excluding discounts, equal to the original unit price multiplied by quantity.
+ ///
+ public MoneyBag? originalTotalSet { get; set; }
+ ///
+ ///The line item price without any discounts applied.
+ ///
+ public MoneyV2? originalUnitPrice { get; set; }
+ ///
+ ///The price without any discounts applied.
+ ///
+ public MoneyBag? originalUnitPriceSet { get; set; }
+ ///
+ ///The original custom line item input price.
+ ///
+ public MoneyV2? originalUnitPriceWithCurrency { get; set; }
+ ///
+ ///The product for the line item.
+ ///
+ public Product? product { get; set; }
+ ///
+ ///The quantity of items. For a bundle item, this is the quantity of bundles,
+ ///not the quantity of items contained in the bundles themselves.
+ ///
+ public int? quantity { get; set; }
+ ///
+ ///Whether physical shipping is required for the variant.
+ ///
+ public bool? requiresShipping { get; set; }
+ ///
+ ///The SKU number of the product variant.
+ ///
+ public string? sku { get; set; }
+ ///
+ ///Whether the variant is taxable.
+ ///
+ public bool? taxable { get; set; }
+ ///
+ ///The title of the product or variant. This field only applies to custom line items.
+ ///
+ public string? title { get; set; }
+ ///
+ ///The total value of the discount.
+ ///
+ public MoneyV2? totalDiscount { get; set; }
+ ///
+ ///The total discount amount.
+ ///
+ public MoneyBag? totalDiscountSet { get; set; }
+ ///
+ ///The UUID of the draft order line item. Must be unique and consistent across requests.
+ ///This field is mandatory in order to manipulate drafts with bundles.
+ ///
+ public string? uuid { get; set; }
+ ///
+ ///The product variant for the line item.
+ ///
+ public ProductVariant? variant { get; set; }
+ ///
+ ///The name of the variant.
+ ///
+ public string? variantTitle { get; set; }
+ ///
+ ///The name of the vendor who created the product variant.
+ ///
+ public string? vendor { get; set; }
+ ///
+ ///The weight unit and value.
+ ///
+ public Weight? weight { get; set; }
+ }
+
+ ///
+ ///A calculated exchange line item.
+ ///
+ public class CalculatedExchangeLineItem : GraphQLObject
+ {
+ ///
+ ///The discounts that have been allocated onto the line item by discount applications.
+ ///
+ public IEnumerable? calculatedDiscountAllocations { get; set; }
+ ///
+ ///The unit price of the exchange line item after discounts.
+ ///
+ public MoneyBag? discountedUnitPriceSet { get; set; }
+ ///
+ ///A globally-unique ID.
+ ///
+ public string? id { get; set; }
+ ///
+ ///The original unit price of the exchange line item before discounts.
+ ///
+ public MoneyBag? originalUnitPriceSet { get; set; }
+ ///
+ ///The quantity being exchanged.
+ ///
+ public int? quantity { get; set; }
+ ///
+ ///The calculated subtotal set of the exchange line item, including discounts.
+ ///
+ public MoneyBag? subtotalSet { get; set; }
+ ///
+ ///The total tax of the exchange line item.
+ ///
+ public MoneyBag? totalTaxSet { get; set; }
+ ///
+ ///The variant being exchanged.
+ ///
+ public ProductVariant? variant { get; set; }
+ }
+
+ ///
+ ///A line item involved in order editing that may be newly added or have new changes applied.
+ ///
+ public class CalculatedLineItem : GraphQLObject
+ {
+ ///
+ ///The discounts that have been allocated onto the line item by discount applications.
+ ///
+ public IEnumerable? calculatedDiscountAllocations { get; set; }
+ ///