# Credentials & Addresses

Manage customer badges (NFC cards, barcodes, and similar identifiers) and delivery addresses.

### Badge Management

Manage customer badges (NFC cards, barcodes, etc.). Each customer can have multiple badges, with one marked as the default.

### `POST /customers/{customerId}/badges` - Create Badge

Add a new badge to a customer.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| customerId | integer | Yes | The unique identifier of the customer. |

#### Request Body

```json
{
  "value": "88293778",
  "type": "classic",
  "isDefault": true,
  "isBlocked": false
}
```

##### Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| value | string | "88293778" | The value value. |
| type | string | "classic" | The type value. |
| isDefault | boolean | true | Whether default is enabled or applies. |
| isBlocked | boolean | false | Whether blocked is enabled or applies. |

#### Response

```json
{
  "status": 200,
  "code": "customer_badge_created",
  "message": "Badge created successfully.",
  "data": {
    "customerId": 5337578,
    "badges": [
      {
        "badgeId": 5778270,
        "value": "88293778",
        "type": "classic",
        "isDefault": true,
        "isBlocked": false
      }
    ]
  }
}
```

##### Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "customer\_badge\_created" | Machine-readable application code for the result. |
| message | string | "Badge created successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.customerId | integer | 5337578 | Identifier of the customer. |
| data.badges | array | \[…\] | List of badges entries. |
| data.badges\[\] | object | {…} | Object containing badges fields. |
| data.badges\[\].badgeId | integer | 5778270 | Identifier of the associated badge. |
| data.badges\[\].value | string | "88293778" | The value value. |
| data.badges\[\].type | string | "classic" | The type value. |
| data.badges\[\].isDefault | boolean | true | Whether default is enabled or applies. |
| data.badges\[\].isBlocked | boolean | false | Whether blocked is enabled or applies. |

### `PUT /customers/{customerId}/badges/{badgeId}` - Update Badge

Update an existing badge for a customer. All fields are optional for partial updates.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| customerId | integer | Yes | The unique identifier of the customer. |
| badgeId | integer | Yes | The unique identifier of the badge. |

#### Request Body

```json
{
  "value": "88293779",
  "isDefault": false,
  "isBlocked": false
}
```

##### Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| value | string | "88293779" | The value value. |
| isDefault | boolean | false | Whether default is enabled or applies. |
| isBlocked | boolean | false | Whether blocked is enabled or applies. |

#### Response

```json
{
  "status": 200,
  "code": "customer_badge_updated",
  "message": "Badge updated successfully.",
  "data": {
    "customerId": 5337578,
    "badges": [
      {
        "badgeId": 5778270,
        "value": "88293779",
        "type": "classic",
        "isDefault": false,
        "isBlocked": false
      }
    ]
  }
}
```

##### Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "customer\_badge\_updated" | Machine-readable application code for the result. |
| message | string | "Badge updated successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.customerId | integer | 5337578 | Identifier of the customer. |
| data.badges | array | \[…\] | List of badges entries. |
| data.badges\[\] | object | {…} | Object containing badges fields. |
| data.badges\[\].badgeId | integer | 5778270 | Identifier of the associated badge. |
| data.badges\[\].value | string | "88293779" | The value value. |
| data.badges\[\].type | string | "classic" | The type value. |
| data.badges\[\].isDefault | boolean | false | Whether default is enabled or applies. |
| data.badges\[\].isBlocked | boolean | false | Whether blocked is enabled or applies. |

### `DELETE /customers/{customerId}/badges/{badgeId}` - Delete Badge

Remove a badge from a customer.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| customerId | integer | Yes | The unique identifier of the customer. |
| badgeId | integer | Yes | The unique identifier of the badge to delete. |

#### Response

```json
{
  "status": 200,
  "code": "customer_badge_deleted",
  "message": "Badge deleted successfully.",
  "data": {
    "customerId": 5337578,
    "badges": []
  }
}
```

##### Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "customer\_badge\_deleted" | Machine-readable application code for the result. |
| message | string | "Badge deleted successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.customerId | integer | 5337578 | Identifier of the customer. |
| data.badges | array | \[\] | List of badges entries. |

### Customer Addresses

Role Requirement

These endpoints are restricted to users with the **brand** role.

Managing customer addresses is a prerequisite for creating **Delivery** orders on behalf of a customer. Before a delivery order can be placed, a valid address object must be associated with the customer profile.

#### Integration with Google Maps

The Innovorder platform relies on Google Maps for geocoding and routing. The `providerId` field in the address payload corresponds strictly to the **Google Place ID**.

