---
# System prepended metadata

title: MAS
tags: [intelllex]

---

# MAS

###### tags: `intelllex`

## Spotlights
### Get All Spotlights
```
GET /spotlights
{
    "spotlights": [
        {
            "index": number 
            "spotlight_id": string
            "spotlight_title": string
            "spotlight_content": string
            "question_id": string
            "question_slug": string
            "section_id": string
            "section_slug": string
        }
    ]
}
```

## Wizard
### Get All Wizard Actions
```
GET /wizards/actions
{
    "actions": [
        {
            "action_id": "1", 
            "action_name": "set up a SFO",
            "action_order": 1,
            "persona_id": "1",
            "persona_name": "Fund Manager",
            "persona_order": 1
        }
    ]

}
```

### Get Wizard Action Related Questions
```
GET /wizards/actions/:id/questions?page=1&limit=3
{
    "questions": [
        {
            "question_id": "",
            "question_slug": "",
            "question_title": "",
            "section_id": "",
            "section_slug": "",
            "question_summary": "",
            "index": 0,
        },
        ...
    ],
}
```

## Get in Touch
```
POST /get_in_touch/email
{
    "from_email":   "noreply@intelllex.com",
    "from_user":    "Intelllex",
    "to_email":     "contact@intelllex.com",
    "to_user":      "Intelllex",
    "subject":      "Website - Enquiry Form",
    "content":      "# Test title 2\n  - test answer 1\n  - test answer 2\n\n# Test answer\nis\nquite long",
    "content_type": "markdown"
}

curl -XPOST "https://masapi.intelllex.se/get_in_touch/email" -H "Content-type: application/json" -d '{"from_email": "contact@intelllex.com", "to_email": "chlin@intelllex.com", "subject": "test subject", "content": "# Test title 2\n  - test answer 1\n  - test answer 2\n\n# Test answer\nis\nquite long", "content_type": "markdown"}'
```


## Partner
### List Partners
```
GET /partners?partner_ids[]=1&partner_ids[]=2&partner_ids[]=3
[
    {
        "professional_type": "",
        "firm_size": "",
        "service_types": ["", ""],
        "jurisdictions": ["hk", "uk"],
        "description": ""
        
        "email": "zhengfeng@ferventchambers.com"
        "hashtags": ['personal data protection']
        "id": "4"
        "name": "Fervent Chambers LLC"
        "photo": "44afac3b-9318-4579-b0dd-af34f49f7f3f"
        "photo_url": "https://cms.intelllex.com/assets/44afac3b-9318-4579-b0dd-af34f49f7f3f"
        "related-questions": [
            {
                "hashtags": ['personal data protection']
                "id": "558"
                "section_id": "managing-personal-data-pdpa-275"
                "section_title": "Managing personal data (PDPA)"
                "title": "Are companies,
                "slug": "are-we-responsible-if-our-employees-do-not-comply-with-the-pdpa-558"
            }
        ]
]
```

### Get Partner By ID
```
GET /partners/[partner_id]
{
        "professional_type": "",
        "firm_size": "",
        "service_types": ["", ""],
        "jurisdictions": ["hk", "uk"],
        "description": ""
        XXXXX
    }

```


## Memo
### List Memo for the memo header

sample: `https://masapi.intelllex.se/memos`

> Control Image Size
> See also: https://docs.directus.io/reference/files/#custom-transformations

- memo_type: optional

```
GET /memos?memo_type=memo|business_primer|exploratory_reads
[
{
	"id": "unique-string",
	"name": "Crypto regulation",
	"short_description": "This is a description of what this buiness essential topic is, will decide after memo is done.",
	"icon_url": "https://cms.intelllex.com/abc",
    "memo_type": "memo" or "business_primer",
    "label": "Hot Topic",
    "primer_title": "primer title",
    "primer_description": "primer description in HTML",
    "primer_image": "https://cms.intelllex.com/assets/39586970-e668-4fd5-808a-8ca19a0adf0b"
    
},
{
	"id": "unique-string1",
	"name": "Because BVI",
	"short_description": "This is a description of what this buiness essential topic is, will decide after memo is done.",
	"icon_url": "https://cms.intelllex.com/abc",
    "memo_type": "memo" or "business_primer",
    "label": "Hot Topic",
    "primer_title": "primer title",
    "primer_description": "primer description in HTML",
    "primer_image": "https://cms.intelllex.com/assets/39586970-e668-4fd5-808a-8ca19a0adf0b"
}
]
```

