@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Customers V3
@base https://api.bigcommerce.com/stores/{store_hash}/v3
@auth ApiKey X-Auth-Token in header
@endpoints 34
@hint download_for_search
@toc customers(34)

@endpoint GET /customers
@optional {page: int, limit: num, id:in: [int], company:in: [str], customer_group_id:in: [str], date_created: str(date-time), date_created:max: str, date_created:min: str(date-time), date_modified: str(date-time), date_modified:min: str, date_modified:max: str(date-time), email:in: [str], name:in: [str], name:like: [str], phone:in: str, registration_ip_address:in: [int], include: [str], sort: str(date_created:asc/date_created:desc/last_name:asc/last_name:desc/date_modified:asc/date_modified:desc), after: str, before: str}
@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}}}}
@errors {422}

@endpoint POST /customers
@returns(200) {data: [map], meta: map}
@errors {413, 422}

@endpoint PUT /customers
@returns(200) {data: [map], meta: map}
@errors {413, 422}

@endpoint DELETE /customers
@required {id:in: [int]}
@returns(204)
@errors {422}

@endpoint GET /customers/addresses
@optional {Accept: str=application/json, Content-Type: str=application/json, page: int, limit: num, company:in: [str], name:in: [str], customer_id:in: [int], include: [str], id:in: [int]}
@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}}}}

@endpoint POST /customers/addresses
@optional {Accept: str=application/json, Content-Type: str=application/json}
@returns(200) {data: [map], meta: map}
@errors {422}

@endpoint PUT /customers/addresses
@optional {Accept: str=application/json, Content-Type: str=application/json}
@returns(200) {data: [map], meta: map}
@errors {422}

@endpoint DELETE /customers/addresses
@required {id:in: [int]}
@optional {Accept: str=application/json, Content-Type: str=application/json}
@returns(204)

@endpoint POST /customers/validate-credentials
@required {email: str, password: str}
@optional {channel_id: int}
@returns(200) {customer_id: int?, is_valid: bool}
@errors {422, 429}

@endpoint GET /customers/settings
@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}

@endpoint PUT /customers/settings
@optional {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}}
@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}

@endpoint GET /customers/settings/channels/{channel_id}
@required {channel_id: int}
@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}

@endpoint PUT /customers/settings/channels/{channel_id}
@required {channel_id: int}
@optional {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}
@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}

@endpoint GET /customers/attributes
@optional {page: int, limit: num, name: str, name:like: str, type: str, date_created: str(date-time), date_created:max: str(date-time), date_created:min: str(date-time), date_modified: str(date-time), date_modified:max: str(date-time), date_modified:min: str(date-time), Accept: str=application/json, Content-Type: str=application/json}
@returns(200) {data: [map], meta: map}

@endpoint POST /customers/attributes
@optional {Accept: str=application/json, Content-Type: str=application/json}
@returns(200) {data: [map], meta: map}
@errors {422}

@endpoint PUT /customers/attributes
@optional {Accept: str=application/json, Content-Type: str=application/json}
@returns(200) {data: [map], meta: map}
@errors {422}

@endpoint DELETE /customers/attributes
@required {id:in: [int(int32)]}
@optional {Accept: str=application/json, Content-Type: str=application/json}
@returns(204)

@endpoint GET /customers/attribute-values
@optional {Accept: str=application/json, Content-Type: str=application/json, page: int, limit: num, customer_id:in: [int], attribute_id:in: [int], name: str, date_created: str(date-time), date_created:max: str, date_created:min: str(date-time), date_modified: str(date-time), date_modified:max: str(date-time), date_modified:min: str}
@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}}}}

@endpoint PUT /customers/attribute-values
@optional {Accept: str=application/json, Content-Type: str=application/json}
@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}}}}
@errors {422}

@endpoint DELETE /customers/attribute-values
@required {id:in: [int(int32)]}
@optional {Accept: str=application/json, Content-Type: str=application/json}
@returns(204)

@endpoint GET /customers/form-field-values
@optional {Accept: str=application/json, Content-Type: str=application/json, page: int, limit: num, customer_id: int, address_id: int, field_name: str, field_type: str(checkboxes/date/multiline/numbers/password/radiobuttons/text/picklist), after: str, before: str}
@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}}}}
@errors {422}

@endpoint PUT /customers/form-field-values
@returns(200) {data: [any], meta: map}
@errors {422}

@endpoint GET /customers/{customerId}/consent
@returns(200) {allow: [str], deny: [str], updated_at: str(date-time)}
@errors {401, 403, 422}

@endpoint PUT /customers/{customerId}/consent
@optional {Content-Type: str=application/json, allow: [str], deny: [str]}
@returns(200) {allow: [str], deny: [str], updated_at: str(date-time)}
@errors {401, 403, 422}

@endpoint GET /customers/{customerId}/stored-instruments
@required {customerId: int}
@returns(200)
@errors {401, 403}

@endpoint GET /customers/{customerId}/metafields
@required {customerId: int}
@optional {page: int, limit: int, key: str, key:in: [str], namespace: str, namespace:in: [str], direction: str(asc/desc), include_fields: [str], date_created:min: str, date_created:max: str, date_modified:min: str, date_modified:max: str, before: str, after: str}
@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}}}}

@endpoint POST /customers/{customerId}/metafields
@required {customerId: int, permission_set: str(app_only/read/write/read_and_sf_access/write_and_sf_access), namespace: str, key: str, value: str}
@optional {description: str}
@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}}}}
@errors {400, 409, 422}

@endpoint GET /customers/{customerId}/metafields/{metafieldId}
@required {customerId: int, metafieldId: int}
@returns(200) {data: any, meta: map}
@errors {404}

@endpoint PUT /customers/{customerId}/metafields/{metafieldId}
@required {metafieldId: int, customerId: int}
@optional {metafieldId: int}
@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}}}}
@errors {400, 404}

@endpoint DELETE /customers/{customerId}/metafields/{metafieldId}
@required {customerId: int, metafieldId: int}
@returns(204)
@errors {404}

@endpoint GET /customers/metafields
@optional {page: int, limit: int, key: str, key:in: [str], namespace: str, namespace:in: [str], direction: str(asc/desc), include_fields: [str], date_modified:min: str, date_modified:max: str, date_created:min: str, date_created:max: str, before: str, after: str}
@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}}}}

@endpoint POST /customers/metafields
@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}}}}
@errors {400, 422}

@endpoint PUT /customers/metafields
@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}}}}
@errors {400, 422}

@endpoint DELETE /customers/metafields
@returns(200) {data: [int], errors: [any], meta: map{total: int, success: int, failed: int}}
@errors {400, 422}

@end
