---
# System prepended metadata

title: Co-Work API

---

# Co-Work API

### User Sign Up API

* **End Point:** `https://singhua.site/api/1.0/user/signup`

* **Method:** `POST`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Content-Type | String | Only accept `application/json`. |

* **Request Body**

| Field | Type | Description |
| :---: | :---: | :---: |
| name | String | Required |
| email | String | Required |
| password | String | Required |

* **Request Body Example:**

```
{
  "name":"test",
  "email":"test@test.com",
  "password":"test"
}
```

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| access_token | String | Access token from server. |
| access_expired | Number | Access token expired time in seconds. |
| user | `User Object` | User information |

* **Success Response Example:**

```
{
  "data": {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6joiYXJ0aHVIjoxNjEzNTY3MzA0fQ.6EPCOfBGynidAfpVqlvbHGWHCJ5LZLtKvPaQ",
    "access_expired": 3600,
    "user": {
      "id": 11245642,
      "provider": "facebook",
      "name": "Pei",
      "email": "pei@appworks.tw",
      "picture": "https://schoolvoyage.ga/images/123498.png"
    }
  }
}
```

* **Email Already Exists: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error Response: 400**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----

### User Sign In API

* **End Point:** `https://singhua.site/api/1.0/user/signin`

* **Method:** `POST`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Content-Type | String | Only accept `application/json`. |

* **Request Body**

| Field | Type | Description |
| :---: | :---: | :---: |
| provider | String | Only accept `native` or `facebook` |
| email | String | Required if provider set to `native` |
| password | String | Required if provider set to `native` |
| access_token | String | Access token from facebook. Required if provider set to `facebook` |

* **Request Body Example:**

```
{
  "provider":"native",
  "email":"test@test.com",
  "password":"test"
}
```
or
```
{
  "provider":"facebook",
  "access_token": "EAACEdEose0cBAHc6hv9kK8bMNs4XTrT0kVC1RgDZCVBptXW12AI"
}
```

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| access_token | String | Access token from server. |
| access_expired | Number | Access token expired time in seconds. |
| user | `User Object` | User information |

* **Success Response Example:**

```
{
  "data": {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6joiYXJ0aHVIjoxNjEzNTY3MzA0fQ.6EPCOfBGynidAfpVqlvbHGWHCJ5LZLtKvPaQ",
    "access_expired": 3600,
    "user": {
      "id": 11245642,
      "provider": "facebook",
      "name": "Pei",
      "email": "pei@appworks.tw",
      "picture": "https://schoolvoyage.ga/images/123498.png"
    }
  }
}
```

* **Sign In Failed: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error Response: 400**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----

### User Profile API

>Authorization

* **End Point:** `https://singhua.site/api/1.0/user/profile`

* **Method:** `GET`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Authorization | String | Access token preceding `Bearer `. For example: `Bearer x48aDD534da8ADSD1XC4SD5S` |

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| data | `User Object` | User info. |

* **Success Response Example:**

```
{
  "data": {
    "provider": "facebook",
    "name": "Pei",
    "email": "pei@appworks.tw",
    "picture": "https://schoolvoyage.ga/images/123498.png"
  }
}
```

* **Client Error (No token) Response: 401**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (Wrong token) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----

### Order Check Out API

* **End Point:** `https://singhua.site/api/1.0/order/checkout`

* **Method:** `POST`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Content-Type | String | Only accept `application/json`. |
| Authorization | String | Access token preceding `Bearer `. For example: `Bearer x48aDD534da8ADSD1XC4SD5S`. |

* **Request Body**

  Check Out Details.

* **Request Body Example:**

**Definition**
```
{
  "prime": [Prime Key from TapPay],
  "order": {
    "shipping": "delivery",
    "payment": "credit_card",
    "subtotal": [Price excluded Freight Fee],
    "freight": [Freight Fee],
    "total": [Final Price],
    "recipient": {
      "name": [Name],
      "phone": [Phone],
      "email": [Email],
      "address": [Post Address],
      "time": "morning"|"afternoon"|"anytime"
    },
    "list": [
      {
        "id": [Product ID],
        "name": [Product Name],
        "price": [Product Unit Price],
        "color": {
          "name": [Product Variant Color Name],
          "code": [Product Variant Color HexCode]
        },
        "size": [Product Variant Size],
        "qty": [Quantity]
      },
      ...
    ]
  }
}
```

**Example**
```
{
  "prime": "ccc1491581661f700bcc1cafec673c741f0665ca77550fe828ef38ee1437a2b8",
  "order": {
    "shipping": "delivery",
    "payment": "credit_card",
    "subtotal": 1234,
    "freight": 14,
    "total": 1300,
    "recipient": {
      "name": "Luke",
      "phone": "0987654321",
      "email": "luke@gmail.com",
      "address": "市政府站",
      "time": "morning"
    },
    "list": [
      {
        "id": "201807202157",
        "name": "活力花紋長筒牛仔褲",
        "price": 1299,
        "color": {
        	"code": "DDF0FF",
            "name": "淺藍"
        },
        "size": "M",
        "qty": 1
      }
    ]
  }
}
```

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| data | `Order Object` | Order number. |