### Memo Detail
sample: `https://masapi.intelllex.se/memos/crypto-regs-102`

```bash 
curl -XGET "http://localhost:3000/memos/aiwm-knowledge-centre"
```

```
GET /memos/[memo_id]
{
	"id": "unique-string",
	"name": "Crypto regulation",
    "hero_image": {
        "desktop": "header photo url",
        "mobile": "header photo url",
    },
	"description": "HTML of the description area e.g Cryptocurrencies in the British Virgin Islands (“BVI”) are regulated. Instead of a dedicated regime such as the Payment Services Act ",
	"preview_pdf": "https://cms.intelllex.com/first_page_pdf",
    "price": 200,
    "currency": "USD",
	"at_a_glance": "HTML of the AT A GLANCE section",
    "checkout_description": " html content",
    "checkout_preview_image": "url to preview image",
	"questions": [
		// list of questions for the Q&As tab
    ],
    "memo_type": "memo" or "business_primer",
    "primer_pdf": "pdf url, user can download directly"
    "partner_ids": [7,8]
    "private": true | false
}
```
### Track Memo Download Email (call before user download primer pdf)


```
POST /memos/:memo_slug/track_download
{
    "email": "felix@intelllex.com"
}
```

### Checkout redirect URL for the checkout button

- **staging domain: `https://payment.intelllex.se`**
- **prod domain: `https://payment.intelllex.com`**

```
Redirect to https://payment.intelllex.se/memo/checkout?cancel_url=https%3A%2F%2Fgoogle.com&memo_id=crypto-regs-102
```
- memo_id: memo_id get from /memos API
- cancel_url: redirect to this page if user cancel the payment

### Memo success page

BE will redirect to FE page with the pdf URL in query

e.g `https://finreg.sg/memo/[memo_id]/success?pdf_url=downloadable_pdf_url&expire_at=unix`

## Wiki

### Analyze A Wiki Docs Request

```
POST /wiki/docs/analyze
{
  "feature_of_your_product": string
}
```

Response:
```
{
  "feature_of_your_product": string
  "feature_of_your_product_hl": string
}
```

### Typing Prediction

```
POST /wiki/docs/predict
{
  "text": string
}
```

Response:
```
{
  "business_elements": [
      {
        hashtag_type: string
        id: number
        name: string
      }
  ]
}
```


### Request A Wiki Doc

```
POST /wiki/docs
{
  "feature_of_your_product": string
  "expand_to_singapore": boolean
}
```

Response:
```
{
  "id": string
  "auth_code": string
}
```

### Request Auto Hashtag

[Updates]: all the `match_type` options
```
match_type: "must_direct"
match_type: "must_map"
match_type: "optional_direct_sub"
match_type: "optional_map"
match_type: "optional" or ""
```

```
GET /wiki/docs/[uuid]/auto_hashtags
```

Response:
```
{
    "auto_hashtags":[
        {
            "id":123,
            "name":"DPT",
            "match_type":"must_direct",
            "order":"1",
            "selected":true
        },
        {
            "id":234,
            "name":"DPT service",
            "match_type":"must_map",
            "order":"2",
            "selected":false
        },
        {
            "id":234,
            "name":"DPT service",
            "match_type":"optional_map",
            "order":"3",
            "selected":true
        }
    ]
}
```

### Update Wiki

