> Shopify Plus: > Only stores on the [Shopify Plus](https://www.shopify.com/plus) plan can use apps with B2B features. When a merchant engages in business-to-business (B2B) transactions, they sell their goods and services directly to other companies. You can use the GraphQL Admin API to build apps that solve the challenges that come with B2B commerce. ## What you'll learn In this tutorial, you'll learn how to do the following tasks: - [Create a company](#step-1-create-a-company) - [Create a B2B catalog](#step-2-create-a-b2b-catalog) - [Create a draft order for a company](#step-3-create-a-draft-order-for-a-company) ## Requirements - You've created a [Partner account](https://www.shopify.com/partners) and a [development store](/docs/api/development-stores#create-a-development-store-to-test-your-app). - You've added [products](/docs/api/admin-graphql/latest/objects/product) to your development store. - Your app has the `unauthenticated_read_customers`, `unauthenticated_write_customers`, `read_products`, `write_products`, `read_draft_orders`, and `write_draft_orders` [access scopes](/docs/api/usage/access-scopes). Learn how to [configure your access scopes using Shopify CLI](/docs/apps/build/cli-for-apps/app-configuration). - You're familiar with the concept of [selling B2B](/docs/apps/build/b2b). ## Step 1: Create a company When a merchant sells with B2B, a company represents information about who makes a B2B purchase. The following example creates a company by calling the [`companyCreate`](/docs/api/admin-graphql/latest/mutations/companycreate) mutation with the following inputs: - `name`: The name of the company. - `companyLocation`: The location of the company. A `companyLocation` must be added to attach important information, like tax exemptions, to the company. - `companyContact`: A contact at the company who can make purchases. A `companyContact` must be added to create orders and [draft orders](#step-3-create-a-draft-order-for-a-company).

## Step 2: Create a B2B catalog A catalog is a set of products that's published and priced for certain customers based on specified conditions, such as whether they're buying for a certain B2B company location. For example, you can create a catalog that allows the Canadian branch of a company to purchase only the t-shirt products on the store, and they receive a 30% discount. You can create and associate a catalog with a company location by passing the company location ID in the `context` field of the [`catalogCreate`](/docs/api/admin-graphql/unstable/mutations/catalogcreate) or [`catalogUpdate`](/docs/api/admin-graphql/unstable/mutations/catalogupdate) mutation. > Note: > Multiple catalogs can be associated with the same company location. If a customer is logged into a B2B customer account that's eligible for multiple catalogs that contain the same product, then they receive the lowest listed price within those catalogs. The following example uses the `catalogCreate` mutation to create and associate a catalog with the company location from the [previous step](#step-1-create-a-company):

> Tip: > You can use the [`PriceList`](/docs/api/admin-graphql/latest/objects/pricelist) and [`Publication`](/docs/api/admin-graphql/latest/objects/publication) objects to define a subset of products and prices to be published to this catalog. Learn [how catalogs work](/docs/apps/build/markets/catalogs-different-markets), and [how to associate a price list and publication to a B2B catalog](/docs/apps/build/b2b/manage-catalogs). ## Step 3: Create a draft order for a company Merchants might want to create draft orders for company approval when selling B2B. You can pass the [`purchasingCompany`](/docs/api/admin-graphql/latest/input-objects/PurchasingEntityInput#field-purchasingentityinput-purchasingcompany) input to the [`draftOrderCreate`](/docs/api/admin-graphql/latest/mutations/draftOrderCreate) mutation to create a new draft order for a company. The `purchasingCompany` input specifies the company ID, location, and contact. Billing and shipping information are included in the response because they aren't automatically populated from the company location. The `lineItems` object indicates the items to be purchased in the order. For more information on all possible inputs, refer to the [`DraftOrders`](/docs/api/admin-graphql/latest/objects/DraftOrders) documentation.

## Next steps - Learn how to create and add information to a [company location](/docs/apps/build/b2b/manage-client-company-locations) by setting up tax exemptions and payment terms. - Learn how to [associate a price list and publication to a B2B catalog](/docs/apps/build/b2b/manage-catalogs) to determine the published products and prices for customers ordering for a specific B2B company location. - Learn how to [manage draft orders for B2B clients](/docs/apps/build/b2b/draft-orders) by calculating and sending invoices.