* **Success Response Example:**

```
{
  "data": {
    "number":"4465123465"
  }
}
```

* **Client Error (No token) Response: 401**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (Wrong token) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----

### User Orders API

>Authorization

* **End Point:** `https://singhua.site/api/1.0/user/orders`

* **Method:** `GET`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Authorization | String | Access token preceding `Bearer `. For example: `Bearer x48aDD534da8ADSD1XC4SD5S` |

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| data | `order record Object` | order record info. |

* **Success Response Example:**

```
{
    data:[
        {
          "order_id": "829391860017",
          "time": 1632980728162,
          "order_status": "已完成",
          "list": [
            {
                "id": 201807242228, 
                "qty": 1, 
                "name": "夏日海灘戶外遮陽帽", 
                "size": "M", 
                "color": {"code": "DDF0FF", "name": "淺藍"}, 
                "image": "https://singhua.site/assets/201807242228/main.jpg", 
                "price": 1499,
                "comment": "好看又實用的遮陽帽",
                "comment_time": "2021-10-01 18:23:10.639",
            }, 
            {
                "id": 201807202140, 
                "qty": 1, 
                "name": "透肌澎澎防曬襯衫",
                "size": "S",
                 "color": {"code": "DDFFBB", "name": "亮綠"},
                 "image": "https://singhua.site/assets/201807202140/main.jpg",
                 "price": 599,
                 "comment": "",
                 "comment_time": 0,
            }, 
            {
                 "id": 201807242232,
                 "qty": 1,
                 "name": "卡哇伊多功能隨身包", 
                 "size": "F", 
                 "color": {"code": "FFFFFF", "name": "白色"}, 
                 "image": "https://singhua.site/assets/201807242232/main.jpg", 
                 "price": 1299,
                 "comment": "",
                 "comment_time": 0,
            }
          ], 
            "total": 3457, 
            "freight": 60, 
            "payment": "credit_card", 
            "shipping": "delivery", 
            "subtotal": 3397
        },
        {
          "order_id": "829391860018",
          "order_status": "已退貨",
          "list": [
            {
                "id": 201807202140, 
                "qty": 1, 
                "name": "透肌澎澎防曬襯衫", 
                "size": "S",
                "color": {"code": "DDFFBB", "name": "亮綠"},
                "image": "https://singhua.site/assets/201807202140/main.jpg",
                "price": 599,
                "comment": "",
                "comment_time": 0,
            }
          ], 
            "total": 599, 
            "freight": 60, 
            "payment": "credit_card", 
            "shipping": "delivery", 
            "subtotal": 659
        }
    ]
}


```

* **Client Error (No token) Response: 401**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (Wrong token) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----

### User Cancel Order API

>Authorization

* **End Point:** `https://singhua.site/api/1.0/user/cancelOrder`

* **Method:** `POST`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Content-Type | String | Only accept `application/json`. |
| Authorization | String | Access token preceding `Bearer `. For example: `Bearer x48aDD534da8ADSD1XC4SD5S`. |

* **Request Body**

| Field | Type | Description |
| :---: | :---: | :---: |
| number | String | 訂單編號 (Required) |

* **Request Body Example:**

```
{
    "number": "830590479058"
}
```

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| message | String | Success message |

* **Success Response Example:**

```
{
    "message": "您已成功退貨"
}
```
* **Client Error (No number) Response: 400**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (Wrong token) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (No right) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Error Response Example:**

```
{
    "error": "您無權限修改此訂單"
}
```
* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----


### User Comment API

>Authorization

* **End Point:** `https://singhua.site/api/1.0/user/comment`

* **Method:** `POST`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Content-Type | String | Only accept `application/json`. |
| Authorization | String | Access token preceding `Bearer `. For example: `Bearer x48aDD534da8ADSD1XC4SD5S`. |

* **Request Body**

| Field | Type | Description |
| :---: | :---: | :---: |
| order_id | String | Order’s id of the comment.(Required) |
| product_id | Number | Product’s id of the comment.(Required)|
| color_code | String | Color code of the commented. (Required) |
| color_name | String | Color of the product commented. (Required) |
| size | String | Size of the product commented.(Required) |
| comment | String | 50字以內(Required) |

* **Request Body Example:**

```
{
    "order_id": "91300016108",
    "product_id": 201807201824,
    "color_code": "FFFFFF",
    "color_name": "白色",
    "size": "S",
    "comment": "平價又好看"
}
```

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| message | String | Success message |

* **Success Response Example:**

```
{
    "message": "您已完成評論"
}
```

* **Client Error (Wrong request) Response: 400**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (Wrong token) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (No right) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Error Response Example:**