```
PUT /wiki/docs/[uuid]
{
    "auth_code": string
    "email": string
    "deselected_question_ids_by_section": { 
        [string]: string[]
    },
    "auto_hashtags":[
        {
            "id": number
            "name": string
            "match_type": match_type
            "order": string
            "selected": boolean
        }
    ]
}
```
Response
```
{
  "id":"uuid"
}
```

### Wiki Docs Description
```
GET /wiki/docs/[uuid]/description
```
Response
```
{
  "feature_of_your_product": string
  "areas_of_your_business": string
  "feature_of_your_product_hl": string
  "areas_of_your_business_hl": string
}
```

### Get total questions count by doc id

```
GET /wiki/docs/[uuid]/questions/count

88
```

### Wiki Woc Section

```
GET /docs/[doc_uuid]/sections/[section_id]
```

Response:
```
{
  "id": number
  "name": string
  "finreg_business_tip": string
  "questions": [
    {
      "id": string
      "title": string
      "last_revised_date": string
      "answers": [
        {
          answer: string
          partner?: {
              id: number
              name: string
              photo_url: string
              hide_detail: boolean
          }
        }
      ],
      "finreg_business_tip": string
    }
  ]
}
```

// 21-02-2022
### Get sections by wiki docs (includes questions)

#### list of section type:
- payments_regulations
- compliance
- capital_markets_regulations
- setting_up_in_singapore
- business_features

```
GET /wiki/docs/[uuid]/sections?section_type=[section_type]
[
    {
       "id": number
       "name": string
       "section_type": section_type
       "questions":[
           {
               "id": string
               "title": string
           }
       ]
    }
]
```


### Wiki section's questions API

```https

GET /wiki/sections/[section_id]/questions

[
  {
    "id": string
    "title": string
    "answer": string
  },
]

```


// 21-02-2022
### [NEW] Wiki section's questions API 

```https
NEED to know the doc_id to filter deselected_question_ids_by_section

GET /wiki/docs/[doc_id]/sections/[section_id]/questions

[
  {
    "id": "5529",
    "title": "this is a question?",
    "answer": "answer in HTML",
    "partner_name": ""
    "partner_photo": ""
  },
  {
    "id": "5530",
    "title": "this is a question 2?",
    "answer": "answer in HTML",
    "partner_name": ""
    "partner_photo": ""
  }
]

```

### Wiki Docs Question Count
```
GET /wiki/docs/[doc_id]/questions/count
{
  "count": 100
}
```


### Wiki Doc Subscribe to get update API

```https

POST /wiki/docs/[doc_id]/subscribe

{
    "email": "abc@gmail.com",
    "notify_us": true // will notify LKE
}

```

## Sections
### Subscribe to get update API

```https

POST /sections/[section_id]/subscribe

{
    "email": "abc@gmail.com"
}

```

## Questions

### All

```
GET /questions/all?scope=[EA|Finreg|Ingenia]&popular=[true|false]
{
  questions: [
      {
          section_id(slug): string
          question_id: string
          lastmod: string
          image_url: string
          popular_order: int ( 0 -> n, 0 is default value)
          question_slug: string
      }
  ]
}
```


### Question Suggested Sections
```
GET /questions/[qid]/suggested-sections?history_qid[]=1&history_qid[]=2&history_qid[]=3
{
    "sections":[
        {
            "slug": "nature-of-cryptocurrencies-280",
            "q_slug": "",
            "title": "Nature of Cryptocurrencies"
        },
        {
            "slug": "nature-of-cryptocurrencies-280",
            "q_slug": "",
            "title": "Nature of Cryptocurrencies"
        }
    ]
}

```


### Search