When building your frontend address form, you should use the [Google Places Autocomplete API](https://developers.google.com/maps/documentation/places/web-service/autocomplete). When a user selects a suggestion, retrieve the `place_id` from the result and send it as the `providerId`.

### `GET /customers/{customerId}/addresses` - List Addresses

Retrieve all addresses stored for a customer.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| customerId | integer | Yes | The unique identifier of the customer. |

#### Response

```json
{
  "status": 200,
  "code": "address_succeed",
  "message": "Adresse trouvée.",
  "data": [
    {
      "addressId": 778201,
      "lat": 48.8849947,
      "lng": 2.3151972,
      "locality": "Paris",
      "route": "Rue de Saussure",
      "postalCode": "75017",
      "streetNumber": "43",
      "administrativeAreaLevel1": "Île-de-France",
      "administrativeAreaLevel2": "Paris",
      "country": "France",
      "googlePlaceId": "",
      "providerId": "ChIJU8mBWrBv5kcRT7nMUR_aO4U",
      "additionalInfo": "Appelez moi en bas",
      "digiCode": "1234",
      "phone": "0101010101",
      "apartmentNumber": "2",
      "iconIdentifier": null,
      "customerId": 5501207,
      "name": "Maison"
    }
  ]
}
```

##### Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "address\_succeed" | Machine-readable application code for the result. |
| message | string | "Adresse trouvée." | Human-readable result message. Do not use this value for program logic. |
| data | array | \[…\] | Endpoint-specific response payload. |
| data\[\] | object | {…} | Endpoint-specific response payload. |
| data\[\].addressId | integer | 778201 | Identifier of the associated address. |
| data\[\].lat | number | 48.8849947 | The lat value. |
| data\[\].lng | number | 2.3151972 | The lng value. |
| data\[\].locality | string | "Paris" | The locality value. |
| data\[\].route | string | "Rue de Saussure" | The route value. |
| data\[\].postalCode | string | "75017" | The postal code value. |
| data\[\].streetNumber | string | "43" | The street number value. |
| data\[\].administrativeAreaLevel1 | string | "Île-de-France" | The administrative area level1 value. |
| data\[\].administrativeAreaLevel2 | string | "Paris" | The administrative area level2 value. |
| data\[\].country | string | "France" | The country value. |
| data\[\].googlePlaceId | string | "" | Identifier of the associated google place. |
| data\[\].providerId | string | "ChIJU8mBWrBv5kcRT7nMUR\_aO4U" | Identifier of the associated provider. |
| data\[\].additionalInfo | string | "Appelez moi en bas" | The additional info value. |
| data\[\].digiCode | string | "1234" | The digi code value. |
| data\[\].phone | string | "0101010101" | Phone number. |
| data\[\].apartmentNumber | string | "2" | The apartment number value. |
| data\[\].iconIdentifier | null | null | The icon identifier value. |
| data\[\].customerId | integer | 5501207 | Identifier of the customer. |
| data\[\].name | string | "Maison" | The name value. |

### `POST /customers/{customerId}/address` - Create Address

Register a new address for a specific customer.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| customerId | integer | Yes | The unique identifier of the customer. |

#### Request Body

```json
{
  "providerId": "ChIJU8mBWrBv5kcRT7nMUR_aO4U",
  "displayedAddress": "43 Rue de Saussure, 75017 Paris, France",
  "lng": 2.3151972,
  "lat": 48.8849947,
  "phone": "0101010101",
  "digiCode": "1234",
  "apartmentNumber": "2",
  "additionalInfo": "Appelez moi en bas",
  "name": "Maison",
  "customerId": 5501207
}
```

##### Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| providerId | string | "ChIJU8mBWrBv5kcRT7nMUR\_aO4U" | Identifier of the associated provider. |
| displayedAddress | string | "43 Rue de Saussure, 75017 Paris, France" | The displayed address value. |
| lng | number | 2.3151972 | The lng value. |
| lat | number | 48.8849947 | The lat value. |
| phone | string | "0101010101" | Phone number. |
| digiCode | string | "1234" | The digi code value. |
| apartmentNumber | string | "2" | The apartment number value. |
| additionalInfo | string | "Appelez moi en bas" | The additional info value. |
| name | string | "Maison" | The name value. |
| customerId | integer | 5501207 | Identifier of the customer. |

#### Response

```json
{
  "status": 200,
  "code": "address_create_succeed",
  "message": "L'adresse a été créée.",
  "data": {
    "addressId": 778201,
    "phone": "0101010101",
    "locality": "Paris",
    "route": "Rue de Saussure",
    "postalCode": "75017",
    "streetNumber": "43",
    "administrativeAreaLevel1": "Île-de-France",
    "administrativeAreaLevel2": "Paris",
    "country": "France",
    "name": "Maison",
    "providerId": "ChIJU8mBWrBv5kcRT7nMUR_aO4U",
    "lat": 48.8849947,
    "lng": 2.3151972,
    "customerId": 5501207,
    "digiCode": "1234",
    "apartmentNumber": "2",
    "additionalInfo": "Appelez moi en bas",
    "googlePlaceId": ""
  }
}
```

##### Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "address\_create\_succeed" | Machine-readable application code for the result. |
| message | string | "L'adresse a été créée." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.addressId | integer | 778201 | Identifier of the associated address. |
| data.phone | string | "0101010101" | Phone number. |
| data.locality | string | "Paris" | The locality value. |
| data.route | string | "Rue de Saussure" | The route value. |
| data.postalCode | string | "75017" | The postal code value. |
| data.streetNumber | string | "43" | The street number value. |
| data.administrativeAreaLevel1 | string | "Île-de-France" | The administrative area level1 value. |
| data.administrativeAreaLevel2 | string | "Paris" | The administrative area level2 value. |
| data.country | string | "France" | The country value. |
| data.name | string | "Maison" | The name value. |
| data.providerId | string | "ChIJU8mBWrBv5kcRT7nMUR\_aO4U" | Identifier of the associated provider. |
| data.lat | number | 48.8849947 | The lat value. |
| data.lng | number | 2.3151972 | The lng value. |
| data.customerId | integer | 5501207 | Identifier of the customer. |
| data.digiCode | string | "1234" | The digi code value. |
| data.apartmentNumber | string | "2" | The apartment number value. |
| data.additionalInfo | string | "Appelez moi en bas" | The additional info value. |
| data.googlePlaceId | string | "" | Identifier of the associated google place. |

### `PUT /customers/{customerId}/address/{addressId}` - Update Address

Update an existing address.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| customerId | integer | Yes | The unique identifier of the customer. |
| addressId | integer | Yes | The unique identifier of the address. |

#### Request Body

```json
{
  "name": "Maison",
  "addressId": 778201,
  "providerId": "ChIJU8mBWrBv5kcRT7nMUR_aO4U",
  "googlePlaceId": null,
  "iconIdentifier": null,
  "customerId": 5501207,
  "phone": "0101010101",
  "lat": 48.8849947,
  "lng": 2.3151972,
  "displayedAddress": "43 Rue de Saussure, 75017 Paris, France",
  "digiCode": "1234",
  "apartmentNumber": "2",
  "additionalInfo": "Appelez moi en bas"
}
```

##### Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| name | string | "Maison" | The name value. |
| addressId | integer | 778201 | Identifier of the associated address. |
| providerId | string | "ChIJU8mBWrBv5kcRT7nMUR\_aO4U" | Identifier of the associated provider. |
| googlePlaceId | null | null | Identifier of the associated google place. |
| iconIdentifier | null | null | The icon identifier value. |
| customerId | integer | 5501207 | Identifier of the customer. |
| phone | string | "0101010101" | Phone number. |
| lat | number | 48.8849947 | The lat value. |
| lng | number | 2.3151972 | The lng value. |
| displayedAddress | string | "43 Rue de Saussure, 75017 Paris, France" | The displayed address value. |
| digiCode | string | "1234" | The digi code value. |
| apartmentNumber | string | "2" | The apartment number value. |
| additionalInfo | string | "Appelez moi en bas" | The additional info value. |

#### Response

```json
{
  "status": 200,
  "code": "address_update_succeed",
  "message": "L'adresse a été mise à jour.",
  "data": {
    "addressId": 778201,
    "name": "Maison",
    "phone": "0101010101",
    "locality": "Paris",
    "route": "Rue de Saussure",
    "postalCode": "75017",
    "streetNumber": "43",
    "administrativeAreaLevel1": "Île-de-France",
    "administrativeAreaLevel2": "Paris",
    "country": "France",
    "providerId": "ChIJU8mBWrBv5kcRT7nMUR_aO4U",
    "lat": 48.8849947,
    "lng": 2.3151972,
    "customerId": 5501207,
    "digiCode": "1234",
    "apartmentNumber": "2",
    "additionalInfo": "Appelez moi en bas",
    "googlePlaceId": null
  }
}
```

##### Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "address\_update\_succeed" | Machine-readable application code for the result. |
| message | string | "L'adresse a été mise à jour." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.addressId | integer | 778201 | Identifier of the associated address. |
| data.name | string | "Maison" | The name value. |
| data.phone | string | "0101010101" | Phone number. |
| data.locality | string | "Paris" | The locality value. |
| data.route | string | "Rue de Saussure" | The route value. |
| data.postalCode | string | "75017" | The postal code value. |
| data.streetNumber | string | "43" | The street number value. |
| data.administrativeAreaLevel1 | string | "Île-de-France" | The administrative area level1 value. |
| data.administrativeAreaLevel2 | string | "Paris" | The administrative area level2 value. |
| data.country | string | "France" | The country value. |
| data.providerId | string | "ChIJU8mBWrBv5kcRT7nMUR\_aO4U" | Identifier of the associated provider. |
| data.lat | number | 48.8849947 | The lat value. |
| data.lng | number | 2.3151972 | The lng value. |
| data.customerId | integer | 5501207 | Identifier of the customer. |
| data.digiCode | string | "1234" | The digi code value. |
| data.apartmentNumber | string | "2" | The apartment number value. |
| data.additionalInfo | string | "Appelez moi en bas" | The additional info value. |
| data.googlePlaceId | null | null | Identifier of the associated google place. |
