Commerce Layer is proud to be an official sponsor the JAMstack Conf in San Francisco — 16-18 October, 2019 🎉 Don't miss out!

API REFERENCE

Customers

Customers must contain an email address and, optionally, a password. Registered customers can get an access token through the Password Flow to manage their data. Customer status can be one of "prospect," (with no orders) "acquired," (with one order) or "repeat" (with two or more orders). Associate a customer to a customer group if you want to assign a dedicated price list to that customer (learn more).

The customer object

A Customer object is returned as part of the response body of each successful create, list, retrieve or update API call. The following table contains the list of all its fields along with their type, description and example values.

Object fields:
email
string
The customer's email address
status
string
The customer's status, one of 'prospect', 'acquired', or 'repeat'.
Example:
prospect
id
integer
Unique identifier for the resource.
Example:
1234
created_at
datetime
Time at which the resource was created.
Example:
2018-01-01T12:00:00.000Z
updated_at
datetime
Time at which the resource was last updated.
Example:
2018-01-01T12:00:00.000Z
reference
string
A string that you can use to add your own identifier to the resource. This can be useful for intergrating the resource to an external system, like an ERP, a marketing tool or a CRM.
Example:
ANYREFEFERNCE
metadata
object
Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.
Example:
{"foo":"bar"}
relationship (N:1)
The group to which this customer belongs (optional).
relationship (1:N)
The customer's saved addresses, i.e. their address book.
relationship (1:N)
The customer's saved creadit cards, i.e. their wallet.
relationship (1:N)
The customer's subscriptions.
relationship (1:N)
The customer's orders, either pending or placed.

Create a customer

To create a new customer, send a POST request to the /api/customers endpoint, passing the resource arguments in the request body. The following table contains the list of all the possible arguments, along with their type, description and examples values. All the arguments marked as required must be present in the request.

Arguments:
email
required
The customer's email address
password
optional
The customer's password. Initiate a customer password reset flow if you need to change it.
Example:
secret
reference
optional
A string that you can use to add your own identifier to the resource. This can be useful for intergrating the resource to an external system, like an ERP, a marketing tool or a CRM.
Example:
ANYREFEFERNCE
metadata
optional
Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.
Example:
{"foo":"bar"}
optional
The group to which this customer belongs (optional).
Example request:
POST /api/customers HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json

{
  "data": {
    "type": "customers",
    "attributes": {
      "email": "[email protected]"
    }
  }
}
Example response:
HTTP/1.1 201 Created
Content-Type: application/vnd.api+json

{
  "data": {
    "id": "1234",
    "type": "customers",
    "links": {
      "self": "https://your-brand.commercelayer.io/api/customers/1234"
    },
    "attributes": {
      "email": "[email protected]",
      "status": "prospect",
      "id": "1234",
      "created_at": "2018-01-01T12:00:00.000Z",
      "updated_at": "2018-01-01T12:00:00.000Z",
      "reference": "ANYREFEFERNCE",
      "metadata": {
        "foo": "bar"
      }
    },
    "relationships": {
      "customer_group": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_group",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_group"
        }
      },
      "customer_addresses": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_addresses",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_addresses"
        }
      },
      "customer_payment_sources": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_payment_sources",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_payment_sources"
        }
      },
      "customer_subscriptions": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_subscriptions",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_subscriptions"
        }
      },
      "orders": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/orders",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/orders"
        }
      }
    },
    "meta": {
      "mode": "test"
    }
  }
}

List all customers

To fetch a collection of customers, send a GET request to the /api/customers endpoint.

Example request:
GET /api/customers HTTP/1.1
Accept: application/vnd.api+json
Example response:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json

{
  "data": [
    {
      "id": "1234",
      "type": "customers",
      "links": {
        "self": "https://your-brand.commercelayer.io/api/customers/1234"
      },
      "attributes": {
        "email": "[email protected]",
        "status": "prospect",
        "id": "1234",
        "created_at": "2018-01-01T12:00:00.000Z",
        "updated_at": "2018-01-01T12:00:00.000Z",
        "reference": "ANYREFEFERNCE",
        "metadata": {
          "foo": "bar"
        }
      },
      "relationships": {
        "customer_group": {
          "links": {
            "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_group",
            "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_group"
          }
        },
        "customer_addresses": {
          "links": {
            "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_addresses",
            "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_addresses"
          }
        },
        "customer_payment_sources": {
          "links": {
            "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_payment_sources",
            "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_payment_sources"
          }
        },
        "customer_subscriptions": {
          "links": {
            "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_subscriptions",
            "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_subscriptions"
          }
        },
        "orders": {
          "links": {
            "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/orders",
            "related": "https://your-brand.commercelayer.io/api/customers/1234/orders"
          }
        }
      },
      "meta": {
        "mode": "test"
      }
    },
    {
      "other": "... 24 customers (first page)"
    }
  ],
  "meta": {
    "record_count": 125,
    "page_count": 5
  },
  "links": {
    "first": "/api/customers?page[number]=1&page[size]=25",
    "prev": "/api/customers?page[number]=2&page[size]=25",
    "next": "/api/customers?page[number]=4&page[size]=25",
    "last": "/api/customers?page[number]=5&page[size]=25"
  }
}
Sortable attributes
id created_at updated_at reference