```
{
    "error": "您無權限評論此訂單"
}
```
* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----

### Get Product Comments API

* **End Point:** `https://singhua.site/api/1.0/products/comments`

* **Method:** `GET`

* **Query Parameters**

| Field | Type | Description |
| :---: | :---: | :--- |
| id | Number | Product Id. Required |

* **Request Example:**

  `https://singhua.site/api/1.0/products/comments?id=201807202157`

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :--- |
| comments | Array | Array of `Comments Object`. |

* **Success Response Example:**

```
{
    "comments": [
         {
            "user_email": "k***@gmail.com",
            "user_picture": "https://singhua.site/assets/profile/default_user_image.png",
            "comment": "test comment",
            "comment_time": "2021-10-02 11:38:09.184"
        },
        {
            "user_email": "k***@gmail.com",
            "user_picture": "https://singhua.site/assets/profile/default_user_image.png",
            "comment": "test comment",
            "comment_time": "2021-10-02 11:15:29.793"
        },
        {
            "user_email": "e***@yahoo.com.tw",
            "user_picture": "https://graph.facebook.com/4485519638172617/picture?type=large",
            "comment": "GOOD",
            "comment_time": "2021-10-02 07:43:43.553"
        }
    ]
}
```

* **Client Error Response: 400**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----


### Post Product Follow API

>Authorization

* **End Point:** `https://singhua.site/api/1.0/products/follow`

* **Method:** `POST`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Content-Type | String | Only accept `application/json`. |
| Authorization | String | Access token preceding `Bearer `. For example: `Bearer x48aDD534da8ADSD1XC4SD5S`. |

* **Request Body**

| Field | Type | Description |
| :---: | :---: | :---: |
| product_id | Number | Id of the follow or unfollow product.(Required)|
| follow_status | Number | `只能是0或1`。0 代表取消追蹤 ; 1 代表加入追蹤. (Required) 

* **Request Body Example:**

```
{
    "product_id":201902191242,
    "follow_status":1
}
```

* **Success Response: 200**

| Field | Type | Description |
| :---: | :---: | :---: |
| product_id | Number | The id of the followed or unfollowed product.(Required)|
| follow_status | Number | `只能是0或1`。0 代表已取消追蹤 ; 1 代表已加入追蹤. (Required) 

* **Success Response Example:**

```
{
    "product_id": 201902191242,
    "follow_status": 1
}
```

* **Client Error (Wrong request) Response: 400**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (Wrong token) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |


* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

----

### Get Products Follow API
>Authorization

* **End Point:** `https://singhua.site/api/1.0/products/follow`

* **Method:** `GET`

* **Request Headers:**

| Field | Type | Description |
| :---: | :---: | :---: |
| Authorization | String | Access token preceding `Bearer `. For example: `Bearer x48aDD534da8ADSD1XC4SD5S`. |

* **Query Parameters**

| Field | Type | Description |
| :---: | :---: | :--- |
| id | Number | Product Id. (Optional) |


* **Request Example:**
  * 取得所有追蹤商品的API
      `https://singhua.site/api/1.0/products/follow`
      
  * 取得指定product_id追蹤狀態的API 
      `https://singhua.site/api/1.0/products/follow?id=201807202157`

* **Success Response: 200(取得所有追蹤商品的API)**

| Field | Type | Description |
| :---: | :---: | :--- |
| productsFollow | Array | Array of `products Follow Object`. |

* `products Follow Object`

| Field | Type | Description |
| :---: | :---: | :--- |
| product_id | Number | Product id. |
| title | String | Product title. |
| price | Number | Product price. |
| main_image | String | Main image. |

* **Success Response Example(取得所有追蹤商品的API):**

```
{
    "productsFollow": [
        {
            "product_id": 201807242232,
            "title": "卡哇伊多功能隨身包",
            "price": 1299,
            "main_image": "https://singhua.site/assets/201807242232/main.jpg"
        },
        {
            "product_id": 201902191242,
            "title": "透肌澎澎薄紗襯衫",
            "price": 999,
            "main_image": "https://singhua.site/assets/201902191242/main.jpg"
        }
    ]
}
```
---
* **Success Response: 200(取得指定product_id追蹤狀態的API )**

| Field | Type | Description |
| :---: | :---: | :---: |
| product_id | Number | The id of the followed or unfollowed product.(Required)|
| follow_status | Number | `只能是0或1`。0 代表已取消追蹤 ; 1 代表已加入追蹤. (Required) 


* **Success Response Example(取得指定product_id追蹤狀態的API ):**
```
{
    "product_id": 201807242228,
    "follow_status": 0
}
```
---

* **Client Error (Wrong request) Response: 400**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |

* **Client Error (Wrong token) Response: 403**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |


* **Server Error Response: 500**

| Field | Type | Description |
| :---: | :---: | :--- |
| error | String | Error message. |





