1. Packages
  2. Google Cloud (GCP) Classic
  3. API Docs
  4. apigee
  5. ApiProduct
Google Cloud v8.40.0 published on Monday, Aug 11, 2025 by Pulumi

gcp.apigee.ApiProduct

Explore with Pulumi AI

gcp logo
Google Cloud v8.40.0 published on Monday, Aug 11, 2025 by Pulumi

    An ApiProduct in Apigee.

    To get more information about ApiProduct, see:

    Example Usage

    Apigee Api Product Basic

    import * as pulumi from "@pulumi/pulumi";
    import * as gcp from "@pulumi/gcp";
    
    const current = gcp.organizations.getClientConfig({});
    const apigeeNetwork = new gcp.compute.Network("apigee_network", {name: "apigee-network"});
    const apigeeRange = new gcp.compute.GlobalAddress("apigee_range", {
        name: "apigee-range",
        purpose: "VPC_PEERING",
        addressType: "INTERNAL",
        prefixLength: 16,
        network: apigeeNetwork.id,
    });
    const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigee_vpc_connection", {
        network: apigeeNetwork.id,
        service: "servicenetworking.googleapis.com",
        reservedPeeringRanges: [apigeeRange.name],
    });
    const apigeeOrg = new gcp.apigee.Organization("apigee_org", {
        analyticsRegion: "us-central1",
        projectId: current.then(current => current.project),
        authorizedNetwork: apigeeNetwork.id,
    }, {
        dependsOn: [apigeeVpcConnection],
    });
    const apigeeInstance = new gcp.apigee.Instance("apigee_instance", {
        name: "my-instance",
        location: "us-central1",
        orgId: apigeeOrg.id,
        peeringCidrRange: "SLASH_22",
    });
    const basicApiProduct = new gcp.apigee.ApiProduct("basic_api_product", {
        orgId: apigeeOrg.id,
        name: "my-product",
        displayName: "My Basic API Product",
        approvalType: "auto",
    }, {
        dependsOn: [apigeeInstance],
    });
    
    import pulumi
    import pulumi_gcp as gcp
    
    current = gcp.organizations.get_client_config()
    apigee_network = gcp.compute.Network("apigee_network", name="apigee-network")
    apigee_range = gcp.compute.GlobalAddress("apigee_range",
        name="apigee-range",
        purpose="VPC_PEERING",
        address_type="INTERNAL",
        prefix_length=16,
        network=apigee_network.id)
    apigee_vpc_connection = gcp.servicenetworking.Connection("apigee_vpc_connection",
        network=apigee_network.id,
        service="servicenetworking.googleapis.com",
        reserved_peering_ranges=[apigee_range.name])
    apigee_org = gcp.apigee.Organization("apigee_org",
        analytics_region="us-central1",
        project_id=current.project,
        authorized_network=apigee_network.id,
        opts = pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))
    apigee_instance = gcp.apigee.Instance("apigee_instance",
        name="my-instance",
        location="us-central1",
        org_id=apigee_org.id,
        peering_cidr_range="SLASH_22")
    basic_api_product = gcp.apigee.ApiProduct("basic_api_product",
        org_id=apigee_org.id,
        name="my-product",
        display_name="My Basic API Product",
        approval_type="auto",
        opts = pulumi.ResourceOptions(depends_on=[apigee_instance]))
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		current, err := organizations.GetClientConfig(ctx, map[string]interface{}{}, nil)
    		if err != nil {
    			return err
    		}
    		apigeeNetwork, err := compute.NewNetwork(ctx, "apigee_network", &compute.NetworkArgs{
    			Name: pulumi.String("apigee-network"),
    		})
    		if err != nil {
    			return err
    		}
    		apigeeRange, err := compute.NewGlobalAddress(ctx, "apigee_range", &compute.GlobalAddressArgs{
    			Name:         pulumi.String("apigee-range"),
    			Purpose:      pulumi.String("VPC_PEERING"),
    			AddressType:  pulumi.String("INTERNAL"),
    			PrefixLength: pulumi.Int(16),
    			Network:      apigeeNetwork.ID(),
    		})
    		if err != nil {
    			return err
    		}
    		apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigee_vpc_connection", &servicenetworking.ConnectionArgs{
    			Network: apigeeNetwork.ID(),
    			Service: pulumi.String("servicenetworking.googleapis.com"),
    			ReservedPeeringRanges: pulumi.StringArray{
    				apigeeRange.Name,
    			},
    		})
    		if err != nil {
    			return err
    		}
    		apigeeOrg, err := apigee.NewOrganization(ctx, "apigee_org", &apigee.OrganizationArgs{
    			AnalyticsRegion:   pulumi.String("us-central1"),
    			ProjectId:         pulumi.String(current.Project),
    			AuthorizedNetwork: apigeeNetwork.ID(),
    		}, pulumi.DependsOn([]pulumi.Resource{
    			apigeeVpcConnection,
    		}))
    		if err != nil {
    			return err
    		}
    		apigeeInstance, err := apigee.NewInstance(ctx, "apigee_instance", &apigee.InstanceArgs{
    			Name:             pulumi.String("my-instance"),
    			Location:         pulumi.String("us-central1"),
    			OrgId:            apigeeOrg.ID(),
    			PeeringCidrRange: pulumi.String("SLASH_22"),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = apigee.NewApiProduct(ctx, "basic_api_product", &apigee.ApiProductArgs{
    			OrgId:        apigeeOrg.ID(),
    			Name:         pulumi.String("my-product"),
    			DisplayName:  pulumi.String("My Basic API Product"),
    			ApprovalType: pulumi.String("auto"),
    		}, pulumi.DependsOn([]pulumi.Resource{
    			apigeeInstance,
    		}))
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Gcp = Pulumi.Gcp;
    
    return await Deployment.RunAsync(() => 
    {
        var current = Gcp.Organizations.GetClientConfig.Invoke();
    
        var apigeeNetwork = new Gcp.Compute.Network("apigee_network", new()
        {
            Name = "apigee-network",
        });
    
        var apigeeRange = new Gcp.Compute.GlobalAddress("apigee_range", new()
        {
            Name = "apigee-range",
            Purpose = "VPC_PEERING",
            AddressType = "INTERNAL",
            PrefixLength = 16,
            Network = apigeeNetwork.Id,
        });
    
        var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigee_vpc_connection", new()
        {
            Network = apigeeNetwork.Id,
            Service = "servicenetworking.googleapis.com",
            ReservedPeeringRanges = new[]
            {
                apigeeRange.Name,
            },
        });
    
        var apigeeOrg = new Gcp.Apigee.Organization("apigee_org", new()
        {
            AnalyticsRegion = "us-central1",
            ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project),
            AuthorizedNetwork = apigeeNetwork.Id,
        }, new CustomResourceOptions
        {
            DependsOn =
            {
                apigeeVpcConnection,
            },
        });
    
        var apigeeInstance = new Gcp.Apigee.Instance("apigee_instance", new()
        {
            Name = "my-instance",
            Location = "us-central1",
            OrgId = apigeeOrg.Id,
            PeeringCidrRange = "SLASH_22",
        });
    
        var basicApiProduct = new Gcp.Apigee.ApiProduct("basic_api_product", new()
        {
            OrgId = apigeeOrg.Id,
            Name = "my-product",
            DisplayName = "My Basic API Product",
            ApprovalType = "auto",
        }, new CustomResourceOptions
        {
            DependsOn =
            {
                apigeeInstance,
            },
        });
    
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.gcp.organizations.OrganizationsFunctions;
    import com.pulumi.gcp.compute.Network;
    import com.pulumi.gcp.compute.NetworkArgs;
    import com.pulumi.gcp.compute.GlobalAddress;
    import com.pulumi.gcp.compute.GlobalAddressArgs;
    import com.pulumi.gcp.servicenetworking.Connection;
    import com.pulumi.gcp.servicenetworking.ConnectionArgs;
    import com.pulumi.gcp.apigee.Organization;
    import com.pulumi.gcp.apigee.OrganizationArgs;
    import com.pulumi.gcp.apigee.Instance;
    import com.pulumi.gcp.apigee.InstanceArgs;
    import com.pulumi.gcp.apigee.ApiProduct;
    import com.pulumi.gcp.apigee.ApiProductArgs;
    import com.pulumi.resources.CustomResourceOptions;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Map;
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class App {
        public static void main(String[] args) {
            Pulumi.run(App::stack);
        }
    
        public static void stack(Context ctx) {
            final var current = OrganizationsFunctions.getClientConfig(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);
    
            var apigeeNetwork = new Network("apigeeNetwork", NetworkArgs.builder()
                .name("apigee-network")
                .build());
    
            var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder()
                .name("apigee-range")
                .purpose("VPC_PEERING")
                .addressType("INTERNAL")
                .prefixLength(16)
                .network(apigeeNetwork.id())
                .build());
    
            var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder()
                .network(apigeeNetwork.id())
                .service("servicenetworking.googleapis.com")
                .reservedPeeringRanges(apigeeRange.name())
                .build());
    
            var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder()
                .analyticsRegion("us-central1")
                .projectId(current.project())
                .authorizedNetwork(apigeeNetwork.id())
                .build(), CustomResourceOptions.builder()
                    .dependsOn(apigeeVpcConnection)
                    .build());
    
            var apigeeInstance = new Instance("apigeeInstance", InstanceArgs.builder()
                .name("my-instance")
                .location("us-central1")
                .orgId(apigeeOrg.id())
                .peeringCidrRange("SLASH_22")
                .build());
    
            var basicApiProduct = new ApiProduct("basicApiProduct", ApiProductArgs.builder()
                .orgId(apigeeOrg.id())
                .name("my-product")
                .displayName("My Basic API Product")
                .approvalType("auto")
                .build(), CustomResourceOptions.builder()
                    .dependsOn(apigeeInstance)
                    .build());
    
        }
    }
    
    resources:
      apigeeNetwork:
        type: gcp:compute:Network
        name: apigee_network
        properties:
          name: apigee-network
      apigeeRange:
        type: gcp:compute:GlobalAddress
        name: apigee_range
        properties:
          name: apigee-range
          purpose: VPC_PEERING
          addressType: INTERNAL
          prefixLength: 16
          network: ${apigeeNetwork.id}
      apigeeVpcConnection:
        type: gcp:servicenetworking:Connection
        name: apigee_vpc_connection
        properties:
          network: ${apigeeNetwork.id}
          service: servicenetworking.googleapis.com
          reservedPeeringRanges:
            - ${apigeeRange.name}
      apigeeOrg:
        type: gcp:apigee:Organization
        name: apigee_org
        properties:
          analyticsRegion: us-central1
          projectId: ${current.project}
          authorizedNetwork: ${apigeeNetwork.id}
        options:
          dependsOn:
            - ${apigeeVpcConnection}
      apigeeInstance:
        type: gcp:apigee:Instance
        name: apigee_instance
        properties:
          name: my-instance
          location: us-central1
          orgId: ${apigeeOrg.id}
          peeringCidrRange: SLASH_22
      basicApiProduct:
        type: gcp:apigee:ApiProduct
        name: basic_api_product
        properties:
          orgId: ${apigeeOrg.id}
          name: my-product
          displayName: My Basic API Product
          approvalType: auto
        options:
          dependsOn:
            - ${apigeeInstance}
    variables:
      current:
        fn::invoke:
          function: gcp:organizations:getClientConfig
          arguments: {}
    

    Apigee Api Product With Legacy Operation

    import * as pulumi from "@pulumi/pulumi";
    import * as gcp from "@pulumi/gcp";
    
    const current = gcp.organizations.getClientConfig({});
    const apigeeNetwork = new gcp.compute.Network("apigee_network", {name: "apigee-network"});
    const apigeeRange = new gcp.compute.GlobalAddress("apigee_range", {
        name: "apigee-range",
        purpose: "VPC_PEERING",
        addressType: "INTERNAL",
        prefixLength: 16,
        network: apigeeNetwork.id,
    });
    const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigee_vpc_connection", {
        network: apigeeNetwork.id,
        service: "servicenetworking.googleapis.com",
        reservedPeeringRanges: [apigeeRange.name],
    });
    const apigeeOrg = new gcp.apigee.Organization("apigee_org", {
        analyticsRegion: "us-central1",
        projectId: current.then(current => current.project),
        authorizedNetwork: apigeeNetwork.id,
    }, {
        dependsOn: [apigeeVpcConnection],
    });
    const apigeeInstance = new gcp.apigee.Instance("apigee_instance", {
        name: "my-instance",
        location: "us-central1",
        orgId: apigeeOrg.id,
        peeringCidrRange: "SLASH_22",
    });
    const fullApiProduct = new gcp.apigee.ApiProduct("full_api_product", {
        orgId: apigeeOrg.id,
        name: "my-product",
        displayName: "My full API Product",
        approvalType: "auto",
        description: "This is a sample API Product created with Terraform.",
        attributes: [{
            name: "access",
            value: "private",
        }],
        environments: [
            "dev",
            "hom",
        ],
        proxies: ["hello-world"],
        apiResources: [
            "/",
            "/weather/**",
        ],
        scopes: [
            "read:weather",
            "write:reports",
        ],
        quota: "10000",
        quotaInterval: "1",
        quotaTimeUnit: "day",
        quotaCounterScope: "PROXY",
    }, {
        dependsOn: [apigeeInstance],
    });
    
    import pulumi
    import pulumi_gcp as gcp
    
    current = gcp.organizations.get_client_config()
    apigee_network = gcp.compute.Network("apigee_network", name="apigee-network")
    apigee_range = gcp.compute.GlobalAddress("apigee_range",
        name="apigee-range",
        purpose="VPC_PEERING",
        address_type="INTERNAL",
        prefix_length=16,
        network=apigee_network.id)
    apigee_vpc_connection = gcp.servicenetworking.Connection("apigee_vpc_connection",
        network=apigee_network.id,
        service="servicenetworking.googleapis.com",
        reserved_peering_ranges=[apigee_range.name])
    apigee_org = gcp.apigee.Organization("apigee_org",
        analytics_region="us-central1",
        project_id=current.project,
        authorized_network=apigee_network.id,
        opts = pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))
    apigee_instance = gcp.apigee.Instance("apigee_instance",
        name="my-instance",
        location="us-central1",
        org_id=apigee_org.id,
        peering_cidr_range="SLASH_22")
    full_api_product = gcp.apigee.ApiProduct("full_api_product",
        org_id=apigee_org.id,
        name="my-product",
        display_name="My full API Product",
        approval_type="auto",
        description="This is a sample API Product created with Terraform.",
        attributes=[{
            "name": "access",
            "value": "private",
        }],
        environments=[
            "dev",
            "hom",
        ],
        proxies=["hello-world"],
        api_resources=[
            "/",
            "/weather/**",
        ],
        scopes=[
            "read:weather",
            "write:reports",
        ],
        quota="10000",
        quota_interval="1",
        quota_time_unit="day",
        quota_counter_scope="PROXY",
        opts = pulumi.ResourceOptions(depends_on=[apigee_instance]))
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		current, err := organizations.GetClientConfig(ctx, map[string]interface{}{}, nil)
    		if err != nil {
    			return err
    		}
    		apigeeNetwork, err := compute.NewNetwork(ctx, "apigee_network", &compute.NetworkArgs{
    			Name: pulumi.String("apigee-network"),
    		})
    		if err != nil {
    			return err
    		}
    		apigeeRange, err := compute.NewGlobalAddress(ctx, "apigee_range", &compute.GlobalAddressArgs{
    			Name:         pulumi.String("apigee-range"),
    			Purpose:      pulumi.String("VPC_PEERING"),
    			AddressType:  pulumi.String("INTERNAL"),
    			PrefixLength: pulumi.Int(16),
    			Network:      apigeeNetwork.ID(),
    		})
    		if err != nil {
    			return err
    		}
    		apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigee_vpc_connection", &servicenetworking.ConnectionArgs{
    			Network: apigeeNetwork.ID(),
    			Service: pulumi.String("servicenetworking.googleapis.com"),
    			ReservedPeeringRanges: pulumi.StringArray{
    				apigeeRange.Name,
    			},
    		})
    		if err != nil {
    			return err
    		}
    		apigeeOrg, err := apigee.NewOrganization(ctx, "apigee_org", &apigee.OrganizationArgs{
    			AnalyticsRegion:   pulumi.String("us-central1"),
    			ProjectId:         pulumi.String(current.Project),
    			AuthorizedNetwork: apigeeNetwork.ID(),
    		}, pulumi.DependsOn([]pulumi.Resource{
    			apigeeVpcConnection,
    		}))
    		if err != nil {
    			return err
    		}
    		apigeeInstance, err := apigee.NewInstance(ctx, "apigee_instance", &apigee.InstanceArgs{
    			Name:             pulumi.String("my-instance"),
    			Location:         pulumi.String("us-central1"),
    			OrgId:            apigeeOrg.ID(),
    			PeeringCidrRange: pulumi.String("SLASH_22"),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = apigee.NewApiProduct(ctx, "full_api_product", &apigee.ApiProductArgs{
    			OrgId:        apigeeOrg.ID(),
    			Name:         pulumi.String("my-product"),
    			DisplayName:  pulumi.String("My full API Product"),
    			ApprovalType: pulumi.String("auto"),
    			Description:  pulumi.String("This is a sample API Product created with Terraform."),
    			Attributes: apigee.ApiProductAttributeArray{
    				&apigee.ApiProductAttributeArgs{
    					Name:  pulumi.String("access"),
    					Value: pulumi.String("private"),
    				},
    			},
    			Environments: pulumi.StringArray{
    				pulumi.String("dev"),
    				pulumi.String("hom"),
    			},
    			Proxies: pulumi.StringArray{
    				pulumi.String("hello-world"),
    			},
    			ApiResources: pulumi.StringArray{
    				pulumi.String("/"),
    				pulumi.String("/weather/**"),
    			},
    			Scopes: pulumi.StringArray{
    				pulumi.String("read:weather"),
    				pulumi.String("write:reports"),
    			},
    			Quota:             pulumi.String("10000"),
    			QuotaInterval:     pulumi.String("1"),
    			QuotaTimeUnit:     pulumi.String("day"),
    			QuotaCounterScope: pulumi.String("PROXY"),
    		}, pulumi.DependsOn([]pulumi.Resource{
    			apigeeInstance,
    		}))
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Gcp = Pulumi.Gcp;
    
    return await Deployment.RunAsync(() => 
    {
        var current = Gcp.Organizations.GetClientConfig.Invoke();
    
        var apigeeNetwork = new Gcp.Compute.Network("apigee_network", new()
        {
            Name = "apigee-network",
        });
    
        var apigeeRange = new Gcp.Compute.GlobalAddress("apigee_range", new()
        {
            Name = "apigee-range",
            Purpose = "VPC_PEERING",
            AddressType = "INTERNAL",
            PrefixLength = 16,
            Network = apigeeNetwork.Id,
        });
    
        var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigee_vpc_connection", new()
        {
            Network = apigeeNetwork.Id,
            Service = "servicenetworking.googleapis.com",
            ReservedPeeringRanges = new[]
            {
                apigeeRange.Name,
            },
        });
    
        var apigeeOrg = new Gcp.Apigee.Organization("apigee_org", new()
        {
            AnalyticsRegion = "us-central1",
            ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project),
            AuthorizedNetwork = apigeeNetwork.Id,
        }, new CustomResourceOptions
        {
            DependsOn =
            {
                apigeeVpcConnection,
            },
        });
    
        var apigeeInstance = new Gcp.Apigee.Instance("apigee_instance", new()
        {
            Name = "my-instance",
            Location = "us-central1",
            OrgId = apigeeOrg.Id,
            PeeringCidrRange = "SLASH_22",
        });
    
        var fullApiProduct = new Gcp.Apigee.ApiProduct("full_api_product", new()
        {
            OrgId = apigeeOrg.Id,
            Name = "my-product",
            DisplayName = "My full API Product",
            ApprovalType = "auto",
            Description = "This is a sample API Product created with Terraform.",
            Attributes = new[]
            {
                new Gcp.Apigee.Inputs.ApiProductAttributeArgs
                {
                    Name = "access",
                    Value = "private",
                },
            },
            Environments = new[]
            {
                "dev",
                "hom",
            },
            Proxies = new[]
            {
                "hello-world",
            },
            ApiResources = new[]
            {
                "/",
                "/weather/**",
            },
            Scopes = new[]
            {
                "read:weather",
                "write:reports",
            },
            Quota = "10000",
            QuotaInterval = "1",
            QuotaTimeUnit = "day",
            QuotaCounterScope = "PROXY",
        }, new CustomResourceOptions
        {
            DependsOn =
            {
                apigeeInstance,
            },
        });
    
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.gcp.organizations.OrganizationsFunctions;
    import com.pulumi.gcp.compute.Network;
    import com.pulumi.gcp.compute.NetworkArgs;
    import com.pulumi.gcp.compute.GlobalAddress;
    import com.pulumi.gcp.compute.GlobalAddressArgs;
    import com.pulumi.gcp.servicenetworking.Connection;
    import com.pulumi.gcp.servicenetworking.ConnectionArgs;
    import com.pulumi.gcp.apigee.Organization;
    import com.pulumi.gcp.apigee.OrganizationArgs;
    import com.pulumi.gcp.apigee.Instance;
    import com.pulumi.gcp.apigee.InstanceArgs;
    import com.pulumi.gcp.apigee.ApiProduct;
    import com.pulumi.gcp.apigee.ApiProductArgs;
    import com.pulumi.gcp.apigee.inputs.ApiProductAttributeArgs;
    import com.pulumi.resources.CustomResourceOptions;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Map;
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class App {
        public static void main(String[] args) {
            Pulumi.run(App::stack);
        }
    
        public static void stack(Context ctx) {
            final var current = OrganizationsFunctions.getClientConfig(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);
    
            var apigeeNetwork = new Network("apigeeNetwork", NetworkArgs.builder()
                .name("apigee-network")
                .build());
    
            var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder()
                .name("apigee-range")
                .purpose("VPC_PEERING")
                .addressType("INTERNAL")
                .prefixLength(16)
                .network(apigeeNetwork.id())
                .build());
    
            var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder()
                .network(apigeeNetwork.id())
                .service("servicenetworking.googleapis.com")
                .reservedPeeringRanges(apigeeRange.name())
                .build());
    
            var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder()
                .analyticsRegion("us-central1")
                .projectId(current.project())
                .authorizedNetwork(apigeeNetwork.id())
                .build(), CustomResourceOptions.builder()
                    .dependsOn(apigeeVpcConnection)
                    .build());
    
            var apigeeInstance = new Instance("apigeeInstance", InstanceArgs.builder()
                .name("my-instance")
                .location("us-central1")
                .orgId(apigeeOrg.id())
                .peeringCidrRange("SLASH_22")
                .build());
    
            var fullApiProduct = new ApiProduct("fullApiProduct", ApiProductArgs.builder()
                .orgId(apigeeOrg.id())
                .name("my-product")
                .displayName("My full API Product")
                .approvalType("auto")
                .description("This is a sample API Product created with Terraform.")
                .attributes(ApiProductAttributeArgs.builder()
                    .name("access")
                    .value("private")
                    .build())
                .environments(            
                    "dev",
                    "hom")
                .proxies("hello-world")
                .apiResources(            
                    "/",
                    "/weather/**")
                .scopes(            
                    "read:weather",
                    "write:reports")
                .quota("10000")
                .quotaInterval("1")
                .quotaTimeUnit("day")
                .quotaCounterScope("PROXY")
                .build(), CustomResourceOptions.builder()
                    .dependsOn(apigeeInstance)
                    .build());
    
        }
    }
    
    resources:
      apigeeNetwork:
        type: gcp:compute:Network
        name: apigee_network
        properties:
          name: apigee-network
      apigeeRange:
        type: gcp:compute:GlobalAddress
        name: apigee_range
        properties:
          name: apigee-range
          purpose: VPC_PEERING
          addressType: INTERNAL
          prefixLength: 16
          network: ${apigeeNetwork.id}
      apigeeVpcConnection:
        type: gcp:servicenetworking:Connection
        name: apigee_vpc_connection
        properties:
          network: ${apigeeNetwork.id}
          service: servicenetworking.googleapis.com
          reservedPeeringRanges:
            - ${apigeeRange.name}
      apigeeOrg:
        type: gcp:apigee:Organization
        name: apigee_org
        properties:
          analyticsRegion: us-central1
          projectId: ${current.project}
          authorizedNetwork: ${apigeeNetwork.id}
        options:
          dependsOn:
            - ${apigeeVpcConnection}
      apigeeInstance:
        type: gcp:apigee:Instance
        name: apigee_instance
        properties:
          name: my-instance
          location: us-central1
          orgId: ${apigeeOrg.id}
          peeringCidrRange: SLASH_22
      fullApiProduct:
        type: gcp:apigee:ApiProduct
        name: full_api_product
        properties:
          orgId: ${apigeeOrg.id}
          name: my-product
          displayName: My full API Product
          approvalType: auto
          description: This is a sample API Product created with Terraform.
          attributes:
            - name: access
              value: private
          environments:
            - dev
            - hom
          proxies:
            - hello-world
          apiResources:
            - /
            - /weather/**
          scopes:
            - read:weather
            - write:reports
          quota: '10000'
          quotaInterval: '1'
          quotaTimeUnit: day
          quotaCounterScope: PROXY
        options:
          dependsOn:
            - ${apigeeInstance}
    variables:
      current:
        fn::invoke:
          function: gcp:organizations:getClientConfig
          arguments: {}
    

    Apigee Api Product With Attributes

    import * as pulumi from "@pulumi/pulumi";
    import * as gcp from "@pulumi/gcp";
    
    const current = gcp.organizations.getClientConfig({});
    const apigeeNetwork = new gcp.compute.Network("apigee_network", {name: "apigee-network"});
    const apigeeRange = new gcp.compute.GlobalAddress("apigee_range", {
        name: "apigee-range",
        purpose: "VPC_PEERING",
        addressType: "INTERNAL",
        prefixLength: 16,
        network: apigeeNetwork.id,
    });
    const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigee_vpc_connection", {
        network: apigeeNetwork.id,
        service: "servicenetworking.googleapis.com",
        reservedPeeringRanges: [apigeeRange.name],
    });
    const apigeeOrg = new gcp.apigee.Organization("apigee_org", {
        analyticsRegion: "us-central1",
        projectId: current.then(current => current.project),
        authorizedNetwork: apigeeNetwork.id,
    }, {
        dependsOn: [apigeeVpcConnection],
    });
    const apigeeInstance = new gcp.apigee.Instance("apigee_instance", {
        name: "my-instance",
        location: "us-central1",
        orgId: apigeeOrg.id,
        peeringCidrRange: "SLASH_22",
    });
    const fullApiProduct = new gcp.apigee.ApiProduct("full_api_product", {
        orgId: apigeeOrg.id,
        name: "my-product",
        displayName: "My full API Product",
        approvalType: "auto",
        description: "This is a sample API Product created with Terraform.",
        quota: "10000",
        quotaInterval: "1",
        quotaTimeUnit: "day",
        quotaCounterScope: "PROXY",
        environments: [
            "dev",
            "hom",
        ],
        scopes: [
            "read:weather",
            "write:reports",
        ],
        attributes: [
            {
                name: "access",
                value: "private",
            },
            {
                name: "custom",
                value: "value",
            },
        ],
        operationGroup: {
            operationConfigType: "proxy",
            operationConfigs: [
                {
                    apiSource: "anoter-proxy",
                    operations: [{
                        resource: "/",
                        methods: [
                            "POST",
                            "GET",
                        ],
                    }],
                    quota: {
                        limit: "1000",
                        interval: "5",
                        timeUnit: "minute",
                    },
                    attributes: [{
                        name: "custom",
                        value: "value",
                    }],
                },
                {
                    apiSource: "hello-world",
                    operations: [{
                        resource: "/test",
                        methods: [
                            "POST",
                            "GET",
                        ],
                    }],
                    quota: {
                        limit: "10",
                        interval: "30",
                        timeUnit: "second",
                    },
                    attributes: [{
                        name: "custom",
                        value: "value",
                    }],
                },
            ],
        },
        graphqlOperationGroup: {
            operationConfigType: "proxy",
            operationConfigs: [
                {
                    apiSource: "hello-world",
                    quota: {
                        limit: "30",
                        interval: "50",
                        timeUnit: "second",
                    },
                    operations: [{
                        operationTypes: ["QUERY"],
                        operation: "test",
                    }],
                    attributes: [{
                        name: "custom",
                        value: "value",
                    }],
                },
                {
                    apiSource: "another-proxy",
                    quota: {
                        limit: "50000",
                        interval: "12",
                        timeUnit: "hour",
                    },
                    operations: [{
                        operationTypes: ["MUTATION"],
                        operation: "test",
                    }],
                    attributes: [{
                        name: "custom",
                        value: "value",
                    }],
                },
            ],
        },
        grpcOperationGroup: {
            operationConfigs: [
                {
                    apiSource: "another-proxy",
                    service: "grpc another test",
                    methods: [
                        "method3",
                        "method4",
                    ],
                    quota: {
                        limit: "1000000",
                        interval: "1",
                        timeUnit: "month",
                    },
                    attributes: [{
                        name: "graph",
                        value: "value",
                    }],
                },
                {
                    apiSource: "hello-world",
                    service: "grpc test",
                    methods: [
                        "method1",
                        "method2",
                    ],
                    quota: {
                        limit: "5",
                        interval: "1",
                        timeUnit: "second",
                    },
                    attributes: [{
                        name: "graph",
                        value: "value",
                    }],
                },
            ],
        },
    }, {
        dependsOn: [apigeeInstance],
    });
    
    import pulumi
    import pulumi_gcp as gcp
    
    current = gcp.organizations.get_client_config()
    apigee_network = gcp.compute.Network("apigee_network", name="apigee-network")
    apigee_range = gcp.compute.GlobalAddress("apigee_range",
        name="apigee-range",
        purpose="VPC_PEERING",
        address_type="INTERNAL",
        prefix_length=16,
        network=apigee_network.id)
    apigee_vpc_connection = gcp.servicenetworking.Connection("apigee_vpc_connection",
        network=apigee_network.id,
        service="servicenetworking.googleapis.com",
        reserved_peering_ranges=[apigee_range.name])
    apigee_org = gcp.apigee.Organization("apigee_org",
        analytics_region="us-central1",
        project_id=current.project,
        authorized_network=apigee_network.id,
        opts = pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))
    apigee_instance = gcp.apigee.Instance("apigee_instance",
        name="my-instance",
        location="us-central1",
        org_id=apigee_org.id,
        peering_cidr_range="SLASH_22")
    full_api_product = gcp.apigee.ApiProduct("full_api_product",
        org_id=apigee_org.id,
        name="my-product",
        display_name="My full API Product",
        approval_type="auto",
        description="This is a sample API Product created with Terraform.",
        quota="10000",
        quota_interval="1",
        quota_time_unit="day",
        quota_counter_scope="PROXY",
        environments=[
            "dev",
            "hom",
        ],
        scopes=[
            "read:weather",
            "write:reports",
        ],
        attributes=[
            {
                "name": "access",
                "value": "private",
            },
            {
                "name": "custom",
                "value": "value",
            },
        ],
        operation_group={
            "operation_config_type": "proxy",
            "operation_configs": [
                {
                    "api_source": "anoter-proxy",
                    "operations": [{
                        "resource": "/",
                        "methods": [
                            "POST",
                            "GET",
                        ],
                    }],
                    "quota": {
                        "limit": "1000",
                        "interval": "5",
                        "time_unit": "minute",
                    },
                    "attributes": [{
                        "name": "custom",
                        "value": "value",
                    }],
                },
                {
                    "api_source": "hello-world",
                    "operations": [{
                        "resource": "/test",
                        "methods": [
                            "POST",
                            "GET",
                        ],
                    }],
                    "quota": {
                        "limit": "10",
                        "interval": "30",
                        "time_unit": "second",
                    },
                    "attributes": [{
                        "name": "custom",
                        "value": "value",
                    }],
                },
            ],
        },
        graphql_operation_group={
            "operation_config_type": "proxy",
            "operation_configs": [
                {
                    "api_source": "hello-world",
                    "quota": {
                        "limit": "30",
                        "interval": "50",
                        "time_unit": "second",
                    },
                    "operations": [{
                        "operation_types": ["QUERY"],
                        "operation": "test",
                    }],
                    "attributes": [{
                        "name": "custom",
                        "value": "value",
                    }],
                },
                {
                    "api_source": "another-proxy",
                    "quota": {
                        "limit": "50000",
                        "interval": "12",
                        "time_unit": "hour",
                    },
                    "operations": [{
                        "operation_types": ["MUTATION"],
                        "operation": "test",
                    }],
                    "attributes": [{
                        "name": "custom",
                        "value": "value",
                    }],
                },
            ],
        },
        grpc_operation_group={
            "operation_configs": [
                {
                    "api_source": "another-proxy",
                    "service": "grpc another test",
                    "methods": [
                        "method3",
                        "method4",
                    ],
                    "quota": {
                        "limit": "1000000",
                        "interval": "1",
                        "time_unit": "month",
                    },
                    "attributes": [{
                        "name": "graph",
                        "value": "value",
                    }],
                },
                {
                    "api_source": "hello-world",
                    "service": "grpc test",
                    "methods": [
                        "method1",
                        "method2",
                    ],
                    "quota": {
                        "limit": "5",
                        "interval": "1",
                        "time_unit": "second",
                    },
                    "attributes": [{
                        "name": "graph",
                        "value": "value",
                    }],
                },
            ],
        },
        opts = pulumi.ResourceOptions(depends_on=[apigee_instance]))
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations"
    	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		current, err := organizations.GetClientConfig(ctx, map[string]interface{}{}, nil)
    		if err != nil {
    			return err
    		}
    		apigeeNetwork, err := compute.NewNetwork(ctx, "apigee_network", &compute.NetworkArgs{
    			Name: pulumi.String("apigee-network"),
    		})
    		if err != nil {
    			return err
    		}
    		apigeeRange, err := compute.NewGlobalAddress(ctx, "apigee_range", &compute.GlobalAddressArgs{
    			Name:         pulumi.String("apigee-range"),
    			Purpose:      pulumi.String("VPC_PEERING"),
    			AddressType:  pulumi.String("INTERNAL"),
    			PrefixLength: pulumi.Int(16),
    			Network:      apigeeNetwork.ID(),
    		})
    		if err != nil {
    			return err
    		}
    		apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigee_vpc_connection", &servicenetworking.ConnectionArgs{
    			Network: apigeeNetwork.ID(),
    			Service: pulumi.String("servicenetworking.googleapis.com"),
    			ReservedPeeringRanges: pulumi.StringArray{
    				apigeeRange.Name,
    			},
    		})
    		if err != nil {
    			return err
    		}
    		apigeeOrg, err := apigee.NewOrganization(ctx, "apigee_org", &apigee.OrganizationArgs{
    			AnalyticsRegion:   pulumi.String("us-central1"),
    			ProjectId:         pulumi.String(current.Project),
    			AuthorizedNetwork: apigeeNetwork.ID(),
    		}, pulumi.DependsOn([]pulumi.Resource{
    			apigeeVpcConnection,
    		}))
    		if err != nil {
    			return err
    		}
    		apigeeInstance, err := apigee.NewInstance(ctx, "apigee_instance", &apigee.InstanceArgs{
    			Name:             pulumi.String("my-instance"),
    			Location:         pulumi.String("us-central1"),
    			OrgId:            apigeeOrg.ID(),
    			PeeringCidrRange: pulumi.String("SLASH_22"),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = apigee.NewApiProduct(ctx, "full_api_product", &apigee.ApiProductArgs{
    			OrgId:             apigeeOrg.ID(),
    			Name:              pulumi.String("my-product"),
    			DisplayName:       pulumi.String("My full API Product"),
    			ApprovalType:      pulumi.String("auto"),
    			Description:       pulumi.String("This is a sample API Product created with Terraform."),
    			Quota:             pulumi.String("10000"),
    			QuotaInterval:     pulumi.String("1"),
    			QuotaTimeUnit:     pulumi.String("day"),
    			QuotaCounterScope: pulumi.String("PROXY"),
    			Environments: pulumi.StringArray{
    				pulumi.String("dev"),
    				pulumi.String("hom"),
    			},
    			Scopes: pulumi.StringArray{
    				pulumi.String("read:weather"),
    				pulumi.String("write:reports"),
    			},
    			Attributes: apigee.ApiProductAttributeArray{
    				&apigee.ApiProductAttributeArgs{
    					Name:  pulumi.String("access"),
    					Value: pulumi.String("private"),
    				},
    				&apigee.ApiProductAttributeArgs{
    					Name:  pulumi.String("custom"),
    					Value: pulumi.String("value"),
    				},
    			},
    			OperationGroup: &apigee.ApiProductOperationGroupArgs{
    				OperationConfigType: pulumi.String("proxy"),
    				OperationConfigs: apigee.ApiProductOperationGroupOperationConfigArray{
    					&apigee.ApiProductOperationGroupOperationConfigArgs{
    						ApiSource: pulumi.String("anoter-proxy"),
    						Operations: apigee.ApiProductOperationGroupOperationConfigOperationArray{
    							&apigee.ApiProductOperationGroupOperationConfigOperationArgs{
    								Resource: pulumi.String("/"),
    								Methods: pulumi.StringArray{
    									pulumi.String("POST"),
    									pulumi.String("GET"),
    								},
    							},
    						},
    						Quota: &apigee.ApiProductOperationGroupOperationConfigQuotaArgs{
    							Limit:    pulumi.String("1000"),
    							Interval: pulumi.String("5"),
    							TimeUnit: pulumi.String("minute"),
    						},
    						Attributes: apigee.ApiProductOperationGroupOperationConfigAttributeArray{
    							&apigee.ApiProductOperationGroupOperationConfigAttributeArgs{
    								Name:  pulumi.String("custom"),
    								Value: pulumi.String("value"),
    							},
    						},
    					},
    					&apigee.ApiProductOperationGroupOperationConfigArgs{
    						ApiSource: pulumi.String("hello-world"),
    						Operations: apigee.ApiProductOperationGroupOperationConfigOperationArray{
    							&apigee.ApiProductOperationGroupOperationConfigOperationArgs{
    								Resource: pulumi.String("/test"),
    								Methods: pulumi.StringArray{
    									pulumi.String("POST"),
    									pulumi.String("GET"),
    								},
    							},
    						},
    						Quota: &apigee.ApiProductOperationGroupOperationConfigQuotaArgs{
    							Limit:    pulumi.String("10"),
    							Interval: pulumi.String("30"),
    							TimeUnit: pulumi.String("second"),
    						},
    						Attributes: apigee.ApiProductOperationGroupOperationConfigAttributeArray{
    							&apigee.ApiProductOperationGroupOperationConfigAttributeArgs{
    								Name:  pulumi.String("custom"),
    								Value: pulumi.String("value"),
    							},
    						},
    					},
    				},
    			},
    			GraphqlOperationGroup: &apigee.ApiProductGraphqlOperationGroupArgs{
    				OperationConfigType: pulumi.String("proxy"),
    				OperationConfigs: apigee.ApiProductGraphqlOperationGroupOperationConfigArray{
    					&apigee.ApiProductGraphqlOperationGroupOperationConfigArgs{
    						ApiSource: pulumi.String("hello-world"),
    						Quota: &apigee.ApiProductGraphqlOperationGroupOperationConfigQuotaArgs{
    							Limit:    pulumi.String("30"),
    							Interval: pulumi.String("50"),
    							TimeUnit: pulumi.String("second"),
    						},
    						Operations: apigee.ApiProductGraphqlOperationGroupOperationConfigOperationArray{
    							&apigee.ApiProductGraphqlOperationGroupOperationConfigOperationArgs{
    								OperationTypes: pulumi.StringArray{
    									pulumi.String("QUERY"),
    								},
    								Operation: pulumi.String("test"),
    							},
    						},
    						Attributes: apigee.ApiProductGraphqlOperationGroupOperationConfigAttributeArray{
    							&apigee.ApiProductGraphqlOperationGroupOperationConfigAttributeArgs{
    								Name:  pulumi.String("custom"),
    								Value: pulumi.String("value"),
    							},
    						},
    					},
    					&apigee.ApiProductGraphqlOperationGroupOperationConfigArgs{
    						ApiSource: pulumi.String("another-proxy"),
    						Quota: &apigee.ApiProductGraphqlOperationGroupOperationConfigQuotaArgs{
    							Limit:    pulumi.String("50000"),
    							Interval: pulumi.String("12"),
    							TimeUnit: pulumi.String("hour"),
    						},
    						Operations: apigee.ApiProductGraphqlOperationGroupOperationConfigOperationArray{
    							&apigee.ApiProductGraphqlOperationGroupOperationConfigOperationArgs{
    								OperationTypes: pulumi.StringArray{
    									pulumi.String("MUTATION"),
    								},
    								Operation: pulumi.String("test"),
    							},
    						},
    						Attributes: apigee.ApiProductGraphqlOperationGroupOperationConfigAttributeArray{
    							&apigee.ApiProductGraphqlOperationGroupOperationConfigAttributeArgs{
    								Name:  pulumi.String("custom"),
    								Value: pulumi.String("value"),
    							},
    						},
    					},
    				},
    			},
    			GrpcOperationGroup: &apigee.ApiProductGrpcOperationGroupArgs{
    				OperationConfigs: apigee.ApiProductGrpcOperationGroupOperationConfigArray{
    					&apigee.ApiProductGrpcOperationGroupOperationConfigArgs{
    						ApiSource: pulumi.String("another-proxy"),
    						Service:   pulumi.String("grpc another test"),
    						Methods: pulumi.StringArray{
    							pulumi.String("method3"),
    							pulumi.String("method4"),
    						},
    						Quota: &apigee.ApiProductGrpcOperationGroupOperationConfigQuotaArgs{
    							Limit:    pulumi.String("1000000"),
    							Interval: pulumi.String("1"),
    							TimeUnit: pulumi.String("month"),
    						},
    						Attributes: apigee.ApiProductGrpcOperationGroupOperationConfigAttributeArray{
    							&apigee.ApiProductGrpcOperationGroupOperationConfigAttributeArgs{
    								Name:  pulumi.String("graph"),
    								Value: pulumi.String("value"),
    							},
    						},
    					},
    					&apigee.ApiProductGrpcOperationGroupOperationConfigArgs{
    						ApiSource: pulumi.String("hello-world"),
    						Service:   pulumi.String("grpc test"),
    						Methods: pulumi.StringArray{
    							pulumi.String("method1"),
    							pulumi.String("method2"),
    						},
    						Quota: &apigee.ApiProductGrpcOperationGroupOperationConfigQuotaArgs{
    							Limit:    pulumi.String("5"),
    							Interval: pulumi.String("1"),
    							TimeUnit: pulumi.String("second"),
    						},
    						Attributes: apigee.ApiProductGrpcOperationGroupOperationConfigAttributeArray{
    							&apigee.ApiProductGrpcOperationGroupOperationConfigAttributeArgs{
    								Name:  pulumi.String("graph"),
    								Value: pulumi.String("value"),
    							},
    						},
    					},
    				},
    			},
    		}, pulumi.DependsOn([]pulumi.Resource{
    			apigeeInstance,
    		}))
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Gcp = Pulumi.Gcp;
    
    return await Deployment.RunAsync(() => 
    {
        var current = Gcp.Organizations.GetClientConfig.Invoke();
    
        var apigeeNetwork = new Gcp.Compute.Network("apigee_network", new()
        {
            Name = "apigee-network",
        });
    
        var apigeeRange = new Gcp.Compute.GlobalAddress("apigee_range", new()
        {
            Name = "apigee-range",
            Purpose = "VPC_PEERING",
            AddressType = "INTERNAL",
            PrefixLength = 16,
            Network = apigeeNetwork.Id,
        });
    
        var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigee_vpc_connection", new()
        {
            Network = apigeeNetwork.Id,
            Service = "servicenetworking.googleapis.com",
            ReservedPeeringRanges = new[]
            {
                apigeeRange.Name,
            },
        });
    
        var apigeeOrg = new Gcp.Apigee.Organization("apigee_org", new()
        {
            AnalyticsRegion = "us-central1",
            ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project),
            AuthorizedNetwork = apigeeNetwork.Id,
        }, new CustomResourceOptions
        {
            DependsOn =
            {
                apigeeVpcConnection,
            },
        });
    
        var apigeeInstance = new Gcp.Apigee.Instance("apigee_instance", new()
        {
            Name = "my-instance",
            Location = "us-central1",
            OrgId = apigeeOrg.Id,
            PeeringCidrRange = "SLASH_22",
        });
    
        var fullApiProduct = new Gcp.Apigee.ApiProduct("full_api_product", new()
        {
            OrgId = apigeeOrg.Id,
            Name = "my-product",
            DisplayName = "My full API Product",
            ApprovalType = "auto",
            Description = "This is a sample API Product created with Terraform.",
            Quota = "10000",
            QuotaInterval = "1",
            QuotaTimeUnit = "day",
            QuotaCounterScope = "PROXY",
            Environments = new[]
            {
                "dev",
                "hom",
            },
            Scopes = new[]
            {
                "read:weather",
                "write:reports",
            },
            Attributes = new[]
            {
                new Gcp.Apigee.Inputs.ApiProductAttributeArgs
                {
                    Name = "access",
                    Value = "private",
                },
                new Gcp.Apigee.Inputs.ApiProductAttributeArgs
                {
                    Name = "custom",
                    Value = "value",
                },
            },
            OperationGroup = new Gcp.Apigee.Inputs.ApiProductOperationGroupArgs
            {
                OperationConfigType = "proxy",
                OperationConfigs = new[]
                {
                    new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigArgs
                    {
                        ApiSource = "anoter-proxy",
                        Operations = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigOperationArgs
                            {
                                Resource = "/",
                                Methods = new[]
                                {
                                    "POST",
                                    "GET",
                                },
                            },
                        },
                        Quota = new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigQuotaArgs
                        {
                            Limit = "1000",
                            Interval = "5",
                            TimeUnit = "minute",
                        },
                        Attributes = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigAttributeArgs
                            {
                                Name = "custom",
                                Value = "value",
                            },
                        },
                    },
                    new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigArgs
                    {
                        ApiSource = "hello-world",
                        Operations = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigOperationArgs
                            {
                                Resource = "/test",
                                Methods = new[]
                                {
                                    "POST",
                                    "GET",
                                },
                            },
                        },
                        Quota = new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigQuotaArgs
                        {
                            Limit = "10",
                            Interval = "30",
                            TimeUnit = "second",
                        },
                        Attributes = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigAttributeArgs
                            {
                                Name = "custom",
                                Value = "value",
                            },
                        },
                    },
                },
            },
            GraphqlOperationGroup = new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupArgs
            {
                OperationConfigType = "proxy",
                OperationConfigs = new[]
                {
                    new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigArgs
                    {
                        ApiSource = "hello-world",
                        Quota = new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigQuotaArgs
                        {
                            Limit = "30",
                            Interval = "50",
                            TimeUnit = "second",
                        },
                        Operations = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigOperationArgs
                            {
                                OperationTypes = new[]
                                {
                                    "QUERY",
                                },
                                Operation = "test",
                            },
                        },
                        Attributes = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigAttributeArgs
                            {
                                Name = "custom",
                                Value = "value",
                            },
                        },
                    },
                    new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigArgs
                    {
                        ApiSource = "another-proxy",
                        Quota = new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigQuotaArgs
                        {
                            Limit = "50000",
                            Interval = "12",
                            TimeUnit = "hour",
                        },
                        Operations = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigOperationArgs
                            {
                                OperationTypes = new[]
                                {
                                    "MUTATION",
                                },
                                Operation = "test",
                            },
                        },
                        Attributes = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigAttributeArgs
                            {
                                Name = "custom",
                                Value = "value",
                            },
                        },
                    },
                },
            },
            GrpcOperationGroup = new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupArgs
            {
                OperationConfigs = new[]
                {
                    new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigArgs
                    {
                        ApiSource = "another-proxy",
                        Service = "grpc another test",
                        Methods = new[]
                        {
                            "method3",
                            "method4",
                        },
                        Quota = new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigQuotaArgs
                        {
                            Limit = "1000000",
                            Interval = "1",
                            TimeUnit = "month",
                        },
                        Attributes = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigAttributeArgs
                            {
                                Name = "graph",
                                Value = "value",
                            },
                        },
                    },
                    new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigArgs
                    {
                        ApiSource = "hello-world",
                        Service = "grpc test",
                        Methods = new[]
                        {
                            "method1",
                            "method2",
                        },
                        Quota = new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigQuotaArgs
                        {
                            Limit = "5",
                            Interval = "1",
                            TimeUnit = "second",
                        },
                        Attributes = new[]
                        {
                            new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigAttributeArgs
                            {
                                Name = "graph",
                                Value = "value",
                            },
                        },
                    },
                },
            },
        }, new CustomResourceOptions
        {
            DependsOn =
            {
                apigeeInstance,
            },
        });
    
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.gcp.organizations.OrganizationsFunctions;
    import com.pulumi.gcp.compute.Network;
    import com.pulumi.gcp.compute.NetworkArgs;
    import com.pulumi.gcp.compute.GlobalAddress;
    import com.pulumi.gcp.compute.GlobalAddressArgs;
    import com.pulumi.gcp.servicenetworking.Connection;
    import com.pulumi.gcp.servicenetworking.ConnectionArgs;
    import com.pulumi.gcp.apigee.Organization;
    import com.pulumi.gcp.apigee.OrganizationArgs;
    import com.pulumi.gcp.apigee.Instance;
    import com.pulumi.gcp.apigee.InstanceArgs;
    import com.pulumi.gcp.apigee.ApiProduct;
    import com.pulumi.gcp.apigee.ApiProductArgs;
    import com.pulumi.gcp.apigee.inputs.ApiProductAttributeArgs;
    import com.pulumi.gcp.apigee.inputs.ApiProductOperationGroupArgs;
    import com.pulumi.gcp.apigee.inputs.ApiProductGraphqlOperationGroupArgs;
    import com.pulumi.gcp.apigee.inputs.ApiProductGrpcOperationGroupArgs;
    import com.pulumi.resources.CustomResourceOptions;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.Map;
    import java.io.File;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    public class App {
        public static void main(String[] args) {
            Pulumi.run(App::stack);
        }
    
        public static void stack(Context ctx) {
            final var current = OrganizationsFunctions.getClientConfig(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference);
    
            var apigeeNetwork = new Network("apigeeNetwork", NetworkArgs.builder()
                .name("apigee-network")
                .build());
    
            var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder()
                .name("apigee-range")
                .purpose("VPC_PEERING")
                .addressType("INTERNAL")
                .prefixLength(16)
                .network(apigeeNetwork.id())
                .build());
    
            var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder()
                .network(apigeeNetwork.id())
                .service("servicenetworking.googleapis.com")
                .reservedPeeringRanges(apigeeRange.name())
                .build());
    
            var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder()
                .analyticsRegion("us-central1")
                .projectId(current.project())
                .authorizedNetwork(apigeeNetwork.id())
                .build(), CustomResourceOptions.builder()
                    .dependsOn(apigeeVpcConnection)
                    .build());
    
            var apigeeInstance = new Instance("apigeeInstance", InstanceArgs.builder()
                .name("my-instance")
                .location("us-central1")
                .orgId(apigeeOrg.id())
                .peeringCidrRange("SLASH_22")
                .build());
    
            var fullApiProduct = new ApiProduct("fullApiProduct", ApiProductArgs.builder()
                .orgId(apigeeOrg.id())
                .name("my-product")
                .displayName("My full API Product")
                .approvalType("auto")
                .description("This is a sample API Product created with Terraform.")
                .quota("10000")
                .quotaInterval("1")
                .quotaTimeUnit("day")
                .quotaCounterScope("PROXY")
                .environments(            
                    "dev",
                    "hom")
                .scopes(            
                    "read:weather",
                    "write:reports")
                .attributes(            
                    ApiProductAttributeArgs.builder()
                        .name("access")
                        .value("private")
                        .build(),
                    ApiProductAttributeArgs.builder()
                        .name("custom")
                        .value("value")
                        .build())
                .operationGroup(ApiProductOperationGroupArgs.builder()
                    .operationConfigType("proxy")
                    .operationConfigs(                
                        ApiProductOperationGroupOperationConfigArgs.builder()
                            .apiSource("anoter-proxy")
                            .operations(ApiProductOperationGroupOperationConfigOperationArgs.builder()
                                .resource("/")
                                .methods(                            
                                    "POST",
                                    "GET")
                                .build())
                            .quota(ApiProductOperationGroupOperationConfigQuotaArgs.builder()
                                .limit("1000")
                                .interval("5")
                                .timeUnit("minute")
                                .build())
                            .attributes(ApiProductOperationGroupOperationConfigAttributeArgs.builder()
                                .name("custom")
                                .value("value")
                                .build())
                            .build(),
                        ApiProductOperationGroupOperationConfigArgs.builder()
                            .apiSource("hello-world")
                            .operations(ApiProductOperationGroupOperationConfigOperationArgs.builder()
                                .resource("/test")
                                .methods(                            
                                    "POST",
                                    "GET")
                                .build())
                            .quota(ApiProductOperationGroupOperationConfigQuotaArgs.builder()
                                .limit("10")
                                .interval("30")
                                .timeUnit("second")
                                .build())
                            .attributes(ApiProductOperationGroupOperationConfigAttributeArgs.builder()
                                .name("custom")
                                .value("value")
                                .build())
                            .build())
                    .build())
                .graphqlOperationGroup(ApiProductGraphqlOperationGroupArgs.builder()
                    .operationConfigType("proxy")
                    .operationConfigs(                
                        ApiProductGraphqlOperationGroupOperationConfigArgs.builder()
                            .apiSource("hello-world")
                            .quota(ApiProductGraphqlOperationGroupOperationConfigQuotaArgs.builder()
                                .limit("30")
                                .interval("50")
                                .timeUnit("second")
                                .build())
                            .operations(ApiProductGraphqlOperationGroupOperationConfigOperationArgs.builder()
                                .operationTypes("QUERY")
                                .operation("test")
                                .build())
                            .attributes(ApiProductGraphqlOperationGroupOperationConfigAttributeArgs.builder()
                                .name("custom")
                                .value("value")
                                .build())
                            .build(),
                        ApiProductGraphqlOperationGroupOperationConfigArgs.builder()
                            .apiSource("another-proxy")
                            .quota(ApiProductGraphqlOperationGroupOperationConfigQuotaArgs.builder()
                                .limit("50000")
                                .interval("12")
                                .timeUnit("hour")
                                .build())
                            .operations(ApiProductGraphqlOperationGroupOperationConfigOperationArgs.builder()
                                .operationTypes("MUTATION")
                                .operation("test")
                                .build())
                            .attributes(ApiProductGraphqlOperationGroupOperationConfigAttributeArgs.builder()
                                .name("custom")
                                .value("value")
                                .build())
                            .build())
                    .build())
                .grpcOperationGroup(ApiProductGrpcOperationGroupArgs.builder()
                    .operationConfigs(                
                        ApiProductGrpcOperationGroupOperationConfigArgs.builder()
                            .apiSource("another-proxy")
                            .service("grpc another test")
                            .methods(                        
                                "method3",
                                "method4")
                            .quota(ApiProductGrpcOperationGroupOperationConfigQuotaArgs.builder()
                                .limit("1000000")
                                .interval("1")
                                .timeUnit("month")
                                .build())
                            .attributes(ApiProductGrpcOperationGroupOperationConfigAttributeArgs.builder()
                                .name("graph")
                                .value("value")
                                .build())
                            .build(),
                        ApiProductGrpcOperationGroupOperationConfigArgs.builder()
                            .apiSource("hello-world")
                            .service("grpc test")
                            .methods(                        
                                "method1",
                                "method2")
                            .quota(ApiProductGrpcOperationGroupOperationConfigQuotaArgs.builder()
                                .limit("5")
                                .interval("1")
                                .timeUnit("second")
                                .build())
                            .attributes(ApiProductGrpcOperationGroupOperationConfigAttributeArgs.builder()
                                .name("graph")
                                .value("value")
                                .build())
                            .build())
                    .build())
                .build(), CustomResourceOptions.builder()
                    .dependsOn(apigeeInstance)
                    .build());
    
        }
    }
    
    resources:
      apigeeNetwork:
        type: gcp:compute:Network
        name: apigee_network
        properties:
          name: apigee-network
      apigeeRange:
        type: gcp:compute:GlobalAddress
        name: apigee_range
        properties:
          name: apigee-range
          purpose: VPC_PEERING
          addressType: INTERNAL
          prefixLength: 16
          network: ${apigeeNetwork.id}
      apigeeVpcConnection:
        type: gcp:servicenetworking:Connection
        name: apigee_vpc_connection
        properties:
          network: ${apigeeNetwork.id}
          service: servicenetworking.googleapis.com
          reservedPeeringRanges:
            - ${apigeeRange.name}
      apigeeOrg:
        type: gcp:apigee:Organization
        name: apigee_org
        properties:
          analyticsRegion: us-central1
          projectId: ${current.project}
          authorizedNetwork: ${apigeeNetwork.id}
        options:
          dependsOn:
            - ${apigeeVpcConnection}
      apigeeInstance:
        type: gcp:apigee:Instance
        name: apigee_instance
        properties:
          name: my-instance
          location: us-central1
          orgId: ${apigeeOrg.id}
          peeringCidrRange: SLASH_22
      fullApiProduct:
        type: gcp:apigee:ApiProduct
        name: full_api_product
        properties:
          orgId: ${apigeeOrg.id}
          name: my-product
          displayName: My full API Product
          approvalType: auto
          description: This is a sample API Product created with Terraform.
          quota: '10000'
          quotaInterval: '1'
          quotaTimeUnit: day
          quotaCounterScope: PROXY
          environments:
            - dev
            - hom
          scopes:
            - read:weather
            - write:reports
          attributes:
            - name: access
              value: private
            - name: custom
              value: value
          operationGroup:
            operationConfigType: proxy
            operationConfigs:
              - apiSource: anoter-proxy
                operations:
                  - resource: /
                    methods:
                      - POST
                      - GET
                quota:
                  limit: '1000'
                  interval: '5'
                  timeUnit: minute
                attributes:
                  - name: custom
                    value: value
              - apiSource: hello-world
                operations:
                  - resource: /test
                    methods:
                      - POST
                      - GET
                quota:
                  limit: '10'
                  interval: '30'
                  timeUnit: second
                attributes:
                  - name: custom
                    value: value
          graphqlOperationGroup:
            operationConfigType: proxy
            operationConfigs:
              - apiSource: hello-world
                quota:
                  limit: '30'
                  interval: '50'
                  timeUnit: second
                operations:
                  - operationTypes:
                      - QUERY
                    operation: test
                attributes:
                  - name: custom
                    value: value
              - apiSource: another-proxy
                quota:
                  limit: '50000'
                  interval: '12'
                  timeUnit: hour
                operations:
                  - operationTypes:
                      - MUTATION
                    operation: test
                attributes:
                  - name: custom
                    value: value
          grpcOperationGroup:
            operationConfigs:
              - apiSource: another-proxy
                service: grpc another test
                methods:
                  - method3
                  - method4
                quota:
                  limit: '1000000'
                  interval: '1'
                  timeUnit: month
                attributes:
                  - name: graph
                    value: value
              - apiSource: hello-world
                service: grpc test
                methods:
                  - method1
                  - method2
                quota:
                  limit: '5'
                  interval: '1'
                  timeUnit: second
                attributes:
                  - name: graph
                    value: value
        options:
          dependsOn:
            - ${apigeeInstance}
    variables:
      current:
        fn::invoke:
          function: gcp:organizations:getClientConfig
          arguments: {}
    

    Create ApiProduct Resource

    Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.

    Constructor syntax

    new ApiProduct(name: string, args: ApiProductArgs, opts?: CustomResourceOptions);
    @overload
    def ApiProduct(resource_name: str,
                   args: ApiProductArgs,
                   opts: Optional[ResourceOptions] = None)
    
    @overload
    def ApiProduct(resource_name: str,
                   opts: Optional[ResourceOptions] = None,
                   display_name: Optional[str] = None,
                   org_id: Optional[str] = None,
                   name: Optional[str] = None,
                   operation_group: Optional[ApiProductOperationGroupArgs] = None,
                   attributes: Optional[Sequence[ApiProductAttributeArgs]] = None,
                   environments: Optional[Sequence[str]] = None,
                   graphql_operation_group: Optional[ApiProductGraphqlOperationGroupArgs] = None,
                   grpc_operation_group: Optional[ApiProductGrpcOperationGroupArgs] = None,
                   api_resources: Optional[Sequence[str]] = None,
                   description: Optional[str] = None,
                   approval_type: Optional[str] = None,
                   proxies: Optional[Sequence[str]] = None,
                   quota: Optional[str] = None,
                   quota_counter_scope: Optional[str] = None,
                   quota_interval: Optional[str] = None,
                   quota_time_unit: Optional[str] = None,
                   scopes: Optional[Sequence[str]] = None,
                   space: Optional[str] = None)
    func NewApiProduct(ctx *Context, name string, args ApiProductArgs, opts ...ResourceOption) (*ApiProduct, error)
    public ApiProduct(string name, ApiProductArgs args, CustomResourceOptions? opts = null)
    public ApiProduct(String name, ApiProductArgs args)
    public ApiProduct(String name, ApiProductArgs args, CustomResourceOptions options)
    
    type: gcp:apigee:ApiProduct
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    

    Parameters

    name string
    The unique name of the resource.
    args ApiProductArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    resource_name str
    The unique name of the resource.
    args ApiProductArgs
    The arguments to resource properties.
    opts ResourceOptions
    Bag of options to control resource's behavior.
    ctx Context
    Context object for the current deployment.
    name string
    The unique name of the resource.
    args ApiProductArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args ApiProductArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args ApiProductArgs
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    Constructor example

    The following reference example uses placeholder values for all input properties.

    var apiProductResource = new Gcp.Apigee.ApiProduct("apiProductResource", new()
    {
        DisplayName = "string",
        OrgId = "string",
        Name = "string",
        OperationGroup = new Gcp.Apigee.Inputs.ApiProductOperationGroupArgs
        {
            OperationConfigType = "string",
            OperationConfigs = new[]
            {
                new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigArgs
                {
                    ApiSource = "string",
                    Attributes = new[]
                    {
                        new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigAttributeArgs
                        {
                            Name = "string",
                            Value = "string",
                        },
                    },
                    Operations = new[]
                    {
                        new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigOperationArgs
                        {
                            Methods = new[]
                            {
                                "string",
                            },
                            Resource = "string",
                        },
                    },
                    Quota = new Gcp.Apigee.Inputs.ApiProductOperationGroupOperationConfigQuotaArgs
                    {
                        Interval = "string",
                        Limit = "string",
                        TimeUnit = "string",
                    },
                },
            },
        },
        Attributes = new[]
        {
            new Gcp.Apigee.Inputs.ApiProductAttributeArgs
            {
                Name = "string",
                Value = "string",
            },
        },
        Environments = new[]
        {
            "string",
        },
        GraphqlOperationGroup = new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupArgs
        {
            OperationConfigType = "string",
            OperationConfigs = new[]
            {
                new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigArgs
                {
                    ApiSource = "string",
                    Attributes = new[]
                    {
                        new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigAttributeArgs
                        {
                            Name = "string",
                            Value = "string",
                        },
                    },
                    Operations = new[]
                    {
                        new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigOperationArgs
                        {
                            Operation = "string",
                            OperationTypes = new[]
                            {
                                "string",
                            },
                        },
                    },
                    Quota = new Gcp.Apigee.Inputs.ApiProductGraphqlOperationGroupOperationConfigQuotaArgs
                    {
                        Interval = "string",
                        Limit = "string",
                        TimeUnit = "string",
                    },
                },
            },
        },
        GrpcOperationGroup = new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupArgs
        {
            OperationConfigs = new[]
            {
                new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigArgs
                {
                    ApiSource = "string",
                    Attributes = new[]
                    {
                        new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigAttributeArgs
                        {
                            Name = "string",
                            Value = "string",
                        },
                    },
                    Methods = new[]
                    {
                        "string",
                    },
                    Quota = new Gcp.Apigee.Inputs.ApiProductGrpcOperationGroupOperationConfigQuotaArgs
                    {
                        Interval = "string",
                        Limit = "string",
                        TimeUnit = "string",
                    },
                    Service = "string",
                },
            },
        },
        ApiResources = new[]
        {
            "string",
        },
        Description = "string",
        ApprovalType = "string",
        Proxies = new[]
        {
            "string",
        },
        Quota = "string",
        QuotaCounterScope = "string",
        QuotaInterval = "string",
        QuotaTimeUnit = "string",
        Scopes = new[]
        {
            "string",
        },
        Space = "string",
    });
    
    example, err := apigee.NewApiProduct(ctx, "apiProductResource", &apigee.ApiProductArgs{
    	DisplayName: pulumi.String("string"),
    	OrgId:       pulumi.String("string"),
    	Name:        pulumi.String("string"),
    	OperationGroup: &apigee.ApiProductOperationGroupArgs{
    		OperationConfigType: pulumi.String("string"),
    		OperationConfigs: apigee.ApiProductOperationGroupOperationConfigArray{
    			&apigee.ApiProductOperationGroupOperationConfigArgs{
    				ApiSource: pulumi.String("string"),
    				Attributes: apigee.ApiProductOperationGroupOperationConfigAttributeArray{
    					&apigee.ApiProductOperationGroupOperationConfigAttributeArgs{
    						Name:  pulumi.String("string"),
    						Value: pulumi.String("string"),
    					},
    				},
    				Operations: apigee.ApiProductOperationGroupOperationConfigOperationArray{
    					&apigee.ApiProductOperationGroupOperationConfigOperationArgs{
    						Methods: pulumi.StringArray{
    							pulumi.String("string"),
    						},
    						Resource: pulumi.String("string"),
    					},
    				},
    				Quota: &apigee.ApiProductOperationGroupOperationConfigQuotaArgs{
    					Interval: pulumi.String("string"),
    					Limit:    pulumi.String("string"),
    					TimeUnit: pulumi.String("string"),
    				},
    			},
    		},
    	},
    	Attributes: apigee.ApiProductAttributeArray{
    		&apigee.ApiProductAttributeArgs{
    			Name:  pulumi.String("string"),
    			Value: pulumi.String("string"),
    		},
    	},
    	Environments: pulumi.StringArray{
    		pulumi.String("string"),
    	},
    	GraphqlOperationGroup: &apigee.ApiProductGraphqlOperationGroupArgs{
    		OperationConfigType: pulumi.String("string"),
    		OperationConfigs: apigee.ApiProductGraphqlOperationGroupOperationConfigArray{
    			&apigee.ApiProductGraphqlOperationGroupOperationConfigArgs{
    				ApiSource: pulumi.String("string"),
    				Attributes: apigee.ApiProductGraphqlOperationGroupOperationConfigAttributeArray{
    					&apigee.ApiProductGraphqlOperationGroupOperationConfigAttributeArgs{
    						Name:  pulumi.String("string"),
    						Value: pulumi.String("string"),
    					},
    				},
    				Operations: apigee.ApiProductGraphqlOperationGroupOperationConfigOperationArray{
    					&apigee.ApiProductGraphqlOperationGroupOperationConfigOperationArgs{
    						Operation: pulumi.String("string"),
    						OperationTypes: pulumi.StringArray{
    							pulumi.String("string"),
    						},
    					},
    				},
    				Quota: &apigee.ApiProductGraphqlOperationGroupOperationConfigQuotaArgs{
    					Interval: pulumi.String("string"),
    					Limit:    pulumi.String("string"),
    					TimeUnit: pulumi.String("string"),
    				},
    			},
    		},
    	},
    	GrpcOperationGroup: &apigee.ApiProductGrpcOperationGroupArgs{
    		OperationConfigs: apigee.ApiProductGrpcOperationGroupOperationConfigArray{
    			&apigee.ApiProductGrpcOperationGroupOperationConfigArgs{
    				ApiSource: pulumi.String("string"),
    				Attributes: apigee.ApiProductGrpcOperationGroupOperationConfigAttributeArray{
    					&apigee.ApiProductGrpcOperationGroupOperationConfigAttributeArgs{
    						Name:  pulumi.String("string"),
    						Value: pulumi.String("string"),
    					},
    				},
    				Methods: pulumi.StringArray{
    					pulumi.String("string"),
    				},
    				Quota: &apigee.ApiProductGrpcOperationGroupOperationConfigQuotaArgs{
    					Interval: pulumi.String("string"),
    					Limit:    pulumi.String("string"),
    					TimeUnit: pulumi.String("string"),
    				},
    				Service: pulumi.String("string"),
    			},
    		},
    	},
    	ApiResources: pulumi.StringArray{
    		pulumi.String("string"),
    	},
    	Description:  pulumi.String("string"),
    	ApprovalType: pulumi.String("string"),
    	Proxies: pulumi.StringArray{
    		pulumi.String("string"),
    	},
    	Quota:             pulumi.String("string"),
    	QuotaCounterScope: pulumi.String("string"),
    	QuotaInterval:     pulumi.String("string"),
    	QuotaTimeUnit:     pulumi.String("string"),
    	Scopes: pulumi.StringArray{
    		pulumi.String("string"),
    	},
    	Space: pulumi.String("string"),
    })
    
    var apiProductResource = new ApiProduct("apiProductResource", ApiProductArgs.builder()
        .displayName("string")
        .orgId("string")
        .name("string")
        .operationGroup(ApiProductOperationGroupArgs.builder()
            .operationConfigType("string")
            .operationConfigs(ApiProductOperationGroupOperationConfigArgs.builder()
                .apiSource("string")
                .attributes(ApiProductOperationGroupOperationConfigAttributeArgs.builder()
                    .name("string")
                    .value("string")
                    .build())
                .operations(ApiProductOperationGroupOperationConfigOperationArgs.builder()
                    .methods("string")
                    .resource("string")
                    .build())
                .quota(ApiProductOperationGroupOperationConfigQuotaArgs.builder()
                    .interval("string")
                    .limit("string")
                    .timeUnit("string")
                    .build())
                .build())
            .build())
        .attributes(ApiProductAttributeArgs.builder()
            .name("string")
            .value("string")
            .build())
        .environments("string")
        .graphqlOperationGroup(ApiProductGraphqlOperationGroupArgs.builder()
            .operationConfigType("string")
            .operationConfigs(ApiProductGraphqlOperationGroupOperationConfigArgs.builder()
                .apiSource("string")
                .attributes(ApiProductGraphqlOperationGroupOperationConfigAttributeArgs.builder()
                    .name("string")
                    .value("string")
                    .build())
                .operations(ApiProductGraphqlOperationGroupOperationConfigOperationArgs.builder()
                    .operation("string")
                    .operationTypes("string")
                    .build())
                .quota(ApiProductGraphqlOperationGroupOperationConfigQuotaArgs.builder()
                    .interval("string")
                    .limit("string")
                    .timeUnit("string")
                    .build())
                .build())
            .build())
        .grpcOperationGroup(ApiProductGrpcOperationGroupArgs.builder()
            .operationConfigs(ApiProductGrpcOperationGroupOperationConfigArgs.builder()
                .apiSource("string")
                .attributes(ApiProductGrpcOperationGroupOperationConfigAttributeArgs.builder()
                    .name("string")
                    .value("string")
                    .build())
                .methods("string")
                .quota(ApiProductGrpcOperationGroupOperationConfigQuotaArgs.builder()
                    .interval("string")
                    .limit("string")
                    .timeUnit("string")
                    .build())
                .service("string")
                .build())
            .build())
        .apiResources("string")
        .description("string")
        .approvalType("string")
        .proxies("string")
        .quota("string")
        .quotaCounterScope("string")
        .quotaInterval("string")
        .quotaTimeUnit("string")
        .scopes("string")
        .space("string")
        .build());
    
    api_product_resource = gcp.apigee.ApiProduct("apiProductResource",
        display_name="string",
        org_id="string",
        name="string",
        operation_group={
            "operation_config_type": "string",
            "operation_configs": [{
                "api_source": "string",
                "attributes": [{
                    "name": "string",
                    "value": "string",
                }],
                "operations": [{
                    "methods": ["string"],
                    "resource": "string",
                }],
                "quota": {
                    "interval": "string",
                    "limit": "string",
                    "time_unit": "string",
                },
            }],
        },
        attributes=[{
            "name": "string",
            "value": "string",
        }],
        environments=["string"],
        graphql_operation_group={
            "operation_config_type": "string",
            "operation_configs": [{
                "api_source": "string",
                "attributes": [{
                    "name": "string",
                    "value": "string",
                }],
                "operations": [{
                    "operation": "string",
                    "operation_types": ["string"],
                }],
                "quota": {
                    "interval": "string",
                    "limit": "string",
                    "time_unit": "string",
                },
            }],
        },
        grpc_operation_group={
            "operation_configs": [{
                "api_source": "string",
                "attributes": [{
                    "name": "string",
                    "value": "string",
                }],
                "methods": ["string"],
                "quota": {
                    "interval": "string",
                    "limit": "string",
                    "time_unit": "string",
                },
                "service": "string",
            }],
        },
        api_resources=["string"],
        description="string",
        approval_type="string",
        proxies=["string"],
        quota="string",
        quota_counter_scope="string",
        quota_interval="string",
        quota_time_unit="string",
        scopes=["string"],
        space="string")
    
    const apiProductResource = new gcp.apigee.ApiProduct("apiProductResource", {
        displayName: "string",
        orgId: "string",
        name: "string",
        operationGroup: {
            operationConfigType: "string",
            operationConfigs: [{
                apiSource: "string",
                attributes: [{
                    name: "string",
                    value: "string",
                }],
                operations: [{
                    methods: ["string"],
                    resource: "string",
                }],
                quota: {
                    interval: "string",
                    limit: "string",
                    timeUnit: "string",
                },
            }],
        },
        attributes: [{
            name: "string",
            value: "string",
        }],
        environments: ["string"],
        graphqlOperationGroup: {
            operationConfigType: "string",
            operationConfigs: [{
                apiSource: "string",
                attributes: [{
                    name: "string",
                    value: "string",
                }],
                operations: [{
                    operation: "string",
                    operationTypes: ["string"],
                }],
                quota: {
                    interval: "string",
                    limit: "string",
                    timeUnit: "string",
                },
            }],
        },
        grpcOperationGroup: {
            operationConfigs: [{
                apiSource: "string",
                attributes: [{
                    name: "string",
                    value: "string",
                }],
                methods: ["string"],
                quota: {
                    interval: "string",
                    limit: "string",
                    timeUnit: "string",
                },
                service: "string",
            }],
        },
        apiResources: ["string"],
        description: "string",
        approvalType: "string",
        proxies: ["string"],
        quota: "string",
        quotaCounterScope: "string",
        quotaInterval: "string",
        quotaTimeUnit: "string",
        scopes: ["string"],
        space: "string",
    });
    
    type: gcp:apigee:ApiProduct
    properties:
        apiResources:
            - string
        approvalType: string
        attributes:
            - name: string
              value: string
        description: string
        displayName: string
        environments:
            - string
        graphqlOperationGroup:
            operationConfigType: string
            operationConfigs:
                - apiSource: string
                  attributes:
                    - name: string
                      value: string
                  operations:
                    - operation: string
                      operationTypes:
                        - string
                  quota:
                    interval: string
                    limit: string
                    timeUnit: string
        grpcOperationGroup:
            operationConfigs:
                - apiSource: string
                  attributes:
                    - name: string
                      value: string
                  methods:
                    - string
                  quota:
                    interval: string
                    limit: string
                    timeUnit: string
                  service: string
        name: string
        operationGroup:
            operationConfigType: string
            operationConfigs:
                - apiSource: string
                  attributes:
                    - name: string
                      value: string
                  operations:
                    - methods:
                        - string
                      resource: string
                  quota:
                    interval: string
                    limit: string
                    timeUnit: string
        orgId: string
        proxies:
            - string
        quota: string
        quotaCounterScope: string
        quotaInterval: string
        quotaTimeUnit: string
        scopes:
            - string
        space: string
    

    ApiProduct Resource Properties

    To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

    Inputs

    In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.

    The ApiProduct resource accepts the following input properties:

    DisplayName string
    Name displayed in the UI or developer portal to developers registering for API access.
    OrgId string
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    ApiResources List<string>
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    ApprovalType string
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    Attributes List<ApiProductAttribute>
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    Description string
    Description of the API product. Include key information about the API product that is not captured by other fields.
    Environments List<string>
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    GraphqlOperationGroup ApiProductGraphqlOperationGroup
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    GrpcOperationGroup ApiProductGrpcOperationGroup
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    Name string
    Internal name of the API product.
    OperationGroup ApiProductOperationGroup
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    Proxies List<string>
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    Quota string
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    QuotaCounterScope string
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    QuotaInterval string
    Time interval over which the number of request messages is calculated.
    QuotaTimeUnit string
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    Scopes List<string>
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    Space string
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    DisplayName string
    Name displayed in the UI or developer portal to developers registering for API access.
    OrgId string
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    ApiResources []string
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    ApprovalType string
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    Attributes []ApiProductAttributeArgs
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    Description string
    Description of the API product. Include key information about the API product that is not captured by other fields.
    Environments []string
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    GraphqlOperationGroup ApiProductGraphqlOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    GrpcOperationGroup ApiProductGrpcOperationGroupArgs
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    Name string
    Internal name of the API product.
    OperationGroup ApiProductOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    Proxies []string
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    Quota string
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    QuotaCounterScope string
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    QuotaInterval string
    Time interval over which the number of request messages is calculated.
    QuotaTimeUnit string
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    Scopes []string
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    Space string
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    displayName String
    Name displayed in the UI or developer portal to developers registering for API access.
    orgId String
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    apiResources List<String>
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approvalType String
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes List<ApiProductAttribute>
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    description String
    Description of the API product. Include key information about the API product that is not captured by other fields.
    environments List<String>
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphqlOperationGroup ApiProductGraphqlOperationGroup
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpcOperationGroup ApiProductGrpcOperationGroup
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    name String
    Internal name of the API product.
    operationGroup ApiProductOperationGroup
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    proxies List<String>
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota String
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quotaCounterScope String
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quotaInterval String
    Time interval over which the number of request messages is calculated.
    quotaTimeUnit String
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes List<String>
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space String
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    displayName string
    Name displayed in the UI or developer portal to developers registering for API access.
    orgId string
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    apiResources string[]
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approvalType string
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes ApiProductAttribute[]
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    description string
    Description of the API product. Include key information about the API product that is not captured by other fields.
    environments string[]
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphqlOperationGroup ApiProductGraphqlOperationGroup
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpcOperationGroup ApiProductGrpcOperationGroup
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    name string
    Internal name of the API product.
    operationGroup ApiProductOperationGroup
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    proxies string[]
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota string
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quotaCounterScope string
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quotaInterval string
    Time interval over which the number of request messages is calculated.
    quotaTimeUnit string
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes string[]
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space string
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    display_name str
    Name displayed in the UI or developer portal to developers registering for API access.
    org_id str
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    api_resources Sequence[str]
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approval_type str
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes Sequence[ApiProductAttributeArgs]
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    description str
    Description of the API product. Include key information about the API product that is not captured by other fields.
    environments Sequence[str]
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphql_operation_group ApiProductGraphqlOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpc_operation_group ApiProductGrpcOperationGroupArgs
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    name str
    Internal name of the API product.
    operation_group ApiProductOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    proxies Sequence[str]
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota str
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quota_counter_scope str
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quota_interval str
    Time interval over which the number of request messages is calculated.
    quota_time_unit str
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes Sequence[str]
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space str
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    displayName String
    Name displayed in the UI or developer portal to developers registering for API access.
    orgId String
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    apiResources List<String>
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approvalType String
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes List<Property Map>
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    description String
    Description of the API product. Include key information about the API product that is not captured by other fields.
    environments List<String>
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphqlOperationGroup Property Map
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpcOperationGroup Property Map
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    name String
    Internal name of the API product.
    operationGroup Property Map
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    proxies List<String>
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota String
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quotaCounterScope String
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quotaInterval String
    Time interval over which the number of request messages is calculated.
    quotaTimeUnit String
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes List<String>
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space String
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.

    Outputs

    All input properties are implicitly available as output properties. Additionally, the ApiProduct resource produces the following output properties:

    CreatedAt string
    Response only. Creation time of this environment as milliseconds since epoch.
    Id string
    The provider-assigned unique ID for this managed resource.
    LastModifiedAt string
    Response only. Modified time of this environment as milliseconds since epoch.
    CreatedAt string
    Response only. Creation time of this environment as milliseconds since epoch.
    Id string
    The provider-assigned unique ID for this managed resource.
    LastModifiedAt string
    Response only. Modified time of this environment as milliseconds since epoch.
    createdAt String
    Response only. Creation time of this environment as milliseconds since epoch.
    id String
    The provider-assigned unique ID for this managed resource.
    lastModifiedAt String
    Response only. Modified time of this environment as milliseconds since epoch.
    createdAt string
    Response only. Creation time of this environment as milliseconds since epoch.
    id string
    The provider-assigned unique ID for this managed resource.
    lastModifiedAt string
    Response only. Modified time of this environment as milliseconds since epoch.
    created_at str
    Response only. Creation time of this environment as milliseconds since epoch.
    id str
    The provider-assigned unique ID for this managed resource.
    last_modified_at str
    Response only. Modified time of this environment as milliseconds since epoch.
    createdAt String
    Response only. Creation time of this environment as milliseconds since epoch.
    id String
    The provider-assigned unique ID for this managed resource.
    lastModifiedAt String
    Response only. Modified time of this environment as milliseconds since epoch.

    Look up Existing ApiProduct Resource

    Get an existing ApiProduct resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

    public static get(name: string, id: Input<ID>, state?: ApiProductState, opts?: CustomResourceOptions): ApiProduct
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            api_resources: Optional[Sequence[str]] = None,
            approval_type: Optional[str] = None,
            attributes: Optional[Sequence[ApiProductAttributeArgs]] = None,
            created_at: Optional[str] = None,
            description: Optional[str] = None,
            display_name: Optional[str] = None,
            environments: Optional[Sequence[str]] = None,
            graphql_operation_group: Optional[ApiProductGraphqlOperationGroupArgs] = None,
            grpc_operation_group: Optional[ApiProductGrpcOperationGroupArgs] = None,
            last_modified_at: Optional[str] = None,
            name: Optional[str] = None,
            operation_group: Optional[ApiProductOperationGroupArgs] = None,
            org_id: Optional[str] = None,
            proxies: Optional[Sequence[str]] = None,
            quota: Optional[str] = None,
            quota_counter_scope: Optional[str] = None,
            quota_interval: Optional[str] = None,
            quota_time_unit: Optional[str] = None,
            scopes: Optional[Sequence[str]] = None,
            space: Optional[str] = None) -> ApiProduct
    func GetApiProduct(ctx *Context, name string, id IDInput, state *ApiProductState, opts ...ResourceOption) (*ApiProduct, error)
    public static ApiProduct Get(string name, Input<string> id, ApiProductState? state, CustomResourceOptions? opts = null)
    public static ApiProduct get(String name, Output<String> id, ApiProductState state, CustomResourceOptions options)
    resources:  _:    type: gcp:apigee:ApiProduct    get:      id: ${id}
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    resource_name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    The following state arguments are supported:
    ApiResources List<string>
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    ApprovalType string
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    Attributes List<ApiProductAttribute>
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    CreatedAt string
    Response only. Creation time of this environment as milliseconds since epoch.
    Description string
    Description of the API product. Include key information about the API product that is not captured by other fields.
    DisplayName string
    Name displayed in the UI or developer portal to developers registering for API access.
    Environments List<string>
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    GraphqlOperationGroup ApiProductGraphqlOperationGroup
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    GrpcOperationGroup ApiProductGrpcOperationGroup
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    LastModifiedAt string
    Response only. Modified time of this environment as milliseconds since epoch.
    Name string
    Internal name of the API product.
    OperationGroup ApiProductOperationGroup
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    OrgId string
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    Proxies List<string>
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    Quota string
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    QuotaCounterScope string
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    QuotaInterval string
    Time interval over which the number of request messages is calculated.
    QuotaTimeUnit string
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    Scopes List<string>
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    Space string
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    ApiResources []string
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    ApprovalType string
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    Attributes []ApiProductAttributeArgs
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    CreatedAt string
    Response only. Creation time of this environment as milliseconds since epoch.
    Description string
    Description of the API product. Include key information about the API product that is not captured by other fields.
    DisplayName string
    Name displayed in the UI or developer portal to developers registering for API access.
    Environments []string
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    GraphqlOperationGroup ApiProductGraphqlOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    GrpcOperationGroup ApiProductGrpcOperationGroupArgs
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    LastModifiedAt string
    Response only. Modified time of this environment as milliseconds since epoch.
    Name string
    Internal name of the API product.
    OperationGroup ApiProductOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    OrgId string
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    Proxies []string
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    Quota string
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    QuotaCounterScope string
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    QuotaInterval string
    Time interval over which the number of request messages is calculated.
    QuotaTimeUnit string
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    Scopes []string
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    Space string
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    apiResources List<String>
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approvalType String
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes List<ApiProductAttribute>
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    createdAt String
    Response only. Creation time of this environment as milliseconds since epoch.
    description String
    Description of the API product. Include key information about the API product that is not captured by other fields.
    displayName String
    Name displayed in the UI or developer portal to developers registering for API access.
    environments List<String>
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphqlOperationGroup ApiProductGraphqlOperationGroup
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpcOperationGroup ApiProductGrpcOperationGroup
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    lastModifiedAt String
    Response only. Modified time of this environment as milliseconds since epoch.
    name String
    Internal name of the API product.
    operationGroup ApiProductOperationGroup
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    orgId String
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    proxies List<String>
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota String
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quotaCounterScope String
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quotaInterval String
    Time interval over which the number of request messages is calculated.
    quotaTimeUnit String
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes List<String>
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space String
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    apiResources string[]
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approvalType string
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes ApiProductAttribute[]
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    createdAt string
    Response only. Creation time of this environment as milliseconds since epoch.
    description string
    Description of the API product. Include key information about the API product that is not captured by other fields.
    displayName string
    Name displayed in the UI or developer portal to developers registering for API access.
    environments string[]
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphqlOperationGroup ApiProductGraphqlOperationGroup
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpcOperationGroup ApiProductGrpcOperationGroup
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    lastModifiedAt string
    Response only. Modified time of this environment as milliseconds since epoch.
    name string
    Internal name of the API product.
    operationGroup ApiProductOperationGroup
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    orgId string
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    proxies string[]
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota string
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quotaCounterScope string
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quotaInterval string
    Time interval over which the number of request messages is calculated.
    quotaTimeUnit string
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes string[]
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space string
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    api_resources Sequence[str]
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approval_type str
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes Sequence[ApiProductAttributeArgs]
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    created_at str
    Response only. Creation time of this environment as milliseconds since epoch.
    description str
    Description of the API product. Include key information about the API product that is not captured by other fields.
    display_name str
    Name displayed in the UI or developer portal to developers registering for API access.
    environments Sequence[str]
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphql_operation_group ApiProductGraphqlOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpc_operation_group ApiProductGrpcOperationGroupArgs
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    last_modified_at str
    Response only. Modified time of this environment as milliseconds since epoch.
    name str
    Internal name of the API product.
    operation_group ApiProductOperationGroupArgs
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    org_id str
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    proxies Sequence[str]
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota str
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quota_counter_scope str
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quota_interval str
    Time interval over which the number of request messages is calculated.
    quota_time_unit str
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes Sequence[str]
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space str
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.
    apiResources List<String>
    Comma-separated list of API resources to be bundled in the API product. By default, the resource paths are mapped from the proxy.pathsuffix variable. The proxy path suffix is defined as the URI fragment following the ProxyEndpoint base path. For example, if the apiResources element is defined to be /forecastrss and the base path defined for the API proxy is /weather, then only requests to /weather/forecastrss are permitted by the API product.
    approvalType String
    Flag that specifies how API keys are approved to access the APIs defined by the API product. Valid values are auto or manual. Possible values are: auto, manual.
    attributes List<Property Map>
    Array of attributes that may be used to extend the default API product profile with customer-specific metadata. You can specify a maximum of 18 attributes. Use this property to specify the access level of the API product as either public, private, or internal. Structure is documented below.
    createdAt String
    Response only. Creation time of this environment as milliseconds since epoch.
    description String
    Description of the API product. Include key information about the API product that is not captured by other fields.
    displayName String
    Name displayed in the UI or developer portal to developers registering for API access.
    environments List<String>
    Comma-separated list of environment names to which the API product is bound. Requests to environments that are not listed are rejected. By specifying one or more environments, you can bind the resources listed in the API product to a specific environment, preventing developers from accessing those resources through API proxies deployed in another environment.
    graphqlOperationGroup Property Map
    Configuration used to group Apigee proxies or remote services with graphQL operation name, graphQL operation type and quotas. This grouping allows us to precisely set quota for a particular combination of graphQL name and operation type for a particular proxy request. If graphQL name is not set, this would imply quota will be applied on all graphQL requests matching the operation type. Structure is documented below.
    grpcOperationGroup Property Map
    Optional. Configuration used to group Apigee proxies with gRPC services and method names. This grouping allows us to set quota for a particular proxy with the gRPC service name and method. If a method name is not set, this implies quota and authorization are applied to all gRPC methods implemented by that proxy for that particular gRPC service. Structure is documented below.
    lastModifiedAt String
    Response only. Modified time of this environment as milliseconds since epoch.
    name String
    Internal name of the API product.
    operationGroup Property Map
    Configuration used to group Apigee proxies or remote services with resources, method types, and quotas. The resource refers to the resource URI (excluding the base path). With this grouping, the API product creator is able to fine-tune and give precise control over which REST methods have access to specific resources and how many calls can be made (using the quota setting). Note: The apiResources setting cannot be specified for both the API product and operation group; otherwise the call will fail. Structure is documented below.
    orgId String
    The Apigee Organization associated with the Apigee API product, in the format organizations/{{org_name}}.
    proxies List<String>
    Comma-separated list of API proxy names to which this API product is bound. By specifying API proxies, you can associate resources in the API product with specific API proxies, preventing developers from accessing those resources through other API proxies. Apigee rejects requests to API proxies that are not listed.
    quota String
    Number of request messages permitted per app by this API product for the specified quotaInterval and quotaTimeUnit. For example, a quota of 50, for a quotaInterval of 12 and a quotaTimeUnit of hours means 50 requests are allowed every 12 hours.
    quotaCounterScope String
    Scope of the quota decides how the quota counter gets applied and evaluate for quota violation. If the Scope is set as PROXY, then all the operations defined for the APIproduct that are associated with the same proxy will share the same quota counter set at the APIproduct level, making it a global counter at a proxy level. If the Scope is set as OPERATION, then each operations get the counter set at the API product dedicated, making it a local counter. Note that, the QuotaCounterScope applies only when an operation does not have dedicated quota set for itself. Possible values are: QUOTA_COUNTER_SCOPE_UNSPECIFIED, PROXY, OPERATION.
    quotaInterval String
    Time interval over which the number of request messages is calculated.
    quotaTimeUnit String
    Time unit defined for the quotaInterval. Valid values include second, minute, hour, day, month or year.
    scopes List<String>
    Comma-separated list of OAuth scopes that are validated at runtime. Apigee validates that the scopes in any access token presented match the scopes defined in the OAuth policy associated with the API product.
    space String
    Optional. The resource ID of the parent Space. If not set, the parent resource will be the Organization.

    Supporting Types

    ApiProductAttribute, ApiProductAttributeArgs

    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.
    name string
    Key of the attribute.
    value string
    Value of the attribute.
    name str
    Key of the attribute.
    value str
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.

    ApiProductGraphqlOperationGroup, ApiProductGraphqlOperationGroupArgs

    OperationConfigType string
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    OperationConfigs List<ApiProductGraphqlOperationGroupOperationConfig>
    List of graphQL operation configuration details associated with Apigee API proxies or remote services. Remote services are non-Apigee proxies, such as Istio-Envoy. Structure is documented below.
    OperationConfigType string
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    OperationConfigs []ApiProductGraphqlOperationGroupOperationConfig
    List of graphQL operation configuration details associated with Apigee API proxies or remote services. Remote services are non-Apigee proxies, such as Istio-Envoy. Structure is documented below.
    operationConfigType String
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operationConfigs List<ApiProductGraphqlOperationGroupOperationConfig>
    List of graphQL operation configuration details associated with Apigee API proxies or remote services. Remote services are non-Apigee proxies, such as Istio-Envoy. Structure is documented below.
    operationConfigType string
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operationConfigs ApiProductGraphqlOperationGroupOperationConfig[]
    List of graphQL operation configuration details associated with Apigee API proxies or remote services. Remote services are non-Apigee proxies, such as Istio-Envoy. Structure is documented below.
    operation_config_type str
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operation_configs Sequence[ApiProductGraphqlOperationGroupOperationConfig]
    List of graphQL operation configuration details associated with Apigee API proxies or remote services. Remote services are non-Apigee proxies, such as Istio-Envoy. Structure is documented below.
    operationConfigType String
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operationConfigs List<Property Map>
    List of graphQL operation configuration details associated with Apigee API proxies or remote services. Remote services are non-Apigee proxies, such as Istio-Envoy. Structure is documented below.

    ApiProductGraphqlOperationGroupOperationConfig, ApiProductGraphqlOperationGroupOperationConfigArgs

    ApiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    Attributes List<ApiProductGraphqlOperationGroupOperationConfigAttribute>
    Custom attributes associated with the operation. Structure is documented below.
    Operations List<ApiProductGraphqlOperationGroupOperationConfigOperation>
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    Quota ApiProductGraphqlOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    ApiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    Attributes []ApiProductGraphqlOperationGroupOperationConfigAttribute
    Custom attributes associated with the operation. Structure is documented below.
    Operations []ApiProductGraphqlOperationGroupOperationConfigOperation
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    Quota ApiProductGraphqlOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    apiSource String
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes List<ApiProductGraphqlOperationGroupOperationConfigAttribute>
    Custom attributes associated with the operation. Structure is documented below.
    operations List<ApiProductGraphqlOperationGroupOperationConfigOperation>
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota ApiProductGraphqlOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    apiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes ApiProductGraphqlOperationGroupOperationConfigAttribute[]
    Custom attributes associated with the operation. Structure is documented below.
    operations ApiProductGraphqlOperationGroupOperationConfigOperation[]
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota ApiProductGraphqlOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    api_source str
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes Sequence[ApiProductGraphqlOperationGroupOperationConfigAttribute]
    Custom attributes associated with the operation. Structure is documented below.
    operations Sequence[ApiProductGraphqlOperationGroupOperationConfigOperation]
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota ApiProductGraphqlOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    apiSource String
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes List<Property Map>
    Custom attributes associated with the operation. Structure is documented below.
    operations List<Property Map>
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota Property Map
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.

    ApiProductGraphqlOperationGroupOperationConfigAttribute, ApiProductGraphqlOperationGroupOperationConfigAttributeArgs

    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.
    name string
    Key of the attribute.
    value string
    Value of the attribute.
    name str
    Key of the attribute.
    value str
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.

    ApiProductGraphqlOperationGroupOperationConfigOperation, ApiProductGraphqlOperationGroupOperationConfigOperationArgs

    Operation string
    GraphQL operation name. The name and operation type will be used to apply quotas. If no name is specified, the quota will be applied to all GraphQL operations irrespective of their operation names in the payload.
    OperationTypes List<string>
    Required. GraphQL operation types. Valid values include query or mutation. Note: Apigee does not currently support subscription types.
    Operation string
    GraphQL operation name. The name and operation type will be used to apply quotas. If no name is specified, the quota will be applied to all GraphQL operations irrespective of their operation names in the payload.
    OperationTypes []string
    Required. GraphQL operation types. Valid values include query or mutation. Note: Apigee does not currently support subscription types.
    operation String
    GraphQL operation name. The name and operation type will be used to apply quotas. If no name is specified, the quota will be applied to all GraphQL operations irrespective of their operation names in the payload.
    operationTypes List<String>
    Required. GraphQL operation types. Valid values include query or mutation. Note: Apigee does not currently support subscription types.
    operation string
    GraphQL operation name. The name and operation type will be used to apply quotas. If no name is specified, the quota will be applied to all GraphQL operations irrespective of their operation names in the payload.
    operationTypes string[]
    Required. GraphQL operation types. Valid values include query or mutation. Note: Apigee does not currently support subscription types.
    operation str
    GraphQL operation name. The name and operation type will be used to apply quotas. If no name is specified, the quota will be applied to all GraphQL operations irrespective of their operation names in the payload.
    operation_types Sequence[str]
    Required. GraphQL operation types. Valid values include query or mutation. Note: Apigee does not currently support subscription types.
    operation String
    GraphQL operation name. The name and operation type will be used to apply quotas. If no name is specified, the quota will be applied to all GraphQL operations irrespective of their operation names in the payload.
    operationTypes List<String>
    Required. GraphQL operation types. Valid values include query or mutation. Note: Apigee does not currently support subscription types.

    ApiProductGraphqlOperationGroupOperationConfigQuota, ApiProductGraphqlOperationGroupOperationConfigQuotaArgs

    Interval string
    Required. Time interval over which the number of request messages is calculated.
    Limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    TimeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    Interval string
    Required. Time interval over which the number of request messages is calculated.
    Limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    TimeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval String
    Required. Time interval over which the number of request messages is calculated.
    limit String
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit String
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval string
    Required. Time interval over which the number of request messages is calculated.
    limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval str
    Required. Time interval over which the number of request messages is calculated.
    limit str
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    time_unit str
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval String
    Required. Time interval over which the number of request messages is calculated.
    limit String
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit String
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.

    ApiProductGrpcOperationGroup, ApiProductGrpcOperationGroupArgs

    OperationConfigs List<ApiProductGrpcOperationGroupOperationConfig>
    Required. List of operation configurations for either Apigee API proxies that are associated with this API product. Structure is documented below.
    OperationConfigs []ApiProductGrpcOperationGroupOperationConfig
    Required. List of operation configurations for either Apigee API proxies that are associated with this API product. Structure is documented below.
    operationConfigs List<ApiProductGrpcOperationGroupOperationConfig>
    Required. List of operation configurations for either Apigee API proxies that are associated with this API product. Structure is documented below.
    operationConfigs ApiProductGrpcOperationGroupOperationConfig[]
    Required. List of operation configurations for either Apigee API proxies that are associated with this API product. Structure is documented below.
    operation_configs Sequence[ApiProductGrpcOperationGroupOperationConfig]
    Required. List of operation configurations for either Apigee API proxies that are associated with this API product. Structure is documented below.
    operationConfigs List<Property Map>
    Required. List of operation configurations for either Apigee API proxies that are associated with this API product. Structure is documented below.

    ApiProductGrpcOperationGroupOperationConfig, ApiProductGrpcOperationGroupOperationConfigArgs

    ApiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    Attributes List<ApiProductGrpcOperationGroupOperationConfigAttribute>
    Custom attributes associated with the operation. Structure is documented below.
    Methods List<string>
    List of unqualified gRPC method names for the proxy to which quota will be applied. If this field is empty, the Quota will apply to all operations on the gRPC service defined on the proxy. Example: Given a proxy that is configured to serve com.petstore.PetService, the methods com.petstore.PetService.ListPets and com.petstore.PetService.GetPet would be specified here as simply ["ListPets", "GetPet"]. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail.
    Quota ApiProductGrpcOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    Service string
    Required. gRPC Service name associated to be associated with the API proxy, on which quota rules can be applied upon.
    ApiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    Attributes []ApiProductGrpcOperationGroupOperationConfigAttribute
    Custom attributes associated with the operation. Structure is documented below.
    Methods []string
    List of unqualified gRPC method names for the proxy to which quota will be applied. If this field is empty, the Quota will apply to all operations on the gRPC service defined on the proxy. Example: Given a proxy that is configured to serve com.petstore.PetService, the methods com.petstore.PetService.ListPets and com.petstore.PetService.GetPet would be specified here as simply ["ListPets", "GetPet"]. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail.
    Quota ApiProductGrpcOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    Service string
    Required. gRPC Service name associated to be associated with the API proxy, on which quota rules can be applied upon.
    apiSource String
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes List<ApiProductGrpcOperationGroupOperationConfigAttribute>
    Custom attributes associated with the operation. Structure is documented below.
    methods List<String>
    List of unqualified gRPC method names for the proxy to which quota will be applied. If this field is empty, the Quota will apply to all operations on the gRPC service defined on the proxy. Example: Given a proxy that is configured to serve com.petstore.PetService, the methods com.petstore.PetService.ListPets and com.petstore.PetService.GetPet would be specified here as simply ["ListPets", "GetPet"]. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail.
    quota ApiProductGrpcOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    service String
    Required. gRPC Service name associated to be associated with the API proxy, on which quota rules can be applied upon.
    apiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes ApiProductGrpcOperationGroupOperationConfigAttribute[]
    Custom attributes associated with the operation. Structure is documented below.
    methods string[]
    List of unqualified gRPC method names for the proxy to which quota will be applied. If this field is empty, the Quota will apply to all operations on the gRPC service defined on the proxy. Example: Given a proxy that is configured to serve com.petstore.PetService, the methods com.petstore.PetService.ListPets and com.petstore.PetService.GetPet would be specified here as simply ["ListPets", "GetPet"]. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail.
    quota ApiProductGrpcOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    service string
    Required. gRPC Service name associated to be associated with the API proxy, on which quota rules can be applied upon.
    api_source str
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes Sequence[ApiProductGrpcOperationGroupOperationConfigAttribute]
    Custom attributes associated with the operation. Structure is documented below.
    methods Sequence[str]
    List of unqualified gRPC method names for the proxy to which quota will be applied. If this field is empty, the Quota will apply to all operations on the gRPC service defined on the proxy. Example: Given a proxy that is configured to serve com.petstore.PetService, the methods com.petstore.PetService.ListPets and com.petstore.PetService.GetPet would be specified here as simply ["ListPets", "GetPet"]. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail.
    quota ApiProductGrpcOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    service str
    Required. gRPC Service name associated to be associated with the API proxy, on which quota rules can be applied upon.
    apiSource String
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes List<Property Map>
    Custom attributes associated with the operation. Structure is documented below.
    methods List<String>
    List of unqualified gRPC method names for the proxy to which quota will be applied. If this field is empty, the Quota will apply to all operations on the gRPC service defined on the proxy. Example: Given a proxy that is configured to serve com.petstore.PetService, the methods com.petstore.PetService.ListPets and com.petstore.PetService.GetPet would be specified here as simply ["ListPets", "GetPet"]. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail.
    quota Property Map
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    service String
    Required. gRPC Service name associated to be associated with the API proxy, on which quota rules can be applied upon.

    ApiProductGrpcOperationGroupOperationConfigAttribute, ApiProductGrpcOperationGroupOperationConfigAttributeArgs

    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.
    name string
    Key of the attribute.
    value string
    Value of the attribute.
    name str
    Key of the attribute.
    value str
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.

    ApiProductGrpcOperationGroupOperationConfigQuota, ApiProductGrpcOperationGroupOperationConfigQuotaArgs

    Interval string
    Required. Time interval over which the number of request messages is calculated.
    Limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    TimeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    Interval string
    Required. Time interval over which the number of request messages is calculated.
    Limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    TimeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval String
    Required. Time interval over which the number of request messages is calculated.
    limit String
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit String
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval string
    Required. Time interval over which the number of request messages is calculated.
    limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval str
    Required. Time interval over which the number of request messages is calculated.
    limit str
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    time_unit str
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval String
    Required. Time interval over which the number of request messages is calculated.
    limit String
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit String
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.

    ApiProductOperationGroup, ApiProductOperationGroupArgs

    OperationConfigType string
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    OperationConfigs List<ApiProductOperationGroupOperationConfig>
    Required. List of operation configurations for either Apigee API proxies or other remote services that are associated with this API product. Structure is documented below.
    OperationConfigType string
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    OperationConfigs []ApiProductOperationGroupOperationConfig
    Required. List of operation configurations for either Apigee API proxies or other remote services that are associated with this API product. Structure is documented below.
    operationConfigType String
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operationConfigs List<ApiProductOperationGroupOperationConfig>
    Required. List of operation configurations for either Apigee API proxies or other remote services that are associated with this API product. Structure is documented below.
    operationConfigType string
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operationConfigs ApiProductOperationGroupOperationConfig[]
    Required. List of operation configurations for either Apigee API proxies or other remote services that are associated with this API product. Structure is documented below.
    operation_config_type str
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operation_configs Sequence[ApiProductOperationGroupOperationConfig]
    Required. List of operation configurations for either Apigee API proxies or other remote services that are associated with this API product. Structure is documented below.
    operationConfigType String
    Flag that specifes whether the configuration is for Apigee API proxy or a remote service. Valid values include proxy or remoteservice. Defaults to proxy. Set to proxy when Apigee API proxies are associated with the API product. Set to remoteservice when non-Apigee proxies like Istio-Envoy are associated with the API product. Possible values are: proxy, remoteservice.
    operationConfigs List<Property Map>
    Required. List of operation configurations for either Apigee API proxies or other remote services that are associated with this API product. Structure is documented below.

    ApiProductOperationGroupOperationConfig, ApiProductOperationGroupOperationConfigArgs

    ApiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    Attributes List<ApiProductOperationGroupOperationConfigAttribute>
    Custom attributes associated with the operation. Structure is documented below.
    Operations List<ApiProductOperationGroupOperationConfigOperation>
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    Quota ApiProductOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    ApiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    Attributes []ApiProductOperationGroupOperationConfigAttribute
    Custom attributes associated with the operation. Structure is documented below.
    Operations []ApiProductOperationGroupOperationConfigOperation
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    Quota ApiProductOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    apiSource String
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes List<ApiProductOperationGroupOperationConfigAttribute>
    Custom attributes associated with the operation. Structure is documented below.
    operations List<ApiProductOperationGroupOperationConfigOperation>
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota ApiProductOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    apiSource string
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes ApiProductOperationGroupOperationConfigAttribute[]
    Custom attributes associated with the operation. Structure is documented below.
    operations ApiProductOperationGroupOperationConfigOperation[]
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota ApiProductOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    api_source str
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes Sequence[ApiProductOperationGroupOperationConfigAttribute]
    Custom attributes associated with the operation. Structure is documented below.
    operations Sequence[ApiProductOperationGroupOperationConfigOperation]
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota ApiProductOperationGroupOperationConfigQuota
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.
    apiSource String
    Required. Name of the API proxy with which the gRPC operation and quota are associated.
    attributes List<Property Map>
    Custom attributes associated with the operation. Structure is documented below.
    operations List<Property Map>
    Required. List of GraphQL name/operation type pairs for the proxy or remote service to which quota will be applied. If only operation types are specified, the quota will be applied to all GraphQL requests irrespective of the GraphQL name. Note: Currently, you can specify only a single GraphQLOperation. Specifying more than one will cause the operation to fail. Structure is documented below.
    quota Property Map
    Quota parameters to be enforced for the resources, methods, and API source combination. If none are specified, quota enforcement will not be done. Structure is documented below.

    ApiProductOperationGroupOperationConfigAttribute, ApiProductOperationGroupOperationConfigAttributeArgs

    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    Name string
    Key of the attribute.
    Value string
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.
    name string
    Key of the attribute.
    value string
    Value of the attribute.
    name str
    Key of the attribute.
    value str
    Value of the attribute.
    name String
    Key of the attribute.
    value String
    Value of the attribute.

    ApiProductOperationGroupOperationConfigOperation, ApiProductOperationGroupOperationConfigOperationArgs

    Methods List<string>
    Methods refers to the REST verbs, when none specified, all verb types are allowed.
    Resource string
    Required. REST resource path associated with the API proxy or remote service.
    Methods []string
    Methods refers to the REST verbs, when none specified, all verb types are allowed.
    Resource string
    Required. REST resource path associated with the API proxy or remote service.
    methods List<String>
    Methods refers to the REST verbs, when none specified, all verb types are allowed.
    resource String
    Required. REST resource path associated with the API proxy or remote service.
    methods string[]
    Methods refers to the REST verbs, when none specified, all verb types are allowed.
    resource string
    Required. REST resource path associated with the API proxy or remote service.
    methods Sequence[str]
    Methods refers to the REST verbs, when none specified, all verb types are allowed.
    resource str
    Required. REST resource path associated with the API proxy or remote service.
    methods List<String>
    Methods refers to the REST verbs, when none specified, all verb types are allowed.
    resource String
    Required. REST resource path associated with the API proxy or remote service.

    ApiProductOperationGroupOperationConfigQuota, ApiProductOperationGroupOperationConfigQuotaArgs

    Interval string
    Required. Time interval over which the number of request messages is calculated.
    Limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    TimeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    Interval string
    Required. Time interval over which the number of request messages is calculated.
    Limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    TimeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval String
    Required. Time interval over which the number of request messages is calculated.
    limit String
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit String
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval string
    Required. Time interval over which the number of request messages is calculated.
    limit string
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit string
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval str
    Required. Time interval over which the number of request messages is calculated.
    limit str
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    time_unit str
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.
    interval String
    Required. Time interval over which the number of request messages is calculated.
    limit String
    Required. Upper limit allowed for the time interval and time unit specified. Requests exceeding this limit will be rejected.
    timeUnit String
    Time unit defined for the interval. Valid values include second, minute, hour, day, month or year. If limit and interval are valid, the default value is hour; otherwise, the default is null.

    Import

    ApiProduct can be imported using any of these accepted formats:

    • {{org_id}}/apiproducts/{{name}}

    • {{org_id}}/{{name}}

    When using the pulumi import command, ApiProduct can be imported using one of the formats above. For example:

    $ pulumi import gcp:apigee/apiProduct:ApiProduct default {{org_id}}/apiproducts/{{name}}
    
    $ pulumi import gcp:apigee/apiProduct:ApiProduct default {{org_id}}/{{name}}
    

    To learn more about importing existing cloud resources, see Importing resources.

    Package Details

    Repository
    Google Cloud (GCP) Classic pulumi/pulumi-gcp
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the google-beta Terraform Provider.
    gcp logo
    Google Cloud v8.40.0 published on Monday, Aug 11, 2025 by Pulumi