Retrieve a customer

To fetch a single customer, send a GET request to the /api/customers/{{id}} endpoint, where {{id}} is the id of the resource that you want to retrieve.

Example request:
GET /api/customers/1234 HTTP/1.1
Accept: application/vnd.api+json
Example response:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json

{
  "data": {
    "id": "1234",
    "type": "customers",
    "links": {
      "self": "https://your-brand.commercelayer.io/api/customers/1234"
    },
    "attributes": {
      "email": "[email protected]",
      "status": "prospect",
      "id": "1234",
      "created_at": "2018-01-01T12:00:00.000Z",
      "updated_at": "2018-01-01T12:00:00.000Z",
      "reference": "ANYREFEFERNCE",
      "metadata": {
        "foo": "bar"
      }
    },
    "relationships": {
      "customer_group": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_group",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_group"
        }
      },
      "customer_addresses": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_addresses",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_addresses"
        }
      },
      "customer_payment_sources": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_payment_sources",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_payment_sources"
        }
      },
      "customer_subscriptions": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_subscriptions",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_subscriptions"
        }
      },
      "orders": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/orders",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/orders"
        }
      }
    },
    "meta": {
      "mode": "test"
    }
  }
}

Update a customer

To update an existing customer, send a PATCH request to the /api/customers/{{id}} endpoint, where {{id}} is the id of the resource that you want to update. The following table contains the list of all the possible arguments that you can pass with the request body, along with their type, description and examples values. Please note that all arguments are optional.

Arguments:
email
optional
The customer's email address
password
optional
The customer's password. Initiate a customer password reset flow if you need to change it.
Example:
secret
reference
optional
A string that you can use to add your own identifier to the resource. This can be useful for intergrating the resource to an external system, like an ERP, a marketing tool or a CRM.
Example:
ANYREFEFERNCE
metadata
optional
Set of key-value pairs that you can attach to the resource. This can be useful for storing additional information about the resource in a structured format.
Example:
{"foo":"bar"}
optional
The group to which this customer belongs (optional).
Example request:
PATCH /api/customers/1234 HTTP/1.1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json

{
  "data": {
    "type": "customers",
    "id": 1234,
    "attributes": {
      "email": "[email protected]"
    },
    "relationships": {
    }
  }
}
Example response:
HTTP/1.1 201 Created
Content-Type: application/vnd.api+json

{
  "data": {
    "id": "1234",
    "type": "customers",
    "links": {
      "self": "https://your-brand.commercelayer.io/api/customers/1234"
    },
    "attributes": {
      "email": "[email protected]",
      "status": "prospect",
      "id": "1234",
      "created_at": "2018-01-01T12:00:00.000Z",
      "updated_at": "2018-01-01T12:00:00.000Z",
      "reference": "ANYREFEFERNCE",
      "metadata": {
        "foo": "bar"
      }
    },
    "relationships": {
      "customer_group": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_group",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_group"
        }
      },
      "customer_addresses": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_addresses",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_addresses"
        }
      },
      "customer_payment_sources": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_payment_sources",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_payment_sources"
        }
      },
      "customer_subscriptions": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/customer_subscriptions",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/customer_subscriptions"
        }
      },
      "orders": {
        "links": {
          "self": "https://your-brand.commercelayer.io/api/customers/1234/relationships/orders",
          "related": "https://your-brand.commercelayer.io/api/customers/1234/orders"
        }
      }
    },
    "meta": {
      "mode": "test"
    }
  }
}

Delete a customer

To delete a customer, send a DELETE request to the /api/customers/{{id}} endpoint, where {{id}} is the id of the resource that you want to delete.

Example request:
DELETE /api/customers/1234 HTTP/1.1
Accept: application/vnd.api+json
Example response:
HTTP/1.1 204 No Content