# Pickup

Pickup schedules define the time windows during which a restaurant accepts orders for pickup (or delivery). Each schedule entry specifies a day of the week, a start and end time (in minutes from midnight), and optional ordering quotas per consumption mode.

#### Reference Values

day

Day of week: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT`, `SUN`

consumptionMode

`"1"` (Delivery), `"2"` (Take Away), `"3"` (Sit In), `"4"` (Drive)

start / end

Time in minutes from midnight (e.g., `690` = 11:30, `840` = 14:00).

### `GET /restaurants/{restaurantId}/pickup_schedules/` - Get Pickup Schedules

Retrieve all pickup schedules for a restaurant. Optionally filter by day of the week. This endpoint is publicly accessible (guests and customers can call it).

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| restaurantId | integer | Yes | The unique identifier of the restaurant. |
| day | string | No | Filter by day of week. Values: MON, TUE, WED, THU, FRI, SAT, SUN (query parameter). |

#### Response

```json
{
  "status": 200,
  "code": "schedule_succeed",
  "message": "You can access to these schedules.",
  "data": {
    "modelId": 200,
    "pickupSchedules": [
      {
        "pickupScheduleId": 1001,
        "restaurantId": 200,
        "day": "MON",
        "start": 690,
        "end": 840,
        "orderingQuotas": [
          {
            "consumptionMode": "2",
            "orderingQuota": 50
          }
        ]
      },
      {
        "pickupScheduleId": 1002,
        "restaurantId": 200,
        "day": "MON",
        "start": 1080,
        "end": 1320,
        "orderingQuotas": [
          {
            "consumptionMode": "1",
            "orderingQuota": 30
          },
          {
            "consumptionMode": "2",
            "orderingQuota": 40
          }
        ]
      }
    ]
  }
}
```

##### 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 | "schedule\_succeed" | Machine-readable application code for the result. |
| message | string | "You can access to these schedules." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.modelId | integer | 200 | Identifier of the associated model. |
| data.pickupSchedules | array | \[…\] | List of pickup schedules entries. |
| data.pickupSchedules\[\] | object | {…} | Object containing pickup schedules fields. |
| data.pickupSchedules\[\].pickupScheduleId | integer | 1001 | Identifier of the associated pickup schedule. |
| data.pickupSchedules\[\].restaurantId | integer | 200 | Identifier of the restaurant. |
| data.pickupSchedules\[\].day | string | "MON" | The day value. |
| data.pickupSchedules\[\].start | integer | 690 | The start value. |
| data.pickupSchedules\[\].end | integer | 840 | The end value. |
| data.pickupSchedules\[\].orderingQuotas | array | \[…\] | List of ordering quotas entries. |
| data.pickupSchedules\[\].orderingQuotas\[\] | object | {…} | Object containing ordering quotas fields. |
| data.pickupSchedules\[\].orderingQuotas\[\].consumptionMode | string | "2" | The consumption mode value. |
| data.pickupSchedules\[\].orderingQuotas\[\].orderingQuota | integer | 50 | The ordering quota value. |

### `POST /restaurants/{restaurantId}/pickup_schedules/` - Replace Pickup Schedules

Replace all pickup schedules for a restaurant. The existing schedules are deleted and the provided list is created. Schedules must not overlap for the same day and time range.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| restaurantId | integer | Yes | The unique identifier of the restaurant. |

#### Request Body

```json
{
  "pickupSchedules": [
    {
      "day": "MON",
      "start": 690,
      "end": 840,
      "orderingQuotas": [
        {
          "consumptionMode": "2",
          "orderingQuota": 50
        }
      ]
    },
    {
      "day": "MON",
      "start": 1080,
      "end": 1320,
      "orderingQuotas": [
        {
          "consumptionMode": "1",
          "orderingQuota": 30
        },
        {
          "consumptionMode": "2",
          "orderingQuota": 40
        }
      ]
    },
    {
      "day": "TUE",
      "start": 690,
      "end": 840,
      "orderingQuotas": []
    }
  ]
}
```

##### 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 |
| --- | --- | --- | --- |
| pickupSchedules | array | \[…\] | List of pickup schedules entries. |
| pickupSchedules\[\] | object | {…} | Object containing pickup schedules fields. |
| pickupSchedules\[\].day | string | "MON" | The day value. |
| pickupSchedules\[\].start | integer | 690 | The start value. |
| pickupSchedules\[\].end | integer | 840 | The end value. |
| pickupSchedules\[\].orderingQuotas | array | \[…\] | List of ordering quotas entries. |
| pickupSchedules\[\].orderingQuotas\[\] | object | {…} | Object containing ordering quotas fields. |
| pickupSchedules\[\].orderingQuotas\[\].consumptionMode | string | "2" | The consumption mode value. |
| pickupSchedules\[\].orderingQuotas\[\].orderingQuota | integer | 50 | The ordering quota value. |

#### Response

```json
{
  "status": 200,
  "code": "schedule_create_succeed",
  "message": "A schedule has been successfully added to the restaurant.",
  "data": {
    "modelId": 200,
    "pickupSchedules": [
      {
        "pickupScheduleId": 2001,
        "restaurantId": 200,
        "day": "MON",
        "start": 690,
        "end": 840,
        "orderingQuotas": [
          {
            "consumptionMode": "2",
            "orderingQuota": 50
          }
        ]
      },
      {
        "pickupScheduleId": 2002,
        "restaurantId": 200,
        "day": "MON",
        "start": 1080,
        "end": 1320,
        "orderingQuotas": [
          {
            "consumptionMode": "1",
            "orderingQuota": 30
          },
          {
            "consumptionMode": "2",
            "orderingQuota": 40
          }
        ]
      },
      {
        "pickupScheduleId": 2003,
        "restaurantId": 200,
        "day": "TUE",
        "start": 690,
        "end": 840,
        "orderingQuotas": []
      }
    ]
  }
}
```

##### 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 | "schedule\_create\_succeed" | Machine-readable application code for the result. |
| message | string | "A schedule has been successfully added to the restaurant." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.modelId | integer | 200 | Identifier of the associated model. |
| data.pickupSchedules | array | \[…\] | List of pickup schedules entries. |
| data.pickupSchedules\[\] | object | {…} | Object containing pickup schedules fields. |
| data.pickupSchedules\[\].pickupScheduleId | integer | 2001 | Identifier of the associated pickup schedule. |
| data.pickupSchedules\[\].restaurantId | integer | 200 | Identifier of the restaurant. |
| data.pickupSchedules\[\].day | string | "MON" | The day value. |
| data.pickupSchedules\[\].start | integer | 690 | The start value. |
| data.pickupSchedules\[\].end | integer | 840 | The end value. |
| data.pickupSchedules\[\].orderingQuotas | array | \[…\] | List of ordering quotas entries. |
| data.pickupSchedules\[\].orderingQuotas\[\] | object | {…} | Object containing ordering quotas fields. |
| data.pickupSchedules\[\].orderingQuotas\[\].consumptionMode | string | "2" | The consumption mode value. |
| data.pickupSchedules\[\].orderingQuotas\[\].orderingQuota | integer | 50 | The ordering quota value. |

### Pickup Points

Pickup points represent physical locations where customers can collect their orders. Each pickup point has a name and an address. They can be queried by brand (to get all pickup points across a brand's restaurants) or by individual restaurant.

### `GET /brands/{brandId}/pickup_points` - List Pickup Points by Brand

Retrieve all pickup points associated with a brand. This is a public endpoint and does not require authentication.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The unique identifier of the brand. |

#### Response

```json
{
  "status": 200,
  "code": "pickup_points_found",
  "message": "The pickup points have been found.",
  "data": [
    {
      "pickupPointId": 10,
      "brandId": 100,
      "restaurantId": 200,
      "addressId": 500,
      "name": "Main Entrance Counter",
      "address": "Innovorder Burgers Paris, 10 Rue de la Paix, 75002 Paris",
      "additionalInfo": "Collect orders at the main counter."
    },
    {
      "pickupPointId": 11,
      "brandId": 100,
      "restaurantId": 200,
      "addressId": 501,
      "name": "Side Door Pickup",
      "address": "Innovorder Burgers Paris, 12 Rue de la Paix, 75002 Paris",
      "additionalInfo": 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 | "pickup\_points\_found" | Machine-readable application code for the result. |
| message | string | "The pickup points have been found." | 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\[\].pickupPointId | integer | 10 | Identifier of the associated pickup point. |
| data\[\].brandId | integer | 100 | Identifier of the brand. |
| data\[\].restaurantId | integer | 200 | Identifier of the restaurant. |
| data\[\].addressId | integer | 500 | Identifier of the associated address. |
| data\[\].name | string | "Main Entrance Counter" | The name value. |
| data\[\].address | string | "Innovorder Burgers Paris, 10 Rue de la Paix, 75002 Paris" | The address value. |
| data\[\].additionalInfo | string | "Collect orders at the main counter." | The additional info value. |

### `GET /restaurants/{restaurantId}/pickup_points` - List Pickup Points by Restaurant

Retrieve all pickup points for a specific restaurant.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| restaurantId | integer | Yes | The unique identifier of the restaurant. |

#### Response

```json
{
  "status": 200,
  "code": "pickup_points_found",
  "message": "The pickup points have been found.",
  "data": [
    {
      "pickupPointId": 10,
      "brandId": 100,
      "restaurantId": 200,
      "addressId": 500,
      "name": "Main Entrance Counter",
      "address": "Innovorder Burgers Paris, 10 Rue de la Paix, 75002 Paris",
      "additionalInfo": "Collect orders at the main counter."
    }
  ]
}
```

##### 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 | "pickup\_points\_found" | Machine-readable application code for the result. |
| message | string | "The pickup points have been found." | 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\[\].pickupPointId | integer | 10 | Identifier of the associated pickup point. |
| data\[\].brandId | integer | 100 | Identifier of the brand. |
| data\[\].restaurantId | integer | 200 | Identifier of the restaurant. |
| data\[\].addressId | integer | 500 | Identifier of the associated address. |
| data\[\].name | string | "Main Entrance Counter" | The name value. |
| data\[\].address | string | "Innovorder Burgers Paris, 10 Rue de la Paix, 75002 Paris" | The address value. |
| data\[\].additionalInfo | string | "Collect orders at the main counter." | The additional info value. |

### `GET /pickup_points/{pickupPointId}` - Get Pickup Point

Retrieves one pickup point. This endpoint is available to administrators and customers; it returns a not-found error when the identifier does not exist.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| pickupPointId | integer | Yes | The unique identifier of the pickup point. |

#### Response

```json
{
  "status": 200,
  "code": "pickup_points_found",
  "message": "The pickup points have been found.",
  "data": {
    "pickupPointId": 10,
    "brandId": 100,
    "restaurantId": 200,
    "addressId": 500,
    "name": "Main Entrance Counter",
    "address": "Innovorder Burgers Paris, 10 Rue de la Paix, 75002 Paris",
    "additionalInfo": "Collect orders at the main counter."
  }
}
```

##### 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 | "pickup\_points\_found" | Machine-readable application code for the result. |
| message | string | "The pickup points have been found." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.pickupPointId | integer | 10 | Identifier of the associated pickup point. |
| data.brandId | integer | 100 | Identifier of the brand. |
| data.restaurantId | integer | 200 | Identifier of the restaurant. |
| data.addressId | integer | 500 | Identifier of the associated address. |
| data.name | string | "Main Entrance Counter" | The name value. |
| data.address | string | "Innovorder Burgers Paris, 10 Rue de la Paix, 75002 Paris" | The address value. |
| data.additionalInfo | string | "Collect orders at the main counter." | The additional info value. |

### `PUT /pickup_points/{pickupPointId}` - Update Pickup Point

Update the name of an existing pickup point.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| pickupPointId | integer | Yes | The unique identifier of the pickup point to update. |

#### Request Body

```json
{
  "name": "Main Entrance Counter (Updated)"
}
```

##### 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 | "Main Entrance Counter (Updated)" | The name value. |

#### Response

```json
{
  "status": 200,
  "code": "pickup_point_updated",
  "message": "The pickup point has been updated.",
  "data": {
    "pickupPointId": 10,
    "restaurantId": 200,
    "name": "Main Entrance Counter (Updated)"
  }
}
```

##### 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 | "pickup\_point\_updated" | Machine-readable application code for the result. |
| message | string | "The pickup point has been updated." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.pickupPointId | integer | 10 | Identifier of the associated pickup point. |
| data.restaurantId | integer | 200 | Identifier of the restaurant. |
| data.name | string | "Main Entrance Counter (Updated)" | The name value. |