```
GET /questions?q=crypto

{
  "sections": [
    {
      "section_id": "nature-of-cryptocurrencies-280",
      "section_type": "likely_regulated",
      "section_kind": "kind2",
      "section_kind_name": "Business overview",
      "section_title": "Nature of Cryptocurrencies",
      "jurisdictions": {
          "universal": [qid, ], 
          "comparsion":[qid, ], 
          "hk":[qid, ], 
          "uk":[qid, ]
      },
      "fbt": {
         "universal": "<fbt>",
         "comparsion": "<fbt>"
         ...
      },
      "questions": [
        {
          "question_id": "459",
          "hl_question_title": "Do <mark>cryptocurrencies</mark> fall under the scope of the Payment Services Act?",
          "question_title": "Do cryptocurrencies fall under the scope of the Payment Services Act?",
          "question_slug": "do-cryptocurrencies-fall-under-the-scope-of-the-payment-services-act-459"
          "is_expanded": true,
          "partner_infos": [],
          "jurisdictions": ["universal"], 
          "fbt": "awesome fbt",
          "highlights": string[]
        },
        {
          "question_id": "405",
          "hl_question_title": "Is <mark>cryptocurrency</mark> a property?",
          "question_title": "Is cryptocurrency a property?",
          "question_slug": "this-is-question-slug-405"
          "is_expanded": true,
          "partner_infos": [
            {
              "id": 2,
              "name": "Rajah & Tann Singapore LLP"
            }
          ],
          "jurisdictions": ["hk", "uk"]
          "fbt": "",
        }
      ]
    }
  ]
}
```


### Definitions Search Query

```
GET /questions/definitions?query=userquery
```

Response:
```
{
    "title": "definition of dpt",
    "snippet": "dpt is the ...",
    "footnote": "according to mas...last revised",
    "question_id": "12",
    "question_slug": "this-is-questions-slug-12"
    "def_phrase": "digital payment token",
    "section_id": "nature-of-digital-payment-tokens-dpts-236",
    "jurisdictions": [{"name": "Singapore", "id": 555}, {"name": "Hong Kong", "id": 556}]
}
```

- input
	- query: "XXXX dpt XXX nft"
- process
	- match the "definition_entites" -> earendil from Chin-Ho
	    - mock up: return map[keyword]

	- look up a dictionary and get the question definition related info -> mapping from Felix
        - definition entities and acronyms to question id mapping for definition detail looking up
            ```json
            {
                "question_definition_entity": "qid_1",
                "digital payment token": "323",
                .
                .
                .
                "question_definition_acronym": "qid_2",
                "dpt": "323"
                "nft": "123",
                .
                .
                .
            }
            ```
        - a GET API such as `/questions/defintions/entities`
            - an API for syncing up definition entities and acronyms with earendil 
            ```json
            {
                "acronyms": ["dpt", .....]
                "entities": ["digital payment tokens", ...]
            }
            ```
        
	- wrap up into the response format and go the through the handler & routing part
		- question service
			- new file for the function
			- update service.go
		- route and handler
			- route.go
			- questions.go
- output
	- title
	- snippet
	- jurisdiction
	- qid
	- ....
- issues
	- multiple section 
	- multiple match

### Auto fill Search Query

```
GET /questions/auto_fill?query=userquery
```
Response:
```
{
  "query_suggestions": [
      {
          "type": "phrase" | "question",
          "section_id": <section_id>,
          "question_id": <question_id>,
          "name": "suggested_query1", 
          "label": "<put_html_here>",
          "score": 0.7
      }
  ]
}
```

### Last Updated On

https://masapi.intelllex.se/questions/last_updated_on
```
GET /questions/last_updated_on
{
    "last_updated_on": "2022-01-12T12:00:00Z"
}
```

### Get By ID

```
GET /questions/:id
{
  "id": "474",
  "title": "What is Singapore's outlook on stablecoins?",
  "answer": "a", // DEPRECATED
  "last_revised_date": "",
  "image_url": "https://cms.intelllex.com/assets/1675c154-608e-4919-9fb4-137e9aeadea7",
  "answers": [
    {
      "answer": "answer_html",
      "partner": {
        "id": 2,
        "name": "Rajah & Tann Singapore LLP",
        "photo_url": "",
        "hide_detail": true
      }       

    }
  ],
  "articles": [
    {
      "id": 22,
      "slug": "Navigating-the-Capital-Markets-Services-Licence-and-the-Financial-Adviser’s-Licence-22"
      "title": "Navigating the Capital Markets Services (CMS) Licence and the Financial Adviser’s Licence"
    }
  ]
  "finreg_business_tip": ""
}
```

