# Betacard API Proposal
# Base URL
Staging URL: `https://betacard-api.herokuapp.com/api/v1`
# Authenticating Requests
Please include the `Authorization` in your requests like so:
`Authorization: Bearer <TOKEN>`
`TOKEN` can be obtained from the response body when [signing in](#Sign-In).
# Pagination
For endpoints with paginated contents.
The pagination information will be included in the response header like so:
|HEADER|Description|
|--------|---------|
|`X-Page`|Current page|
|`X-Count`|Current specified count|
|`X-Total-Pages`|Total number of pages|
|`X-Total-Records`|Total number of records|
# Error
Every error message conform to this shape
```
{
"message": string;
"code": string;
"errors": [];
"timestamp": string;
"resource": string;
}
```
Example
```
{
"message": "Access Code is not found",
"code": "access_code_not_found",
"errors": [],
"timestamp": "2019-10-18T06:04:53Z",
"resource": "/api/v1/account/verify_sign_in"
}
```
## Account
### Sign up
*Creates an account for new user*
|Method|Path|
|------|-----------------|
|`POST`|`/account/sign_up`|
Staging URL: https://betacard-api.herokuapp.com/api/v1/account/sign_up
**Request Body**
```
{
"phoneNumber": "+60171122345",
"firstName": "John",
"lastName": "Wick",
"email": "johnwick@hightable.global"
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | New Account successfully created|
Body
```
{
"id": 5,
"phoneNumber": "+60168028426",
"createdAt": "2019-10-11T02:41:36Z",
"profile": {
"id": 5,
"email": "deojeff@gmail.com",
"isEmailVerified": false,
"firstName": "John",
"lastName": "Wick",
"createdAt": "2019-10-11T02:41:36Z",
"updatedAt": "2019-10-11T02:41:36Z"
}
}
```
| Status Code | Description|
|------|-----------------|
| **400 Bad Request** | Field validation failed|
Body
```
{
"message": "Validation Error",
"code": "validation_error",
"errors": [
{
"field": "phoneNumber",
"code": "is_defined"
},
{
"field": "firstName",
"code": "is_defined"
},
{
"field": "lastName",
"code": "is_defined"
},
{
"field": "email",
"code": "is_defined"
}
],
"timestamp": "2019-10-11T06:38:25Z",
"resource": "/api/v1/sign_up"
}
```
| Status Code | Error | Description |
|------|-----------------|----------|
| **409 Conflict** | `PhoneNumberInUseException` | Phone Number already in use |
Body
```
{
"message": "Phone Number Already In Use",
"code": "phone_number_in_use",
"errors": [],
"timestamp": "2019-10-11T06:47:29Z",
"resource": "/api/v1/sign_up"
}
```
| Status Code | Error | Description |
|------|-----------------|----------|
| **409 Conflict** | `EmailAlreadyInUseException` | Email already in use |
Body
```
{
"message": "Email Already In Use",
"code": "email_already_in_use",
"errors": [],
"timestamp": "2019-10-11T08:54:32Z",
"resource": "/api/v1/sign_up"
}
```
### Sign In
*Creates a sign in request*
*This sends out an sms to user's device for sign in purpose*
|Method|Path|
|------|------------------|
|`POST`| `/account/sign_in`|
**Request Body**
```
{
"phoneNumber": "+60171122345"
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **204 No Content** | Verification SMS sent|
| Status Code | Error | Description |
|------|-----------------|----------|
| **404 Not Found** | `PhoneNumberInvalidException` | Phone Number does not exist. |
Body
```
{
"message": "Phone Number does not exist.",
"code": "phone_number_not_valid",
"errors": [],
"timestamp": "2019-10-15T09:24:01Z",
"resource": "/api/v1/signin"
}
```
---
### Verify Sign In Request
`POST /account/verify_sign_in`
*Verifies sign in request using the code sent via SMS*
**Request Body**
```
{
"phoneNumber": "+60171122345",
"code": "1234"
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | Account successfully verified|
Body
```
{
"lastUsedAt": "2019-11-12T09:33:59.756Z",
"user": {
"createdAt": "2019-11-12T03:19:16Z",
"updatedAt": "2019-11-12T03:19:16Z",
"id": 3,
"phoneNumber": "+84912345678",
"profile": {
"createdAt": "2019-11-12T03:19:16Z",
"updatedAt": "2019-11-12T03:19:16Z",
"id": 3,
"email": "testing@gmail.com",
"firstName": "John",
"lastName": "Wick"
}
},
"userAccessCode": {
"id": 31,
"code": "7028",
"recipient": "+84912345678",
"expiresAt": "2019-11-12T09:59:37Z",
"usedAt": null,
"invalidatedAt": null,
"user": {
"createdAt": "2019-11-12T03:19:16Z",
"updatedAt": "2019-11-12T03:19:16Z",
"id": 3,
"phoneNumber": "+84912345678"
}
},
"token": "vPXegfWzQ0W4p33FFS0I17GrHhc1Zxxx",
"invalidatedAt": null,
"id": 2
}
```
| Status Code | Description|
|------|-----------------|
| **400 Bad Request** | Field validation failed|
Body
```
{
"message": "Validation Error",
"code": "validation_error",
"errors": [
{
"field": "phoneNumber",
"code": "is_defined"
},
{
"field": "code",
"code": "is_defined"
}
],
"timestamp": "2019-10-11T06:38:25Z",
"resource": "/api/v1/verify_sign_in"
}
```
| Status Code | Description|
|------|-----------------|
| **404 Not Found** | Access code not found |
Body
```
{
"message": "Access Code is not found",
"code": "access_code_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/verify_sign_in"
}
```
| Status Code | Description|
|------|-----------------|
| **406 Unprocessable Entity** | Access Code has expired|
Body
```
{
"message": "Access Code has expired",
"code": "access_code_has_expired",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/verify_sign_in"
}
```
| Status Code | Description|
|------|-----------------|
| **406 Unprocessable Entity** | Access Code has been used|
Body
```
{
"message": "Access Code has been used",
"code": "access_code_has_been_used",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/verify_sign_in"
}
```
### Sign Out
`POST /account/signout`
*Sign out user by verifying token*
**Request Body**
```
{
"token": "$2a$12$z3ZsVNDysDRpF5blkCcAJelJWwi9DyXX94xm5qIgriKVsqpRMdmY.",
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | Account successfully logged out|
Body
```
{
"id": 1,
"token": "$2a$12$QHwkV/aZwrozx0jD2ghGnOfwHtP8QAQJgAhAxumHCQtM.2IEpwry6",
"lastUsedAt": "2019-10-16T04:55:19Z",
"invalidatedAt": "2019-10-17T10:10:54Z",
"user": {
"id": 1,
"phoneNumber": "+60164104864",
"createdAt": "2019-10-15T04:13:31Z"
},
"userAccessCode": {
"id": 3,
"code": "4960",
"recipient": "+60164104864",
"expiresAt": "2019-10-16T05:13:48Z",
"usedAt": "2019-10-16T04:55:19Z",
"invalidatedAt": "2019-10-16T05:01:38Z"
}
}
```
| Status Code | Description|
|------|-----------------|
| **404 Not Found** | User session cannot be found |
Body
```
{
"message": "User session cannot be found",
"code": "user_session_not_found",
"errors": [],
"timestamp": "2019-10-17T10:13:02Z",
"resource": "/api/v1/account/signout"
}
```
| Status Code | Description|
|------|-----------------|
| **400 Bad Request** | Field validation failed|
Body
```
{
"message": "Validation Error",
"code": "validation_error",
"errors": [
{
"field": "token",
"code": "is_defined"
}
],
"timestamp": "2019-10-17T10:15:34Z",
"resource": "/api/v1/signout"
}
```
---
## Card Theme
### Create Card Theme
*Creates a new theme for user*
|Method|Path|
|------|-----------------|
|`POST`|`/card_themes`|
**Request Body**
```
{
"title": "my first theme",
"scheme": {
// Contains all the design and layout information
},
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | New theme successfully created|
Body
```
{
"id": 1,
"title": "my first theme",
"scheme": {
//Contains all the design and layout information
},
"updatedAt": "2019-10-17T11:51:46Z",
"createdAt": "2019-10-17T11:51:46Z"
}
```
| Status Code | Description|
|------|-----------------|
| **400 Bad Request** | Field validation failed|
Body
```
{
"message": "Validation Error",
"code": "validation_error",
"errors": [
{
"field": "title",
"code": "is_defined"
},
{
"field": "scheme",
"code": "is_defined"
},
],
"timestamp": "2019-10-11T06:38:25Z",
"resource": "/api/v1/card_themes"
}
```
### Retrieve a list of Card Theme
Retrieves a paginated list of Card Theme sorted by creation time
|Method|Path|
|------|-----------------|
|`GET`|`/card_themes`|
**Response**
```
[
{
"id": 1,
"title": "Dark Red Sky",
"scheme": {
// Contains all the design and layout information
},
"createdAt": "2019-10-18T00:30:00Z",
"updatedAt": "2019-10-18T00:30:00Z"
},
{
"id": 2,
"title": "Just Red",
"scheme": {
// Contains all the design and layout information
},
"createdAt": "2019-10-18T00:30:00Z",
"updatedAt": "2019-10-18T00:30:00Z"
}
]
```
### Get One Theme By ID
Retrieves a single theme by id
|Method|Path|
|------|-----------------|
|`GET`|`/card_themes/:id`|
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card theme retrieved successfully |
Body
```
{
"id": 1,
"title": "Blue background",
scheme:{
//layout and design data
},
createdAt: "2019-10-15T04:13:31Z",
updatedAt: "2019-10-15T04:13:31Z"
}
```
| Status Code | Description|
|------|-----------------|
| **404 Not Found** | Card Theme Not Found |
Body
```
{
"message": "Card Theme Not Found",
"code": "card_theme_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/card_themes/:id"
}
```
### Delete Card Theme
*Deletes a Card Theme based on given ID*
|Method|Path|
|------|-----------------|
|`DELETE`|`/card_themes/:id`|
**Response**
| Status Code | Description|
|------|-----------------|
| **204 No Content** | Card Theme Successfully Deleted|
| Status Code | Description|
|------|-----------------|
| **404 Not Found** | Card Theme Not Found |
Body
```
{
"message": "Card Theme Not Found",
"code": "card_theme_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/card_themes/:id
}
```
### Send Card Theme
POST /send_card_themes
share card theme to recipients
|Method|Path|
|------|-----------------|
|`POST`|`/send_cards_themes`|
**Request**
```
{
"cardTheme": {
id: 1
},
"recipients": [1, 2, 3]
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card Theme sent successfully |
Body
```
[
{
"id": 1,
"email": "deojeff@gmail.com",
"isEmailVerified": false,
"firstName": "John",
"lastName": "Wick",
"createdAt": "2019-10-11T02:41:36Z",
"updatedAt": "2019-10-11T02:41:36Z",
"isReceived": true
},
{
"id": 2,
"email": "joseph@gmail.com",
"isEmailVerified": false,
"firstName": "Joseph",
"lastName": "Wong",
"createdAt": "2019-10-11T02:41:36Z",
"updatedAt": "2019-10-11T02:41:36Z",
"isReceived": false
}
]
```
| Status Code | Description|
|------|-----------------|
| **404** | Card Theme Not Found |
Body
```
{
"message": "Card Theme Not Found",
"code": "card-theme_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/send_cards_themes"
}
```
---
## Card
### Create Card
*Creates a new card for user*
|Method|Path|
|------|-----------------|
|`POST`|`/cards`|
Insert bearer token for authorization.
**Request Body**
```
{
"title": "my first card",
"scheme": {},
"fieldData": {}
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | New card successfully created|
Body
```
{
"id": 1,
"type": "personal",
"scheme": {
//Contains all the design and layout information
},
"fieldData": {
//Contains all the labels and values
},
"details": {
"id": 1,
"title": "my first card",
"isFavorite": false,
},
"user": {
"id": 1,
"phoneNumber": "+60164104864",
"createdAt": "2019-10-15T04:13:31Z"
},
"updatedAt": "2019-10-17T11:51:46Z",
"createdAt": "2019-10-17T11:51:46Z"
}
```
| Status Code | Description|
|------|-----------------|
| **404 Not Found** | User Not Found |
Body
```
{
"message": "User Not Found",
"code": "user_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/cards
}
```
### Get List of Cards
*Get a list of user's card*
|Method|Path|
|------|-----------------|
|`GET`|`/cards/me`|
Insert bearer token for authorization.
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | Get all user's card succesfully |
Body
```
[
{
"id": 1,
"type": "personal",
"scheme": {
//Contains all the design and layout information
},
"fieldData": {
//Contains all the labels and values
},
"details": {
"id": 1,
"title": "my first card",
"isFavorite": false,
},
"user": {
"id": 1,
"phoneNumber": "+60164104864",
"createdAt": "2019-10-15T04:13:31Z"
},
"updatedAt": "2019-10-17T11:51:46Z",
"createdAt": "2019-10-17T11:51:46Z"
},
{
"id": 2,
"type": "personal",
"scheme": {
//Contains all the design and layout information
},
"fieldData": {
//Contains all the labels and values
},
"details": {
"id": 2,
"title": "my second card",
"isFavorite": false,
},
"user": {
"id": 1,
"phoneNumber": "+60164104864",
"createdAt": "2019-10-15T04:13:31Z"
},
"updatedAt": "2019-10-17T11:51:46Z",
"createdAt": "2019-10-17T11:51:46Z"
}
]
```
### Update Card
Updates a single card by ID
|Method|Path|
|------|-----------------|
|`PUT`|`/card/:id`|
Insert bearer token for authorization.
**Request**
```
{
"title": "my first card",
"scheme": {},
"fieldData": {},
"isFavorite": true
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card updated successfully |
Body
```
{
"id": 1,
"type": "personal",
"scheme": {
//Contains all the design and layout information
},
"fieldData": {
//Contains all the labels and values
},
"details": {
"id": 1,
"title": "my first card",
"isFavorite": false,
},
"user": {
"id": 1,
"phoneNumber": "+60164104864",
"createdAt": "2019-10-15T04:13:31Z"
},
"updatedAt": "2019-10-17T11:51:55Z",
"createdAt": "2019-10-17T11:51:46Z"
}
```
| Status Code | Description|
|------|-----------------|
| **404 Not Found** | Card id not found |
Body
```
{
"message": "Card id cannot found",
"code": "card_id_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/card/"
}
```
### Delete Card
Delete a single card by id
|Method|Path|
|------|-----------------|
|`DELETE`|`/card/:id`|
Insert bearer token for authorization.
**Response**
| Status Code | Description|
|------|-----------------|
| **204 No Content** | Card deleted successfully |
| Status Code | Description|
|------|-----------------|
| **404 Not Found** | Card not found |
Body
```
{
"message": "Card cannot be found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/card/"
}
```
---
## Vault
### Send Card
POST /send_cards
Send cards to recipients
|Method|Path|
|------|-----------------|
|`POST`|`/send_cards`|
**Request**
```
{
"card": {
id: 1
},
"recipients": [1, 2, 3]
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card sent successfully |
Body
```
[
{
"id": 1,
"email": "deojeff@gmail.com",
"isEmailVerified": false,
"firstName": "John",
"lastName": "Wick",
"createdAt": "2019-10-11T02:41:36Z",
"updatedAt": "2019-10-11T02:41:36Z",
"isReceived": true
},
{
"id": 2,
"email": "joseph@gmail.com",
"isEmailVerified": false,
"firstName": "Joseph",
"lastName": "Wong",
"createdAt": "2019-10-11T02:41:36Z",
"updatedAt": "2019-10-11T02:41:36Z",
"isReceived": false
}
]
```
| Status Code | Description |
| ----------- | -------------- |
| **404** | Card not found |
Body
```
{
"message": "Card not found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/send_cards/"
}
```
### Retrieve a list of Cards In Vault By User
Retrieves a paginated list of cards In vault by user sorted by creation time
|Method|Path|
|------|-----------------|
|`GET`|`/vaults`|
**Response**
```
[
{
"createdAt": "2019-11-01T06:29:37Z",
"updatedAt": "2019-11-01T06:29:37Z",
"id": 1,
"notes": null,
"collectedAt": null,
"archivedAt": null,
"card": {
"createdAt": "2019-10-30T03:22:00Z",
"updatedAt": "2019-10-30T03:22:00Z",
"id": 1,
"type": "personal",
"scheme": {},
"fieldData": {}
},
"user": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 3,
"phoneNumber": "+60164104865"
},
"sender": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
}
},
{
"createdAt": "2019-11-01T06:29:37Z",
"updatedAt": "2019-11-01T06:29:37Z",
"id": 2,
"notes": null,
"collectedAt": null,
"archivedAt": null,
"card": {
"createdAt": "2019-10-30T03:22:00Z",
"updatedAt": "2019-10-30T03:22:00Z",
"id": 1,
"type": "personal",
"scheme": {},
"fieldData": {}
},
"user": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 3,
"phoneNumber": "+60164104866"
},
"sender": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104865"
}
},
]
```
### Exchange Card with Sender
1. Save the current card sent by sender.
2. Send favorite card back to the sender.
| Method | Path |
| ------ | ------------------ |
| `POST` | `/vaults/:id/exchange` |
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card Successfully Exchanged |
**Response**
**Response**
| Status Code | Description |
| ----------- | -------------------: |
| **404** | Card Not Found |
Body
```
{
"message": "Card Not Found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/exchange"
}
```
**Response**
| Status Code | Description |
| ----------- | -------------------: |
| **409** | Card Already Exchanged|
Body
```
{
"message": "Card Already Exchanged",
"code": "card_already_exchanged",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/exchange"
}
```
### Mark single Card in Vault as Saved
Mark selected as saved in vault
| Method | Path |
| ------ | ------------------:|
| `POST` | `/vaults/:id/save` |
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card saved successfully |
**Response**
```
{
"createdAt": "2019-11-04T06:09:37Z",
"updatedAt": "2019-11-04T06:09:37Z",
"id": 31,
"notes": null,
"collectedAt": "2019-11-06T06:09:37Z",
"archivedAt": null,
"card": {
"createdAt": "2019-10-30T03:22:00Z",
"updatedAt": "2019-10-30T03:22:00Z",
"id": 1,
"type": "personal",
"scheme": {},
"fieldData": {}
},
"user": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
},
"sender": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
}
}
```
| Status Code | Description |
| ----------- | -------------------- |
| **404** | Card Not Found |
Body
```
{
"message": "Card Not Found", //card not found?
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/save"
}
```
### Mark single Card in Vault as Archived
Mark selected as archived in vault
| Method | Path |
| ------ | ---------------------:|
| `POST` | `/vaults/:id/archive` |
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card archived successfully |
**Response**
```
{
"createdAt": "2019-11-04T06:09:37Z",
"updatedAt": "2019-11-04T06:09:37Z",
"id": 31,
"notes": null,
"collectedAt": "2019-11-06T06:09:37Z",
"archivedAt": "2019-11-10T06:09:37Z",
"card": {
"createdAt": "2019-10-30T03:22:00Z",
"updatedAt": "2019-10-30T03:22:00Z",
"id": 1,
"type": "personal",
"scheme": {},
"fieldData": {}
},
"user": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
},
"sender": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
}
}
```
| Status Code | Description |
| ----------- | -------------------- |
| **404** | Card Not Found |
Body
```
{
"message": "Card Not Found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/save"
}
```
### Unarchived single Card in Vault
Unarchived single card in vault
| Method | Path |
| ------ | ---------------------:|
| `POST` | `/vaults/:id/unarchive` |
| Status Code | Description|
|------|-----------------|
| **200 OK** | Card saved successfully |
**Response**
```
{
"createdAt": "2019-11-04T06:09:37Z",
"updatedAt": "2019-11-04T06:09:37Z",
"id": 31,
"notes": null,
"collectedAt": "2019-11-06T06:09:37Z",
"archivedAt": null,
"card": {
"createdAt": "2019-10-30T03:22:00Z",
"updatedAt": "2019-10-30T03:22:00Z",
"id": 1,
"type": "personal",
"scheme": {},
"fieldData": {}
},
"user": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
},
"sender": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
}
}
```
| Status Code | Description |
| ----------- | -------------------- |
| **404** | Card Not Found |
Body
```
{
"message": "Card Not Found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/save"
}
```
### Delete single Archived Card in Vault
Delete single archived card in vault
| Method | Path |
| ------ | ---------------------:|
| `DELETE` | `/vaults/:id` |
**Response**
| Status Code | Description |
| ------------------ |:--------------------- |
| **204 No Content** | Card deleted |
| Status Code | Description |
| ----------- | -------------------- |
| **404** | Card Not Found |
Body
```
{
"message": "Card Not Found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/save"
}
```
| Status Code | Description |
| ----------- | -------------------- |
| **403 Forbidden** | Card Not Archived |
Body
```
{
"message": "Card Not Archived",
"code": "card_not_archived",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id"
}
```
### Create or Edit Note for single Card in Vault
Create or edit note for a single card in vault
| Method | Path |
| ------ | ---------------------:|
| `PUT` | `/vaults/:id/notes` |
**Request**
```
{
"note": "this is a test note"
}
```
**Response**
| Status Code | Description |
| ------------------ |:--------------------- |
| **200 OK** | Note updated |
Body
```
{
"message": "Card Not Found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/save"
}
```
| Status Code | Description |
| ----------- | -------------------- |
| **404** | Card Not Found |
Body
```
{
"createdAt": "2019-11-04T06:09:37Z",
"updatedAt": "2019-11-04T06:09:37Z",
"id": 31,
"notes": "this is a test note",
"collectedAt": "2019-11-06T06:09:37Z",
"archivedAt": null,
"card": {
"createdAt": "2019-10-30T03:22:00Z",
"updatedAt": "2019-10-30T03:22:00Z",
"id": 1,
"type": "personal",
"scheme": {},
"fieldData": {}
},
"user": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
},
"sender": {
"createdAt": "2019-10-30T03:19:18Z",
"updatedAt": "2019-10-30T03:19:18Z",
"id": 1,
"phoneNumber": "+60164104864"
}
}
```
### Delete notes for Card in Vault
Delete notes for card in vault
| Method | Path |
| ------ | ---------------------:|
| `DELETE` | `/vaults/:id/notes` |
**Response**
| Status Code | Description |
| ------------------ |:--------------------- |
| **204 No Content** | Notes deleted |
| Status Code | Description |
| ----------- | -------------------- |
| **404** | Card Not Found |
Body
```
{
"message": "Card Not Found",
"code": "card_not_found",
"errors": [],
"timestamp": "2019-10-16T07:38:51Z",
"resource": "/api/v1/vaults/:id/save"
}
```
### Archive Cards in vault
Archive mutiple cards in vault
| Method | Path |
| ------ | ---------------------- |
| `POST` | `/vaults/archive` |
**Request**
```
{
"vaults": [1, 2, 3, 4, 5]
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **204 No Content** | Card(s) archived successfully |
### Unarchive Cards in vault
Unarchive mutiple cards in vault
| Method | Path |
| ------ | ---------------------- |
| `POST` | `/vaults/unarchive` |
**Request**
```
{
"vaults": [1, 2, 3, 4, 5]
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **204 No Content** | Card(s) unarchived successfully |
### Delete Cards in vault
Delete mutiple cards in vault
| Method | Path |
| ------ | ---------------------- |
| `DELETE` | `/vaults/delete` |
**Request**
```
{
"vaults": [1, 2, 3, 4, 5]
}
```
**Response**
| Status Code | Description|
|------|-----------------|
| **204 No Content** | Card(s) deleted successfully |
## Get a list of Recipients that have the card in their vault (placeholder)
// vault/:card_id/recipients