{"files":{"SKILL.md":"---\nname: customers-v3\ndescription: \"Customers V3 API skill. Use when working with Customers V3 for customers. Covers 34 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Customers V3\n\n## Auth\nApiKey X-Auth-Token in header\n\n## Base URL\nhttps://api.bigcommerce.com/stores/{store_hash}/v3\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /customers -- get all customers\n3. POST /customers -- create first customer\n\n## Endpoints\n34 endpoints across 1 group. See references/api-spec.lap for full details.\n\n### Customers\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /customers | Get All Customers |\n| POST | /customers | Create Customers |\n| PUT | /customers | Update Customers |\n| DELETE | /customers | Delete Customers |\n| GET | /customers/addresses | Get All Customer Addresses |\n| POST | /customers/addresses | Create a Customer Address |\n| PUT | /customers/addresses | Update a Customer Address |\n| DELETE | /customers/addresses | Delete a Customer Address |\n| POST | /customers/validate-credentials | Validate a customer credentials |\n| GET | /customers/settings | Get Customer Settings |\n| PUT | /customers/settings | Update Customer Settings |\n| GET | /customers/settings/channels/{channel_id} | Get Customer Settings per Channel |\n| PUT | /customers/settings/channels/{channel_id} | Update Customer Settings per Channel |\n| GET | /customers/attributes | Get All Customer Attributes |\n| POST | /customers/attributes | Create a Customer Attribute |\n| PUT | /customers/attributes | Update a Customer Attribute |\n| DELETE | /customers/attributes | Delete Customer Attributes |\n| GET | /customers/attribute-values | Get All Customer Attribute Values |\n| PUT | /customers/attribute-values | Upsert Customer Attribute Values |\n| DELETE | /customers/attribute-values | Delete Customer Attribute Values |\n| GET | /customers/form-field-values | Get Customer Form Field Values |\n| PUT | /customers/form-field-values | Upsert Customer Form Field Values (Deprecated) |\n| GET | /customers/{customerId}/consent | Get Customer Consent |\n| PUT | /customers/{customerId}/consent | Update Customer Consent |\n| GET | /customers/{customerId}/stored-instruments | Get Stored Instruments |\n| GET | /customers/{customerId}/metafields | Get Customer Metafields |\n| POST | /customers/{customerId}/metafields | Create Customer Metafields |\n| GET | /customers/{customerId}/metafields/{metafieldId} | Get a Customer Metafield |\n| PUT | /customers/{customerId}/metafields/{metafieldId} | Update a Metafield |\n| DELETE | /customers/{customerId}/metafields/{metafieldId} | Delete a Customer Metafield |\n| GET | /customers/metafields | Get All Customer Metafields |\n| POST | /customers/metafields | Create Multiple Metafields |\n| PUT | /customers/metafields | Update Multiple Metafields |\n| DELETE | /customers/metafields | Delete Multiple Metafields |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all customers?\" -> GET /customers\n- \"Create a customer?\" -> POST /customers\n- \"List all addresses?\" -> GET /customers/addresses\n- \"Create a addresse?\" -> POST /customers/addresses\n- \"Create a validate-credential?\" -> POST /customers/validate-credentials\n- \"List all settings?\" -> GET /customers/settings\n- \"Get channel details?\" -> GET /customers/settings/channels/{channel_id}\n- \"Update a channel?\" -> PUT /customers/settings/channels/{channel_id}\n- \"List all attributes?\" -> GET /customers/attributes\n- \"Create a attribute?\" -> POST /customers/attributes\n- \"List all attribute-values?\" -> GET /customers/attribute-values\n- \"List all form-field-values?\" -> GET /customers/form-field-values\n- \"List all consent?\" -> GET /customers/{customerId}/consent\n- \"List all stored-instruments?\" -> GET /customers/{customerId}/stored-instruments\n- \"List all metafields?\" -> GET /customers/{customerId}/metafields\n- \"Create a metafield?\" -> POST /customers/{customerId}/metafields\n- \"Get metafield details?\" -> GET /customers/{customerId}/metafields/{metafieldId}\n- \"Update a metafield?\" -> PUT /customers/{customerId}/metafields/{metafieldId}\n- \"Delete a metafield?\" -> DELETE /customers/{customerId}/metafields/{metafieldId}\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Customers V3\n@base https://api.bigcommerce.com/stores/{store_hash}/v3\n@auth ApiKey X-Auth-Token in header\n@endpoints 34\n@hint download_for_search\n@toc customers(34)\n\n@endpoint GET /customers\n@desc Get All Customers\n@optional {page: int # Page number (`page` will be ignored if you provide `before` or `after` in the request). For example `page=1`., limit: num # Items count per page. `limit=50`, id:in: [int] # Filter items by ID. `id:in=4,5,6`, company:in: [str] # Filter items by company. `company:in=bigcommerce,commongood`, customer_group_id:in: [str] # Filter items by customer_group_id. `customer_group_id:in=5,6`, date_created: str(date-time) # Filter items by date created, for example, `2024-05-14T09:34:00` or `2024-05-14`., date_created:max: str # Filter items by maximum date created, for example, `2024-05-14T09:34:00` or `2024-05-14`. Returns customers created before this date., date_created:min: str(date-time) # Filter items by date created for example, `2024-05-14T09:34:00` or `2024-05-14`. Returns customers created after this date., date_modified: str(date-time) # Filter items by date modified, for example, `2024-05-14T09:34:00` or `2024-05-14`., date_modified:min: str # Filter items by minimum date modified, for example, `2024-05-14T09:34:00` or `2024-05-14`. Returns customers modified after this date., date_modified:max: str(date-time) # Filter items by maximum date modified, for example, `2024-05-14T09:34:00` or `2024-05-14`. Returns customers modified before this date., email:in: [str] # Filter items by email. `email:in=janedoe@example.com`, name:in: [str] # Filter items by first_name and last_name. `name=james moriarty`, name:like: [str] # Filter items by substring in first_name and last_name. `name:like=moriarty,sherlock` Concatenates the first_name and last_name fields., phone:in: str # Filter items by phone number. `phone:in=555-55-5555`, registration_ip_address:in: [int] # Filter items by registration_ip_address. If the customer was created using the API, then registration address is blank. `registration_ip_address:in=12.345.6.789`, include: [str] # Indicates whether to include customer sub-resources:  * `addresses` - customer addresses  * `storecredit` - store credit  * `attributes` - customer attributes and address attributes  * `formfields` - customer and address form fields  * `shopper_profile_id` - the ID of the shopper profile associated with the customer (Beta)  * `segment_ids`- segments the customer belongs to (Beta)   `include=addresses,storecredit,attributes,formfields,shopper_profile_id,segment_ids`, sort: str(date_created:asc/date_created:desc/last_name:asc/last_name:desc/date_modified:asc/date_modified:desc) # Sort items by date_created, date_modified, or last_name:* `date_created:asc` - date created, ascending* `date_created:desc` - date created, descending* `last_name:asc` - last name, ascending* `last_name:desc` - last name, descending * `date_modified:asc` - date modified, ascending* `date_modified:desc`- date modified, descending  Example: `sort=last_name:asc`, after: str # The cursor reference of the last entry for the previous page. Use the `end_cursor` value from the last response to get the next page (`end_cursor` is only returned on the first page or when the request contains query parameter `before` or `after`). For example `after=eyJpZCI6MjA0fQ`., before: str # The cursor reference of the first entry for the next page. Use the `start_cursor` value from the last response to get the previous page (`start_cursor` is only returned on the first page or when the request contains query parameter `before` or `after`). For example `before=eyJpZCI6MjA1fQ`.}\n@returns(200) {data: [map], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}, cursor_pagination: map{count: int, per_page: int, start_cursor: str, end_cursor: str, links: map{previous: str, current: str, next: str}}}} # Get Customer Collection Response\n@errors {422: The optional filter parameter was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n\n@endpoint POST /customers\n@desc Create Customers\n@returns(200) {data: [map], meta: map} # Customer Collection Response\n@errors {413: The request payload is too large. The maximum number of items allowed in the array is 10., 422: The *Customer* was not valid. This is the result of missing required fields or trying to edit a read only field. See the response for more details.}\n@example_request [{\"email\":\"jane.smith@example.com\",\"first_name\":\"Jane\",\"last_name\":\"Smith\",\"company\":\"Acme Corp\",\"phone\":\"555-123-4567\",\"notes\":\"Preferred customer\",\"tax_exempt_category\":\"Non-profit\",\"customer_group_id\":0,\"addresses\":[{\"address1\":\"Addr 1\",\"address2\":\"\",\"address_type\":\"residential\",\"city\":\"San Francisco\",\"company\":\"History\",\"country_code\":\"US\",\"first_name\":\"Ronald\",\"last_name\":\"Swimmer\",\"phone\":\"707070707\",\"postal_code\":\"33333\",\"state_or_province\":\"California\",\"form_fields\":[{\"name\":\"shirt_size\",\"value\":\"Large\"}]}],\"authentication\":{\"force_password_reset\":true,\"new_password\":\"SecurePassword123!\"},\"accepts_product_review_abandoned_cart_emails\":true,\"trigger_account_created_notification\":true,\"store_credit_amounts\":[{\"amount\":43.15}],\"origin_channel_id\":1,\"channel_ids\":[1],\"form_fields\":[{\"name\":\"shirt_size\",\"value\":\"Large\"}]}]\n\n@endpoint PUT /customers\n@desc Update Customers\n@returns(200) {data: [map], meta: map} # Customer Collection Response\n@errors {413: The request payload is too large. The maximum number of items allowed in the array is 10., 422: The `Customer` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n@example_request [{\"email\":\"jane.smith@example.com\",\"first_name\":\"Jane\",\"last_name\":\"Smith\",\"company\":\"Acme Corp\",\"phone\":\"555-123-4567\",\"registration_ip_address\":\"192.168.1.1\",\"notes\":\"Preferred customer\",\"tax_exempt_category\":\"Non-profit\",\"customer_group_id\":0,\"id\":1,\"authentication\":{\"force_password_reset\":true,\"new_password\":\"SecurePassword123!\"},\"accepts_product_review_abandoned_cart_emails\":true,\"store_credit_amounts\":[{\"amount\":43.15}],\"origin_channel_id\":1,\"channel_ids\":[1],\"form_fields\":[{\"name\":\"shirt_size\",\"value\":\"Large\"}]}]\n\n@endpoint DELETE /customers\n@desc Delete Customers\n@required {id:in: [int] # Filter items by ID. `id:in=4,5,6`}\n@returns(204)\n@errors {422: The `id:in` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n\n@endpoint GET /customers/addresses\n@desc Get All Customer Addresses\n@optional {Accept: str=application/json, Content-Type: str=application/json, page: int # Page number. `page=1`, limit: num # Items count per page. `limit=50`, company:in: [str] # Filter items by company. `company:in=bigcommerce,commongood`, name:in: [str] # Filter items by first_name and last_name. `name:in=James+Moriarty`, customer_id:in: [int] # Filter by the ID of the customer. Also accepts comma-separated IDs to filter for multiple customers. `customer_id:in=23,24,55`, include: [str] # Indicates whether to include customer address sub-resources: * `formfields` - address form fields `include=formfields`, id:in: [int] # Filter items by ID. `id:in=4,5,6`}\n@returns(200) {data: [map], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}}}\n\n@endpoint POST /customers/addresses\n@desc Create a Customer Address\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(200) {data: [map], meta: map}\n@errors {422: The `Address` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n@example_request [{\"first_name\":\"John\",\"last_name\":\"Doe\",\"address1\":\"111 E West Street\",\"address2\":\"654\",\"city\":\"Akron\",\"state_or_province\":\"Ohio\",\"postal_code\":\"44325\",\"country_code\":\"US\",\"phone\":\"1234567890\",\"address_type\":\"residential\",\"customer_id\":11,\"form_fields\":[{\"name\":\"shirt_size\",\"value\":\"Large\"}]}]\n\n@endpoint PUT /customers/addresses\n@desc Update a Customer Address\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(200) {data: [map], meta: map}\n@errors {422: The `Address` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n@example_request [{\"id\":11,\"first_name\":\"John\",\"last_name\":\"Doe\",\"address1\":\"111 E West Street\",\"address2\":\"654\",\"city\":\"Akron\",\"state_or_province\":\"Ohio\",\"postal_code\":\"44325\",\"country_code\":\"US\",\"phone\":\"1234567890\",\"address_type\":\"residential\",\"form_fields\":[{\"name\":\"shirt_size\",\"value\":\"Large\"}]}]\n\n@endpoint DELETE /customers/addresses\n@desc Delete a Customer Address\n@required {id:in: [int] # Filter items by ID. `id:in=4,5,6`}\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(204)\n\n@endpoint POST /customers/validate-credentials\n@desc Validate a customer credentials\n@required {email: str # Customer email address., password: str # Customer password.}\n@optional {channel_id: int # ChannelId to check the customer credentials against - If this field is empty we will use channel 1.}\n@returns(200) {customer_id: int?, is_valid: bool} # Returns if the customer credentials provided are valid or not.\n@errors {422: This is the result of missing required fields. See the response for more details., 429: Allowed number of requests exceeded.}\n@example_request {\"email\":\"foo@bar.com\",\"password\":\"password\",\"channel_id\":1}\n\n@endpoint GET /customers/settings\n@desc Get Customer Settings\n@returns(200) {data: map{privacy_settings: map{ask_shopper_for_tracking_consent: bool, policy_url: str}, customer_group_settings: map{guest_customer_group_id: int, default_customer_group_id: int}}, meta: map} # Returns customer settings values for global level.\n\n@endpoint PUT /customers/settings\n@desc Update Customer Settings\n@optional {privacy_settings: map{ask_shopper_for_tracking_consent: bool, policy_url: str} # Controls the privacy settings., customer_group_settings: map{guest_customer_group_id: int, default_customer_group_id: int} # The settings for a collection of customers.}\n@returns(200) {data: map{privacy_settings: map{ask_shopper_for_tracking_consent: bool, policy_url: str}, customer_group_settings: map{guest_customer_group_id: int, default_customer_group_id: int}}, meta: map} # Customer settings are returned on a global level.\n@example_request {\"privacy_settings\":{\"ask_shopper_for_tracking_consent\":true,\"policy_url\":\"https://bigcommmerce.com/policy\"},\"customer_group_settings\":{\"guest_customer_group_id\":0,\"default_customer_group_id\":0}}\n\n@endpoint GET /customers/settings/channels/{channel_id}\n@desc Get Customer Settings per Channel\n@required {channel_id: int}\n@returns(200) {data: map{privacy_settings: map{ask_shopper_for_tracking_consent: bool, policy_url: str}, customer_group_settings: map{guest_customer_group_id: int, default_customer_group_id: int}, allow_global_logins: bool}, meta: map} # Customer settings for this channel are returned.\n\n@endpoint PUT /customers/settings/channels/{channel_id}\n@desc Update Customer Settings per Channel\n@required {channel_id: int}\n@optional {privacy_settings: map{ask_shopper_for_tracking_consent: bool, policy_url: str} # Controls the privacy settings., customer_group_settings: map{guest_customer_group_id: int, default_customer_group_id: int} # The settings for a collection of customers., allow_global_logins: bool # * Determines if a channel allows global customer to login * Determines if customers created on this channel will get global access/login}\n@returns(200) {data: map{privacy_settings: map{ask_shopper_for_tracking_consent: bool, policy_url: str}, customer_group_settings: map{guest_customer_group_id: int, default_customer_group_id: int}}, meta: map} # Customer settings are returned.\n@example_request {\"privacy_settings\":{\"ask_shopper_for_tracking_consent\":true,\"policy_url\":\"https://bigcommmerce.com/policy\"},\"customer_group_settings\":{\"guest_customer_group_id\":0,\"default_customer_group_id\":0},\"allow_global_logins\":true}\n\n@endpoint GET /customers/attributes\n@desc Get All Customer Attributes\n@optional {page: int # Page number. `page=1`, limit: num # Items count per page. `limit=50`, name: str # Filter items by customer attribute name. `name=Date+Joined`, name:like: str # Filter items by substring in customer attribute name. `name:like=join`, type: str # The type of the customer attribute., date_created: str(date-time) # Filter items by `date_created`, for example, `2024-05-14T09:34:00`, `2024-05-14T09:34:00` or `2024-05-14`., date_created:max: str(date-time) # Filter items by maximum `date_created`, for example, `2024-05-14T09:34:00`, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields created before this date., date_created:min: str(date-time) # Filter items by minimum `date_created`, for example, `2024-05-14T09:34:00`, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields created after this date., date_modified: str(date-time) # Filter items by `date_modified`, for example, `2024-05-14T09:34:00` or `2024-05-14`., date_modified:max: str(date-time) # Filter items by maximum `date_modified`, for example, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields modified before this date., date_modified:min: str(date-time) # Filter items by minimum `date_modified`, for example, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields modified after this date., Accept: str=application/json, Content-Type: str=application/json}\n@returns(200) {data: [map], meta: map}\n\n@endpoint POST /customers/attributes\n@desc Create a Customer Attribute\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(200) {data: [map], meta: map}\n@errors {422: The `Attribute` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n\n@endpoint PUT /customers/attributes\n@desc Update a Customer Attribute\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(200) {data: [map], meta: map}\n@errors {422: The `Attribute` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n\n@endpoint DELETE /customers/attributes\n@desc Delete Customer Attributes\n@required {id:in: [int(int32)] # Filter items by ID.}\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(204)\n\n@endpoint GET /customers/attribute-values\n@desc Get All Customer Attribute Values\n@optional {Accept: str=application/json, Content-Type: str=application/json, page: int # Page number. `page=1`, limit: num # Items count per page. `limit=50`, customer_id:in: [int] # Filter items by the customer ID. `customer_id:in=23,24,55`, attribute_id:in: [int] # Filter items by the attribute ID. `attribute_id:in=1,2`, name: str # Filter items by the attribute name. `name=age`, date_created: str(date-time) # Filter items by `date_created`, for example, `2024-05-14T09:34:00`, `2024-05-14T09:34:00` or `2024-05-14`., date_created:max: str # Filter items by maximum `date_created`, for example, `2024-05-14T09:34:00`, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields created before this date., date_created:min: str(date-time) # Filter items by minimum `date_created`, for example, `2024-05-14T09:34:00`, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields created after this date, date_modified: str(date-time) # Filter items by `date_modified`, for example, `2024-05-14T09:34:00` or `2024-05-14`., date_modified:max: str(date-time) # Filter items by maximum `date_modified`, for example, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields modified before this date., date_modified:min: str # Filter items by minimum `date_modified`, for example, `2024-05-14T09:34:00` or `2024-05-14`. ISO 8601 full-date is required, ISO 8601 full-time is not required. UNIX timestamp also accepted. Returns metafields modified after this date.}\n@returns(200) {data: [map], meta: map{pagination: map{total: int(int32), count: int(int32), per_page: int(int32), current_page: int(int32), total_pages: int(int32), links: map{previous: str, current: str, next: str}}}}\n\n@endpoint PUT /customers/attribute-values\n@desc Upsert Customer Attribute Values\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(200) {data: [map], meta: map{pagination: map{total: int(int32), count: int(int32), per_page: int(int32), current_page: int(int32), total_pages: int(int32), links: map{previous: str, current: str, next: str}}}}\n@errors {422: The `CustomerAttributeValue` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n@example_request [{\"attribute_id\":1,\"value\":\"No\",\"customer_id\":2}]\n\n@endpoint DELETE /customers/attribute-values\n@desc Delete Customer Attribute Values\n@required {id:in: [int(int32)] # Filter items by ID. `id:in=4,5,6`}\n@optional {Accept: str=application/json, Content-Type: str=application/json}\n@returns(204)\n\n@endpoint GET /customers/form-field-values\n@desc Get Customer Form Field Values\n@optional {Accept: str=application/json, Content-Type: str=application/json, page: int # Page number (`page` will be ignored if you provide `before` or `after` in the request). For example `page=1`., limit: num # Items count per page. `limit=50`, customer_id: int # Filter by the customer ID., address_id: int # Filter by the ID of the customer address., field_name: str # Filter by the field name., field_type: str(checkboxes/date/multiline/numbers/password/radiobuttons/text/picklist) # Filter by the field type.  * `checkboxes` - checkboxes field  * `date` - date field  * `multiline` - multiline text field  * `numbers` - numbers only field  * `password` - password field  * `radiobuttons` - radio buttons field  * `text` - text field  * `picklist` - pick list field, after: str # The cursor reference of the last entry for the previous page. Use the `end_cursor` value from the last response to get the next page (`end_cursor` is only returned on the first page or when the request contains query parameter `before` or `after`). For example `after=eyJzZXNzaW9uSWQiOjM4LCJmaWVsZElkIjo0MH0`., before: str # The cursor reference of the first entry for the next page. Use the `start_cursor` value from the last response to get the previous page (`start_cursor` is only returned on the first page or when the request contains query parameter `before` or `after`). For example `before=eyJzZXNzaW9uSWQiOjgsImZpZWxkSWQiOjMxfQ`.}\n@returns(200) {data: [any], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}, cursor_pagination: map{count: int, per_page: int, start_cursor: str, end_cursor: str, links: map{previous: str, current: str, next: str}}}}\n@errors {422: The form field value was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n\n@endpoint PUT /customers/form-field-values\n@desc Upsert Customer Form Field Values (Deprecated)\n@returns(200) {data: [any], meta: map}\n@errors {422: The form field value was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n@example_request [{\"customer_id\":12,\"name\":\"Sales Rep\",\"value\":\"Miss Moneypenny\"},{\"customer_id\":12,\"name\":\"How did you hear about us?\",\"value\":\"Other\"},{\"customer_id\":12,\"name\":\"What is your favorite pizza topping?\",\"value\":\"Mushrooms\"}]\n\n@endpoint GET /customers/{customerId}/consent\n@desc Get Customer Consent\n@returns(200) {allow: [str], deny: [str], updated_at: str(date-time)}\n@errors {401: Unauthorized - the v3 Auth client ID or token in the request are not a valid combination for this store., 403: Missing scope - the v3 Auth token is valid but does not have proper permissions to access this endpoint., 422: Invalid JSON request body - missing or invalid data.}\n\n@endpoint PUT /customers/{customerId}/consent\n@desc Update Customer Consent\n@optional {Content-Type: str=application/json, allow: [str], deny: [str]}\n@returns(200) {allow: [str], deny: [str], updated_at: str(date-time)}\n@errors {401: Unauthorized - the v3 Auth client ID or token in the request are not a valid combination for this store., 403: Missing scope - the v3 Auth token is valid but does not have proper permissions to access this endpoint., 422: Invalid JSON request body - missing or invalid data.}\n\n@endpoint GET /customers/{customerId}/stored-instruments\n@desc Get Stored Instruments\n@required {customerId: int # The ID of the customer.}\n@returns(200) OK\n@errors {401: Unauthorized, 403: Missing scope - the v3 Auth token is valid but does not have proper permissions to access this endpoint.}\n\n@endpoint GET /customers/{customerId}/metafields\n@desc Get Customer Metafields\n@required {customerId: int # The ID of the customer.}\n@optional {page: int # Specifies the page number in a limited (paginated) list of products., limit: int # Controls the number of items per page in a limited (paginated) list of products., key: str # Filter based on a metafieldʼs key., key:in: [str] # Filter based on comma-separated metafieldʼs keys. Could be used with vanilla 'key' query parameter., namespace: str # Filter based on a metafieldʼs namespaces., namespace:in: [str] # Filter based on comma-separated metafieldʼs namespaces. Could be used with vanilla `namespace` query parameter., direction: str(asc/desc) # Sort direction. Acceptable values are: `asc`, `desc`., include_fields: [str] # Fields to include, in a comma-separated list. The ID and the specified fields will be returned., date_created:min: str # Filter items by minimum date created. For example, `date_created:min=2019-09-04T00:00:00` or `date_created:min=2019-09-04`. Returns metafields created after this date., date_created:max: str # Filter items by maximum date created. For example, `date_created:max=`2024-05-14T09:34:00` or `date_created:max=2019-09-04`. Returns metafields created before this date., date_modified:min: str # Filter items by minimum date modified. For example, `date_modified:min=`2024-05-14T09:34:00` or `date_modified:min=2019-09-04`. Returns metafields modified after this date., date_modified:max: str # Filter items by maximum date modified. For example, `date_modified:max=2019-09-04T00:00:00` or `date_modified:max=2019-09-04`. Returns metafields modified before this date., before: str # A cursor indicating where to start retrieving the previous page of results. Use this parameter to paginate backward. Not required for the initial request. For subsequent requests, use the end_cursor value returned in meta.cursor_pagination from the previous response. Works with limit, direction, and other supported query parameters. When specified, offset-based pagination (page) is ignored. Cannot be used in combination with the after parameter., after: str # A cursor indicating where to start retrieving the next page of results. Use this parameter to paginate forward. Not required for the initial request. For subsequent requests, use the start_cursor value returned in meta.cursor_pagination from the previous response. Works with limit, direction, and other supported query parameters. When specified, offset-based pagination (page) is ignored. Cannot be used in combination with the before parameter.}\n@returns(200) {data: [any], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}}} # Response payload for the BigCommerce API.\n\n@endpoint POST /customers/{customerId}/metafields\n@desc Create Customer Metafields\n@required {customerId: int # The ID of the customer., permission_set: str(app_only/read/write/read_and_sf_access/write_and_sf_access) # Determines the visibility and writeability of the field by other API consumers.  | Value | Description | | :--- | :--- | | `app_only` | Private to the app that owns the field. | | `read` | Visible to other API consumers. | | `write` | Open for reading and writing by other API consumers. | | `read_and_sf_access` | Visible to other API consumers, including on the storefront. | | `write_and_sf_access` | Open for reading and writing by other API consumers, including on the storefront. |, namespace: str # Namespace for the metafield, for organizational purposes., key: str # The name of the field, for example: `location_id`, `color`., value: str # The value of the field, for example: `1`, `blue`.}\n@optional {description: str # Description for the metafields.}\n@returns(200) {data: [map], errors: [any], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}, cursor_pagination: map{count: int, per_page: int, start_cursor: str, end_cursor: str, links: map{previous: str, current: str, next: str}}}} # Response payload for the BigCommerce API.\n@errors {400: Bad Request. Input is invalid., 409: The `Metafield` conflicts with another `Metafield`. This can result from duplicate unique key combinations of the appʼs client id, namespace, key, resource_type, and resource_id., 422: The `Metafield` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.}\n\n@endpoint GET /customers/{customerId}/metafields/{metafieldId}\n@desc Get a Customer Metafield\n@required {customerId: int # The ID that belongs to the customer., metafieldId: int # The ID that is generated for a metafield when created.}\n@returns(200) {data: any, meta: map}\n@errors {404: Not found (A metafield was not found with this query).}\n\n@endpoint PUT /customers/{customerId}/metafields/{metafieldId}\n@desc Update a Metafield\n@required {metafieldId: int # The ID of the metafield belonging to the customer. The metafieldId is a generated response when sending a POST query to the Create a Customer Metafields endpoint., customerId: int # The ID of the customer.}\n@optional {metafieldId: int # The ID that is generated for a metafield when created.}\n@returns(200) {data: [map], errors: [any], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}, cursor_pagination: map{count: int, per_page: int, start_cursor: str, end_cursor: str, links: map{previous: str, current: str, next: str}}}} # Response payload for the BigCommerce API.\n@errors {400: Bad Request. Input is invalid., 404: Not found (A metafield was not found with this query).}\n\n@endpoint DELETE /customers/{customerId}/metafields/{metafieldId}\n@desc Delete a Customer Metafield\n@required {customerId: int # The ID of the customer., metafieldId: int # The ID of the metafield belonging to the customer. The metafieldId is a generated response when sending a POST query to the Create a Customer Metafields endpoint.}\n@returns(204) Response object for customer metafields deletion with success.\n@errors {404: Not found (A metafield was not found with this query).}\n\n@endpoint GET /customers/metafields\n@desc Get All Customer Metafields\n@optional {page: int # Specifies the page number in a limited (paginated) list of products., limit: int # Controls the number of items per page in a limited (paginated) list of products., key: str # Filter based on a metafieldʼs key., key:in: [str] # Filter based on comma-separated metafieldʼs keys. Could be used with vanilla 'key' query parameter., namespace: str # Filter based on a metafieldʼs namespaces., namespace:in: [str] # Filter based on comma-separated metafieldʼs namespaces. Could be used with vanilla `namespace` query parameter., direction: str(asc/desc) # Sort direction. Acceptable values are: `asc`, `desc`., include_fields: [str] # Fields to include, in a comma-separated list. The ID and the specified fields will be returned., date_modified:min: str # Filter items by minimum date modified. For example, `date_modified:min=`2024-05-14T09:34:00` or `date_modified:min=2019-09-04`. Returns metafields modified after this date., date_modified:max: str # Filter items by maximum date modified. For example, `date_modified:max=2019-09-04T00:00:00` or `date_modified:max=2019-09-04`. Returns metafields modified before this date., date_created:min: str # Filter items by minimum date created. For example, `date_created:min=2019-09-04T00:00:00` or `date_created:min=2019-09-04`. Returns metafields created after this date., date_created:max: str # Filter items by maximum date created. For example, `date_created:max=`2024-05-14T09:34:00` or `date_created:max=2019-09-04`. Returns metafields created before this date., before: str # A cursor indicating where to start retrieving the previous page of results. Use this parameter to paginate backward. Not required for the initial request. For subsequent requests, use the end_cursor value returned in meta.cursor_pagination from the previous response. Works with limit, direction, and other supported query parameters. When specified, offset-based pagination (page) is ignored. Cannot be used in combination with the after parameter., after: str # A cursor indicating where to start retrieving the next page of results. Use this parameter to paginate forward. Not required for the initial request. For subsequent requests, use the start_cursor value returned in meta.cursor_pagination from the previous response. Works with limit, direction, and other supported query parameters. When specified, offset-based pagination (page) is ignored. Cannot be used in combination with the before parameter.}\n@returns(200) {data: [map], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}, cursor_pagination: map{count: int, per_page: int, start_cursor: str, end_cursor: str, links: map{previous: str, current: str, next: str}}}} # List of `Metafield` objects.\n\n@endpoint POST /customers/metafields\n@desc Create Multiple Metafields\n@returns(200) {data: [map], errors: [any], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}, cursor_pagination: map{count: int, per_page: int, start_cursor: str, end_cursor: str, links: map{previous: str, current: str, next: str}}}} # Response payload for the BigCommerce API.\n@errors {400: Bad Request. Input is invalid., 422: Response object for metafields creation with partial success.}\n\n@endpoint PUT /customers/metafields\n@desc Update Multiple Metafields\n@returns(200) {data: [map], errors: [any], meta: map{pagination: map{total: int, count: int, per_page: int, current_page: int, total_pages: int, links: map{previous: str, current: str, next: str}}, cursor_pagination: map{count: int, per_page: int, start_cursor: str, end_cursor: str, links: map{previous: str, current: str, next: str}}}} # Response payload for the BigCommerce API.\n@errors {400: Bad Request. Input is invalid., 422: Response object for metafields creation with partial success.}\n\n@endpoint DELETE /customers/metafields\n@desc Delete Multiple Metafields\n@returns(200) {data: [int], errors: [any], meta: map{total: int, success: int, failed: int}} # Response object for metafields deletion with success.\n@errors {400: Bad Request. Input is invalid., 422: Response object for metafields deletion with partial success.}\n\n@end\n"}}