### Get Summary of a Question

```
GET /questions/summary/:id
{
    "id":"introduction-to-family-offices-629",
    "summary":"Family offices are private wealth management advisory firms that serve ultra-high-net-worth individuals. They offer a total outsourced solution to managing the financial and investment"
}
```

### Rate

```
POST /questions/:id/rate
{
    "rate": 3
}
```

## Documents
### Search

e.g: `https://masapi.intelllex.se/documents?q=dpt&page=0&limit=10&order_by=relevance`

```
GET /documents?q=dpt&page=0&limit=10&order_by=relevance
{
  "data": {
    "id": "1713503",
    "title": "Consultation on the Payment Services Act 2019: Proposed Amendments to the Act",
    "last_revised_date": "23 December 2019",
    "url": "https://www.mas.gov.sg/publications/consultations/2019/consultation-on-the-proposed-amendments-to-the-payment-services-act",
    "content_type": "Consultations",
    "source_type": "MAS",
    "tags": [
      {
        "name": "payment services",
        "type": "sector"
      }
    ],
    "questions": [
      {
        "id": "5200",
        "title": "As a custodian wallet service, must I hold a payment service provider licence?",
        "section_title": "Regulations for custodian wallets",
        "section_id": "regulations-for-custodian-wallets-271"
      }
    ],
    "highlights": [
      "<mark>payment</mark> \n<mark>token</mark> (<mark>DPT</mark>) <mark>service</mark> (<mark>Activity</mark> <mark>F</mark>)."
    ]
  }
}
```

# SOURCE

## Login

```
POST https://apiv2.intelllex.se/api/v1/login

{
    company: string
    login: string
    password: string
    remember: "t"
}
```

## Resend welcome email
POST https://apiv2.intelllex.se/api/v1/resend_welcome_email
```
{
    "email": "user@gmail.com"
}
```

response: 200

## Get portal URL
GET https://apiv2.intelllex.se/api/v1/portal_api
**Require Authorization: Bearer {token}**
Response:
```
{"url":"https://billing.stripe.com/session/test_YWNjdF8xS2F5aGFCYTNiZmdZTG5nLF9MVk9BSkt1aHFxQ3FlVEk1ajQ4Z2VjQ2NZSndNU2Y00100n1ykhj9q"}
```

## Get checkout URL
POST https://apiv2.intelllex.se/api/v1/checkout_api
**Require Authorization: Bearer {token}**
```
{ 
  "price_id": "price_source_monthly"
}
```

Response:
```
{"url":"https://checkout.stripe.com/pay/cs_test_b1sik9I1k40k7mvfvwlEFLDezW1R7GAGFSuYvRHSO8IzlSnAZu2TXVDKze#fidkdWxOYHwnPyd1blpxYHZxWjA0TmR8bWRHZDZnY2JcSWtiRkAxdjFNSFxcalxLSmtIUnw2Nz11UmZdQ3dLTkdMdEdMVXFTbXZGMEpVdX10dk8zbGZxSGNUc1FoZkA1SFJjQEloVDFwZkBvNTVRVzNVa0hNSCcpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPydocGlxbFpscWBoJyknYGtkZ2lgVWlkZmBtamlhYHd2Jz9xd3BgKSd1d2BpamRhQ2prcSc%2FJ0twa2xxaid4JSUl"}
```


## SOURCE Register

```
POST https://apiv2.intelllex.se/api/v1/register/source

{
    "email": "felix.vo+source@intelllex.com",
    "first_name": "Felix",
    "last_name": "Source",
    "profession": "Dev",
    "country_code": "sg",
    "receive_email": true
}

Response:

{
    "status": "ok"
}
```

