openapi: 3.1.0
info:
version: 25.1126.6886238
x-version-timestamp: 2025-11-26 19:10:23+00:00
title: Addresses Introduction Account Addresses Rules API
description: 'The Addresses API allows you to organize account addresses. Addresses are a sub-resource of `account` resources, an account can have multiple addresses, such as home, work, and neighbour.
You can use an account address with either [client_credentials access token](/docs/api/authentication/create-an-access-token) or a combination of [implicit access token](/docs/api/authentication/create-an-access-token) and [Account Management authentication](/docs/api/accounts/post-v-2-account-members-tokens) token.
'
contact:
name: Elastic Path
url: https://www.elasticpath.com
email: support@elasticpath.com
license:
url: https://elasticpath.dev
name: MIT
servers:
- url: https://useast.api.elasticpath.com
description: US East
- url: https://euwest.api.elasticpath.com
description: EU West
security:
- BearerToken: []
tags:
- name: Rules
description: 'If your store requires multiple catalogs, add catalog rules to control when a catalog is displayed. A catalog rule contains a catalog plus the criteria under which to display the catalog.
:::caution
You cannot create catalog rules for organization catalogs.
:::
You can use catalog rules to schedule a catalog to appear during a particular period, such as on a specific date or during summer. The catalog might offer different pricing during this period. The pricing depends on the associated price book.
The following scenarios provides a few examples for using catalog rules.
- **Multiple geographical regions**. Display different catalogs in different regions with suitable pricing or combine product hierarchies from two different regions to display in a third region.
- **Multiple channels**. Display different catalogs based on how a shopper accesses your store, such as through a mobile app or a web storefront.
- **Direct to business versus direct to customers**. Offer different products and prices for business customers versus retail customers.
- **Preferred accounts**. Offer special pricing to a group of users while displaying a standard price catalog to other users.
- **Preferred customers**. Offer special pricing to preferred customers while displaying a standard price catalog to all other shoppers.
- **Reward programs**. Enable reward programs where catalog prices drop after a certain spending level is reached.
- **Product sales**. Offer sale items for a limited time.
- **Standard pricing**. Display a default catalog to the shoppers who do not meet the criteria of the other catalog rules.
You can define a catalog rule with any of the following criteria.
- **Accounts**. List the accounts that should see a catalog. When a user has logged in with the account, they see the configured catalog.
- **Customers**. List the customers that should see a catalog. When the customer is logged in, they see the configured catalog.
- **Channel**. Specify a shopper experience, such as web storefront or mobile app. Set up the channel to retrieve the catalog from the catalog rule that matches that channel.
- **Other tags**. Create your own user-defined tags. For example, you might want to tag by regions or you might want to distinguish between business and consumer customers.
If a catalog rule has no criteria defined, it is the default catalog rule.
### Resolving catalog rules
When there is a request for a catalog, the store displays the catalog with the rule that matches the most attributes of the shoppers context.
The request triggers the following steps:
1. Compares the shoppers context against the defined catalog rules.
1. Determines the best match.
1. Retrieves the catalog associated with the matching catalog rule.
The follow examples show how the best match might be resolved:
- A shopper matches one of the `customer_ids` in one catalog rule only. The catalog for that catalog rule is displayed.
- A shopper matches one of the `customer_ids` in one catalog rule only, but doesnʼt match any of the `tags` specified in that catalog rule. Because there are no other catalog rules for this `customer_id`, the catalog for the catalog rule is displayed because it is the best match.
- A shopper is browsing a store using the stores mobile app, which matches `channel=mobile` in two catalog rules. The catalog displayed depends on matches with the `tags` or `customer_ids` attributes. If there is no other matching attribute, the first catalog rule found by the store is used. The best practice is to create catalog rules that cover all cases so that you avoid this situation.
- An unknown shopper is browsing the only channel offered by the seller. The store displays the base catalog.
'
paths:
/catalogs/rules:
post:
tags:
- Rules
summary: Creates a new catalog rule
description: 'If you have multiple catalogs, create catalog rule resources. With catalog rules, you can display different catalogs to different shoppers. For example, you can display a preferred pricing catalog to a few special customers. Or you can display one catalog to shoppers using your website and a different catalog to shoppers using your mobile app. Finally, you can define custom criteria by creating tags.
:::note
- If you have one catalog for all customers and channels, you can omit creating this resource.
- Due to the way catalogs are cached in Commerce, using catalog rules to display catalogs sometimes causes a 5-minute time delay before the catalogs are displayed.
- You cannot create catalog rules for organization catalogs.
:::
For ideas about the kinds of business scenarios you can achieve with catalog rules, see [Catalog Rules](/docs/api/pxm/catalog/rules). To understand how catalogs are matched to shoppers by using rules, see [Resolving Catalog Rules](/docs/api/pxm/catalog/rules#resolving-catalog-rules).
'
operationId: createRule
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/rule-create-data'
description: Creates a catalog rule with the following attributes.
required: true
responses:
'201':
description: The created catalog rule
content:
application/json:
schema:
$ref: '#/components/schemas/rule-data'
default:
description: Unexpected error.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
get:
tags:
- Rules
summary: Gets all authorized catalog rules
description: "Retrieves all authorized catalog rules.\n\n### Filtering\n\nThis endpoint supports filtering. For general filtering syntax, see [Filtering](/guides/Getting-Started/filtering). The following operators and attributes are supported.\n\n| Operator | Description | Supported Attributes | Example |\n|:--- |:--- |:--- |:--- |\n| `eq` | Equals. Checks if the values of two operands are equal. If they are, the condition is true. | `id`,`catalog_id`,`account_ids`,`customer_ids`,`channels`,`tags`,`pricebook_ids` | `filter=eq(id,some-id)` | \n| `in` | Checks if the values are included in the specified string. If they are, the condition is true. | `id`,`account_ids`,`customer_ids`,`channels`,`tags`,`pricebook_ids` | `filter=in(account_ids,some-id,another-id)` | \n"
operationId: getRules
parameters:
- $ref: '#/components/parameters/filter-rule'
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/offset'
responses:
'200':
description: The list of catalog rules.
content:
application/json:
schema:
$ref: '#/components/schemas/rule-list-data'
default:
description: An unexpected error.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
/catalogs/rules/{catalog_rule_id}:
get:
tags:
- Rules
summary: Get a catalog rule by ID
operationId: getRuleByID
parameters:
- description: The catalog rule ID.
name: catalog_rule_id
in: path
required: true
schema:
type: string
responses:
'200':
description: The catalog rile.
content:
application/json:
schema:
$ref: '#/components/schemas/rule-data'
default:
description: An unexpected error.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
put:
tags:
- Rules
summary: Updates a catalog rule
description: Specify whichever attributes you want to change. The values of the other attributes remain the same. If the attributes section is empty, the catalog rule is not updated.
operationId: updateRule
parameters:
- description: The catalog rule ID.
name: catalog_rule_id
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/rule-update-data'
description: An updated catalog rule with the following attributes.
required: true
responses:
'200':
description: An Updated catalog rule with the following attributes.
content:
application/json:
schema:
$ref: '#/components/schemas/rule-data'
default:
description: Unexpected error.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
delete:
tags:
- Rules
summary: Deletes a catalog rule
operationId: deleteRuleByID
parameters:
- description: The catalog rule ID.
name: catalog_rule_id
in: path
required: true
schema:
type: string
responses:
'204':
description: A 204 response indicates that the catalog rule has been deleted.
default:
description: Unexpected error.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
/catalogs/rules/validate:
post:
tags:
- Rules
summary: Validate catalog rules for a given context
description: 'Validates catalog rules for a given context and returns a list of matching catalog rules.
'
operationId: validateCatalogRules
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/offset'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/catalog-rule-validator-request'
required: true
responses:
'200':
description: List of matching catalog rules
content:
application/json:
schema:
$ref: '#/components/schemas/rule-list-data'
default:
description: Unexpected error.
content:
application/json:
schema:
$ref: '#/components/schemas/error-response'
components:
parameters:
filter-rule:
name: filter
in: query
description: 'This endpoint supports filtering. See [Filtering](#filtering).
'
required: false
schema:
type: string
offset:
description: The current offset by number of records, not pages. Offset is zero-based. The maximum records you can offset is 10,000. You would normally increment the page offset by multiples of the page limit to paginate through the results.
name: page[offset]
in: query
required: false
schema:
type: integer
format: int64
minimum: 0
maximum: 10000
limit:
description: The maximum number of records per page for this response. You can set this value up to 100. If no page size is set, the [page length](/docs/api/settings/settings-introduction#page-length) store setting is used.
name: page[limit]
in: query
required: false
schema:
type: integer
format: int64
minimum: 1
schemas:
rule-schedule:
type: object
title: Catalog Schedule
description: A period of time during which a catalog is valid
properties:
valid_from:
description: Matches the date and time that the catalog is displayed from.
type: string
example: '2020-09-22T09:00:00'
format: date-time
x-go-name: ValidFrom
nullable: true
valid_to:
description: Matches the date and time the catalog is displayed to.
type: string
example: '2020-09-22T09:00:00'
format: date-time
x-go-name: ValidTo
nullable: true
x-go-name: RuleSchedule
rule:
type: object
title: Catalog Rule
description: A catalog rule specifies which catalog to use for a given shopper context.
properties:
id:
type: string
description: The catalog rule ID. Use this to get, modify, or delete the catalog rule.
example: 8dbb35b2-ef04-477e-974d-e5f3abe6faae
attributes:
type: object
properties:
name:
description: The name of a catalog rule. The name must not contain any spaces.
type: string
example: rule-123
description:
description: A brief description of the purpose of a catalog rule.
type: string
example: Catalog Rule for most favored customers
default: ''
x-omitempty: true
account_ids:
description: The list of accounts who are eligible to see this catalog. If this field is empty, the rule matches all accounts.
type: array
items:
type: string
x-omitempty: true
account_tag_ids:
description: The list of account tag UUIDs. Accounts must have at least one of these tags to see this catalog. If this field is empty, the rule matches all accounts regardless of tags.
type: array
items:
type: string
x-omitempty: true
customer_ids:
description: The list of customers who are eligible to see this catalog. If empty, the rule matches all customers.
type: array
items:
type: string
x-omitempty: true
channels:
description: The list of channels in which this catalog can be displayed. A channel is the shopping experience, such as a mobile app or web storefront. If empty, the catalog rule matches all channels. The channel will eventually be included in the bearer token that is used for authorization, but currently, you must set the `EP-Channel` header in your requests.
type: array
items:
type: string
x-omitempty: true
tags:
description: A list of user-defined tags that can be used to further restrict the eligibility criteria for this rule. Requests populate the catalog rule tag using the `EP-Context-Tag` header.
type: array
items:
type: string
x-omitempty: true
schedules:
description: "Specifies a time period when a catalog is displayed, such as on a specific date or during summer. Requests populate the rule tag using the `EP-Context-Tag` header. \n\nThe schedules attribute must include the following.\n\n- `valid_from` matches the date and time that the catalog is displayed from. \n- `valid_to` matches the date and time the catalog is displayed to. \n\nCommerce runs on UTC time. \n\nYou can offset the timezone by adding the offset to the end of the date and time. For example, a catalog which contains a sale hierarchy that should appear for a set timeframe may be scheduled to publish on a given date and time within a given timezone. For instance, a sale that should begin on 1st of June 2022 05:00 ET and end on the 15th of June 2022 at 23:50 PT would have a valid schedule of `\"valid_from\": \"2022-06-01T05:00:00.000-05:00\"`, `\"valid_to\": \"2022-06-15T11:59:99.000-08:00\"`.\n"
type: array
items:
$ref: '#/components/schemas/rule-schedule'
x-omitempty: true
catalog_id:
type: string
description: The unique identifier of a catalog.
example: d09b4e16-08a5-4f42-817c-6e0d98acbb63
created_at:
description: The date and time a catalog rule was created.
type: string
example: '2020-09-22T09:00:00'
format: date-time
updated_at:
description: The date and time a catalog release is updated.
type: string
example: '2020-09-22T09:00:00'
format: date-time
pricebook_ids:
$ref: '#/components/schemas/prioritized-pricebooks'
required:
- name
- catalog_id
- created_at
- updated_at
type:
description: This represents the type of object being returned. Always `catalog_rule`.
type: string
example: catalog_rule
enum:
- catalog_rule
meta:
$ref: '#/components/schemas/rule-meta'
required:
- id
- type
- attributes
error:
type: object
title: APIError
description: APIError is a json-api style part of an error response.
properties:
detail:
type: string
example: not processable
x-go-name: Detail
status:
type: string
example: '422'
x-go-name: Status
title:
type: string
example: There was a problem processing your request.
x-go-name: Title
x-go-name: APIError
rule-data:
type: object
title: CatalogRuleData
description: Container for a single catalog rule.
properties:
data:
$ref: '#/components/schemas/rule'
links:
$ref: '#/components/schemas/links'
required:
- data
page-meta:
type: object
description: Contains the results for the entire collection.
title: PageMeta
properties:
results:
description: Total number of results for the entire collection.
type: object
properties:
total:
description: Total number of results for the entire collection.
type: integer
format: int64
page:
type: object
properties:
limit:
description: The maximum number of records for all pages.
type: integer
format: int64
offset:
description: The current offset by number of pages.
type: integer
format: int64
current:
description: The current number of pages.
type: integer
format: int64
total:
description: The total number of records for the entire collection.
type: integer
format: int64
rule-list-data:
type: object
title: CatalogRuleListData
description: Container for a list of catalog rules.
properties:
meta:
$ref: '#/components/schemas/page-meta'
data:
type: array
items:
$ref: '#/components/schemas/rule'
links:
$ref: '#/components/schemas/links'
required:
- data
rule-create-data:
type: object
title: CatalogRuleCreateData
description: A catalog rule specifies which catalog to use for a given shopper context.
properties:
data:
type: object
properties:
attributes:
type: object
properties:
name:
description: The name of a catalog rule. The name must not contain spaces.
type: string
minLength: 1
example: rule-123
description:
description: A brief description of the purpose of a catalog rule.
type: string
example: Catalog Rule for most favored customers
default: ''
nullable: true
account_ids:
description: The list of accounts who are eligible to see this catalog. If this field is empty, the rule matches all accounts.
type: array
items:
type: string
nullable: true
account_tag_ids:
description: The list of account tag UUIDs. Accounts must have at least one of these tags to see this catalog. If this field is empty, the rule matches all accounts regardless of tags.
type: array
items:
type: string
nullable: true
customer_ids:
description: The list of customers who are eligible to see this catalog. If empty, the rule matches all customers.
type: array
items:
type: string
nullable: true
channels:
description: The list of channels in which this catalog can be displayed. A channel is the shopping experience, such as a mobile app or web storefront. If empty, the catalog rule matches all channels. The channel will eventually be included in the bearer token that is used for authorization, but currently, you must set the `EP-Channel` header in your requests.
type: array
items:
type: string
nullable: true
tags:
description: A list of user-defined tags that can be used to further restrict the eligibility criteria for this rule. Requests populate the catalog rule tag using the `EP-Context-Tag` header.
type: array
items:
type: string
nullable: true
schedules:
description: "Specifies a time period when a catalog is displayed, such as on a specific date or during summer. Requests populate the rule tag using the `EP-Context-Tag` header. \n\nThe schedules attribute must include the following.\n\n- `valid_from` matches the date and time that the catalog is displayed from. \n- `valid_to` matches the date and time the catalog is displayed to. \n\nCommerce runs on UTC time. \n\nYou can offset the timezone by adding the offset to the end of the date and time. For example, a catalog which contains a sale hierarchy that should appear for a set timeframe may be scheduled to publish on a given date and time within a given timezone. For instance, a sale that should begin on 1st of June 2022 05:00 ET and end on the 15th of June 2022 at 23:50 PT would have a valid schedule of `\"valid_from\": \"2022-06-01T05:00:00.000-05:00\"`, `\"valid_to\": \"2022-06-15T11:59:99.000-08:00\"`.\n"
type: array
items:
$ref: '#/components/schemas/rule-schedule'
nullable: true
catalog_id:
type: string
description: The unique identifier of a catalog.
example: d09b4e16-08a5-4f42-817c-6e0d98acbb63
pricebook_ids:
$ref: '#/components/schemas/prioritized-pricebooks'
required:
- name
- catalog_id
type:
description: This represents the type of object being returned. Always `catalog_rule`.
type: string
example: catalog_rule
enum:
- catalog_rule
required:
- type
- attributes
required:
- data
error-response:
type: object
title: ErrorResponse
description: ErrorResponse is a json-api style Error response.
properties:
errors:
type: array
items:
$ref: '#/components/schemas/error'
x-go-name: Errors
x-go-name: ErrorResponse
prioritized-pricebooks:
description: If you want multiple price books for different scenarios, such as seasonal sales, business versus retail pricing, and reward programs, when creating a catalog, you can specify up to five price books. You must configure a priority for your price books. Product prices are displayed in the catalog according to the priority of the price books.
type: array
maxItems: 5
items:
type: object
properties:
id:
description: A unique identifier of a price book.
type: string
format: uuid
priority:
description: Priority is a number and the price book with the highest number has the highest priority.
type: integer
required:
- priority
- id
x-go-name: PrioritizedPricebook
catalog-rule-validator-request:
type: object
properties:
data:
type: object
required:
- match_type
properties:
match_type:
type: string
enum:
- filter
- similarity
- conflict
- resolve_for_shopper
description: "The type of matching operation to perform on catalog rules:\n\n- **filter**: Advanced rule filtering with AND logic. Returns rules that match ALL specified criteria.\n\n- **similarity**: Finds rules similar to the supplied rule using OR logic. Returns rules sorted by similarity score (highest first) with metadata indicating:\n - Similarity score based on matching criteria (name: 100pts, account/customer/channel/tags: 5pts each, catalog: 3pts, pricebooks: 2pts, schedules: 2pts) \n - Whether the rule is active at the supplied match_date\n - Whether the rule would be resolved for a shopper context\n\n- **conflict**: Checks for conflicts between the supplied rule and existing rules. Returns rules that would conflict if the new rule were created.\n\n- **resolve_for_shopper**: Determines the exact catalog rule that would be applied for a given shopper context. Returns the single most specific matching rule or defaults to \"Default Catalog Resolution\".\n"
channels:
description: The list of channels in which this catalog can be displayed. A channel is the shopping experience, such as a mobile app or web storefront. If empty, the catalog rule matches all channels. The channel will eventually be included in the bearer token that is used for authorization, but currently, you must set the `EP-Channel` header in your requests.
type: array
items:
type: string
nullable: true
tags:
description: A list of user-defined tags that can be used to further restrict the eligibility criteria for this rule. Requests populate the catalog rule tag using the `EP-Context-Tag` header.
type: array
items:
type: string
nullable: true
account_ids:
type: array
items:
type: string
description: List of account IDs.
nullable: true
account_tag_ids:
type: array
items:
type: string
description: List of account tag UUIDs.
nullable: true
customer_ids:
type: array
items:
type: string
description: List of customer IDs.
nullable: true
pricebook_ids:
type: array
items:
type: string
description: List of pricebook IDs.
nullable: true
schedules:
type: array
items:
type: object
properties:
valid_from:
type: string
format: date-time
valid_to:
type: string
format: date-time
nullable: true
name:
type: string
description: The name of the catalog rule.
nullable: true
catalog_id:
type: string
description: The id of the catalog to match against.
nullable: true
match_date:
type: string
format: date-time
description: The date to match against the schedules.
nullable: true
rule-update-data:
type: object
title: CatalogRuleUpdateData
description: A catalog rule specifies which catalog to use for a given shopper context.
properties:
data:
type: object
properties:
id:
type: string
description: The catalog rule ID. Use this to get, modify, or delete the catalog rule.
example: 8dbb35b2-ef04-477e-974d-e5f3abe6faae
attributes:
type: object
properties:
name:
description: The name of a catalog rule. The name must not contain spaces.
type: string
minLength: 1
example: rule-123
nullable: true
description:
description: A description of the purpose of a catalog rule.
type: string
example: Catalog Rule for most favored customers
default: ''
nullable: true
account_ids:
description: Specifies the list of accounts who are eligible to see this catalog. If this field is empty, the rule matches all accounts.
type: array
items:
type: string
nullable: true
account_tag_ids:
description: The list of account tag UUIDs. Accounts must have at least one of these tags to see this catalog. If this field is empty, the rule matches all accounts regardless of tags.
type: array
items:
type: string
nullable: true
customer_ids:
description: The list of customers who are eligible to see this catalog. If empty, the rule matches all customers.
type: array
items:
type: string
nullable: true
channels:
description: The list of channels in which this catalog can be displayed. A channel is the shopping experience, such as a mobile app or web storefront. If empty, the catalog rule matches all channels. The channel will eventually be included in the bearer token that is used for authorization, but currently, you must set the `EP-Channel` header in your requests.
type: array
items:
type: string
nullable: true
schedules:
description: "Specifies a time period when a catalog is displayed, such as on a specific date or during summer. Requests populate the rule tag using the `EP-Context-Tag` header. \n\nThe schedules attribute must include the following.\n\n- `valid_from` matches the date and time that the catalog is displayed from. \n- `valid_to` matches the date and time the catalog is displayed to. \n\nCommerce runs on UTC time. \n\nYou can offset the timezone by adding t
# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/elastic-path/refs/heads/main/openapi/elastic-path-rules-api-openapi.yml