## Manage Subscription URL
**require login**
- staging: https://apiv2.intelllex.se/api/v1/portal
- prod:    https://apiv2.intelllex.com/api/v1/portal

```
GET /api/v1/portal

{
    "url":"https://billing.stripe.com/session/test_YWNjdF8xS2F5aGFCYTNiZmdZTG5nLF9McEZUc21qSGJwNWF0YkdTd2VpUjdIVVJBNjVjVkxz0100E6L0ekN9"
}
```

## Checkout to payment URL
**require login**
- staging: https://apiv2.intelllex.se/api/v1/checkout
- prod:    https://apiv2.intelllex.com/api/v1/checkout
- 
```
POST /api/v1/checkout
{
    "price_id": "price_id"
}
```
Response:
```
{
    "url": "stripe's checkout URL"
}
```

## Added subscription fields to /user API

staging: https://apiv2.intelllex.se/api/v1/user
prod: https://apiv2.intelllex.com/api/v1/user

- `current_period_end`: "2022-03-16T09:25:51.000Z"
- `has_active_sub`: `true` or `false` calculated by comparing current time with `current_period_end`
- `plan`: `trial` or `subscribed`, `trail` means in trial period

e.g


```
{
  "user": {
    "id": "e6f20280-337f-40ae-b80d-1e993048c2f6",
    "company_id": "f05bf00c-d6f3-4443-895c-abb0b4be28da",
    "first_name": "Felix",
    "last_name": "Source",
    "email": "felix.vo+source4@intelllex.com",
    "created_at": "2022-03-23T01:44:16.490Z",
    "external_auth": false,
    "has_active_sub": true,
    "current_period_end": "2022-09-23T01:49:28.000Z",
    "plan": "subscribed",
    "rights": {
      "upload": false,
      "share": false,
      "admin": false
    },
    "company_name": "source"
  }
}
```

## Articles

### All

```
GET /articles
[
    {
        "id": 1,
        "slug": "ar-slug-1",
        "name": "Nhan test",
        "category": "Common",
        "masthead": "https://cms.intelllex.com/assets/39d146c2-1da8-467a-ab6f-ad0b4ef15257",
        "content": "this is content"
        "date_published": "2023-03-17T19:00:00+07:00",
        "questions": [
            {
                "id": 6055,
                "question": "What other alternatives are available for migrating to Singapore besides permanent residency (PR)?",
                "slug": "alternatives-for-migrating-to-singapore-besides-pr-6055"
            }
        ]
    }
]
```

### Get By ID
```
GET /articles/:id
{
    "id": 1,
    "slug": "ar-slug-1",
    "name": "Nhan test",
    "category": "Common",
    "masthead": "https://cms.intelllex.com/assets/39d146c2-1da8-467a-ab6f-ad0b4ef15257",
    "content": "this is content"
    "date_published": "2023-03-17T19:00:00+07:00",
    "questions": [
        {
            "id": 6055,
            "question": "What other alternatives are available for migrating to Singapore besides permanent residency (PR)?",
            "slug": "alternatives-for-migrating-to-singapore-besides-pr-6055"
        }
    ]
}
```

## News

### All

```
GET /news
[
    {
        "id": 1,
        "slug": "new-slug-1",
        "name": "Nhan test news",
        "content": "This is content"
        "category": "common",
        "masthead": "https://cms.intelllex.com/assets/58f94839-79ce-4115-9b5c-489119326a46"
        "date_published": "2023-03-17T19:00:00+07:00" 
    }
]
```

### Get By ID
```
GET /news/:id
{
        "id": 1,
        "slug": "new-slug-1",
        "name": "Nhan test news",
        "content": "this is content"
        "category": "common",
        "masthead": "https://cms.intelllex.com/assets/58f94839-79ce-4115-9b5c-489119326a46"
        "date_published": "2023-03-17T19:00:00+07:00" 
}
```