MyInfo Business (2.0.0)

Download OpenAPI specification:Download

MyInfo Business REST APIs for retrieving Entity and Person data.

Note - this specification is subject to changes based on evolution of the APIs.

Release Notes

  • 2.0.0 (Aug 2020)

    • New security headers (see Security -> Request Signing)
    • Updates to Person and Entity schema in entity-person; See Understanding the Data Structure for details
    • Updated new API urls to /v2/
    • Response changes from JWE to JWE wrapping JWS
    • Updated maxlength for some fields in entity that did not have this
      • block
      • building
      • street
      • unit
      • floor
    • Updated SSIC reference from SSIC 2015 to SSIC 2015 (version 2018)
    • New data items available:
      • licences
      • gov-contracts
      • builders
      • contractors
      • corppass-contacts
    • Updated type enum for person regadd and entity addresses
      • Unformatted to UNFORMATTED
    • Update of Certificate Authority list
      • Comodo to Comodo/Sectigo
      • New CA: Netrust
    • Updated TLS version to only 1.2
    • Updated recommended cipher suites
  • 1.0.0 (Feb 2019)

    • Updated data items:
      • noa(basic) to noa-basic
      • noahistory(basic) to noahistory-basic
  • 0.2.5 (15 July 2019)

    • Updated description for entity appointments and shareholders category:
      • If appointment holder or shareholder does not fall in any of the listed categories, the field will return ""
        • 1 - Individual
        • 2 - Local Company
        • 3 - Foreign Company
        • 4 - Unregistered Local Entity
        • 5 - Limited Liability Partnerships
        • 6 - Unregistered Foreign Entity
  • 0.2.4 (05 Dec 2018)

    • Base URL changes:

      • Production Environment: from myinfosg.api.gov.sg to api.myinfo.gov.sg
      • Test Environment: from myinfosgstg.api.gov.sg/test to test.api.myinfo.gov.sg
      • Sandbox Environment: from myinfosgstg.api.gov.sg/dev to sandbox.api.myinfo.gov.sg
    • Security header (.e. no longer needed in basestring)

      • Before v0.2.4, when crafting the basestring of the security header, an additional .e. is required in the domain name: e.g. myinfosgstg.api.gov.sg -> myinfosgstg.e.api.gov.sg.
        Note: This is no longer required
      • In v0.2.4, when crafting the basestring of the security header, the url in the basestring is the same as the one you call; e.g. api.myinfo.gov.sg
      • For more details, please refer to Security > Request Signing section for updated instructions.
    • Data items deprecated:

      • assessyear
      • assessableincome
    • New data items available:

      • noa(basic)
      • noa
      • noahistory(basic)
      • noahistory
    • Added link to MyInfo Business demo app under Support section for easy reference.

  • 0.2.3 (19 November 2018)

    • Updated Entity Type field to encompass more entity types.
    • Added Company Type and Business Constitution to give further breakdown to Company and Business entity types.
  • 0.2.2 (9 November 2018)

    • Updated endpoint urls to end with /.
  • 0.2.1 (29 August 2018)

    • Updated description for Nationality to include a note on known issue for Singapore PR (code value: SP).
  • 0.2.0 (3 August 2018)

    • Added Entity-Person-Sample with no authentication for sandbox testing.
    • Re-ordered response schema from Entity-Person call such that Entity object is before Person object.
  • 0.1.1 (24 July 2018)

    • Updated "sub" in access_token to have the format uen_uinfin
    • Updated description of uen and unifin path parameters of Entity-Person API indicating that value can be obtained from "sub" in decoded access_token.
  • 0.1.0 (20 June 2018)

    • Initial Release for Pilot

Releases and Compatibility

The RESTful API adopts Semantic Versioning 2.0.0 for releases, and every new release of the API increments the version numbers in the following format:

{MAJOR}.{MINOR}.{PATCH}
  1. {MAJOR} number introduces incompatible API changes with previous {MAJOR} number also resets {MINOR} to 0,
  2. {MINOR} number introduces new functionalities or information that are backward compatible also resets {PATCH} to 0, and
  3. {PATCH} number introduces bug fixes and remains backward compatible.

Pre-release or draft versions, when provided, are denoted by appended hypen - with a series of separate identifiers {LABEL}-{VERSION} following the {PATCH} number. Such releases are unstable and may not provide the intended compatibility with the specification in draft status.

Serving as notice, the RESTful API in version 2.X.X are incompatible with version 1.X.X releases.

Despite backward compatibility in {MINOR} or {PATCH} releases, API consumers are best to evaluate and determine their implementation does not disrupt use-case requirements.

Known Issues

  • There is a known issue with the Nationality field, where the return value sometimes will be SP which refers to "Singapore Permanent Resident". This value will be moved to a separate "Residential Status" field in later releases.

Overview

The following diagram illustrates how the integration with MyInfo Business APIs work: Overview

As shown above, your application will be interfacing with our API Gateway to integrate successfully with MyInfo Business.

Environments

The RESTful API provides both testing and live environments accessible over the Internet via HTTPS.

Consumers are to ensure firewall clearance on their edge network nodes for connecting to the APIs.

The convention used by API endpoints' URL are in the following format:

https://{ENV_DOMAIN_NAME}/{CONTEXT}/{VERSION}/{RESOURCE}
  • {ENV_DOMAIN_NAME} indicates MyInfo's API domain names - respectively:

    • sandbox.api.myinfo.gov.sg, or
    • test.api.myinfo.gov.sg, or
    • api.myinfo.gov.sg, following
  • /{CONTEXT}, indicates the context of the API call = /biz

  • /{VERSION} indicates the endpoint's release {MAJOR} version number path - for this release = /v2

  • /{RESOURCE} indicates the API resource path name.

Any additional query string parameters are appended as needed.

Available Environments

1. Sandbox Environment

The sandbox environment is used for your testing when developing your prototype. The Entity-Person-Sample and Entity-Person API will return test data previously shared by our officer via email. For test data matters, please contact us.

Note:

  • Domain Name: sandbox.api.myinfo.gov.sg
  • PKI digital signature is not required for all APIs.
  • Authorization Bearer access token is not required in Entity-Person-Sample API.
  • Authorization Bearer access token is required in Entity-Person API.

2. Test Environment

The test enviroment is used for testing your application with the full security measures required in production. The Entity-Person API will return test data previously shared by our officer via email. For test data matters, please contact us.

Note:

  • Domain Name: test.api.myinfo.gov.sg
  • PKI digital signature is required for Token and Entity-Person APIs.
    Refer to Security > Request Signing for the steps to sign your request.
  • Authorization Bearer access token is required in Entity-Person API.

3. Production Environment

The production enviroment is the actual live environment with full security measures and live data.

Note:

  • Domain Name: api.myinfo.gov.sg
  • PKI digital signature is required for Token and Entity-Person APIs.
    Refer to Security > Request Signing for the steps to sign your request.
  • Authorization Bearer access token is required in Entity-Person API.

Scheduled Downtimes

The following are the scheduled downtimes for the various environments:

Production Environment

  • CPFB data - Everyday 5:00am to 5:30am
  • IRAS data - Every Wed, 2:00am to 6:00am, Every Sun, 2:00am to 8:30am
  • Once a month, Sunday 12:00 am to 8:00 am (date to be advised)

Sandbox Environment

  • none

Test Environments

  • none

Security

HTTPS Interface

MyInfo Business's API gateway supports accessing of APIs via the following interfaces:

  • HTTP version 1.1 connection over TLS (Transport Layer Security) version 1.2 standards, and cipher suites:

    • using AES (Advanced Encryption Standard) and SHA (Secure Hash Algorithm),
    • on either GCM (Galois/Counter Mode) or CBC (Cipher Block Chaining) mode.
  • Below is the list of recommended cipher suites that you may use:

    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

IMPORTANT: ensure your server supports TLS 1.2 and supports a cipher suite in the list above.

Accessing the RESTful API using prior versions of TLS or unsupported cipher suites will result in connectivity errors. MyInfo Business' API gateway does not support 2-way TLS client nor mutual authentication.

API HTTP interface features:

  1. JSON (JavaScript Object Notation) is the supported data media format and indicated in Content-Type header application/json, also
  2. Content-Length header is omitted by having Transfer-Encoding header chunked emitted for streaming data, and
  3. GZip (GNU Zip) response compression is supported by opt-in Accept-Encoding: gzip and indicated in Content-Encoding header gzip.

OAuth2.0

MyInfo Business APIs use OAuth2.0 authorisation code flow to perform authentication & authorisation.

The sequence diagram below illustrates the steps involved in integrating your application with our APIs:

OAuth

The flow consists of 3 APIs:

  1. Authorise

    • This will trigger the CorpPass login and consent page. Once successful, your application will receive the authorisation code via your callback url.
  2. Token

    • Call this server-to-server API with a valid authorisation code to get the access token.
  3. Protected Resource (Entity-Person)

    • Call this server-to-server API with a valid access token to get the entity and person data.

Application Authentication

Access to all server-to-server APIs will be authenticated by MyInfo Business' API gateway. Prior to consumption of API, respective consumers are required to have:

  • approval of access, onboarding process for the required API resources will be provisioned, and
  • authentication credentials are then supplied and exchanged.

Authentication methods provided by MyInfo Business' API gateway on internet:

  • OAuth 2.0 using SHA256withRSA digital signature (see "Request Signing" section below)
  • Digital signature should be produced using a RSA private key with corresponding public certificate issued by one of the following compatible CAs:
    • Comodo/Sectigo
    • digiCert
    • Entrust
    • GeoTrust
    • GlobalSign
    • Netrust
    • Thawte
    • VeriSign

Request Signing

NOTE: Test and Production Environments only

All server-to-server API requests are to be digitally signed, by including the following parameters and values in the Authorization header:

PKI_SIGN app_id="{app_id}",
nonce="{random_nonce}",
signature_method="RS256",
signature="{base64_url_percent_encoded_signature}",
timestamp="{unix_epoch_in_milliseconds}"

Note: Above sample is separated by lines for ease-of-reading, and new-line denotations are to be omitted in the actual request.

  • {app_id} is the APP ID credential supplied upon onboarding,

  • {random_nonce} is an unique randomly generated text used for replay prevention,

  • {signature_algorithm} is the signature algorithm of the authenticating gateway.

    • Value of signature_algorithm = RS256
  • {base64_url_percent_encoded_signature} is the binary of the generated signature encoded in Base64 URL-safe format,

  • {unix_epoch_in_milliseconds} is the UNIX epoch time in milliseconds

Sample header with authorization parameters

Below is an example of an Authorization header for the sample application. Make sure you list the parameters in the sequence shown below.

  Authorization: PKI_SIGN
  app_id="STG2-MYINFOBIZ-SELF-TEST",
  nonce="150590021034800",
  signature_method="RS256",
  signature="EEm+HEcNQajb5FkVd82zjojk+daYZXxSGPCOR2GHZeoyjZY1PK+aFMzHfWu7eJZYMa5WaEwWxdOdq5hjNbl8kHD7bMaOks7FgEPdjE++TNomfv7SMktDnIvZmPYAxhjb/C9POU2KT6tSlZT/Si/qMgD1cryaPwSeMoM59UZa1GzYmqlkveba7rma58uGwb3wZFH0n57UnouR6LYXDOOLkqi8uMZBuvRUvSJRXETAj2N0hT+4QJiN96Ct6IEQh/woZh0o74K5Ol9PpDSM08qC7Lj6N/k694J+hbBQVVviGn7/6mDkfbwdMDuoKs4t7NpqmAnwT+xaQSIZcexfrAVQYA==",
  timestamp="1505900210349"

Sample Code in NodeJS

  // generates the security headers for calling API gateway
  function generateAuthorizationHeader(url, params, method, strContentType, authType, appId, keyCertContent, passphrase) {

    if (authType == "L2") {
      return generateRS256Header(url, params, method, strContentType, appId, keyCertContent, passphrase);
    } else {
      return "";
    }
  };

  // Signing Your Requests
  function generateRS256Header(url, params, method, strContentType, appId, keyCertContent, keyCertPassphrase) {
    var nonceValue = nonce();
    var timestamp = (new Date).getTime();

    // A) Construct the Authorisation Token Parameters
    var defaultAuthHeaders = {
      "app_id": appId, // App ID assigned to your application
      "nonce": nonceValue, // secure random number
      "signature_method": "RS256",
      "timestamp": timestamp // Unix epoch time
    };

    // B) Forming the Base String
    // Base String is a representation of the entire request (ensures message integrity)

    // i) Normalize request parameters
    var baseParams = sortJSON(_.merge(defaultAuthHeaders, params));

    var baseParamsStr = qs.stringify(baseParams);
    baseParamsStr = qs.unescape(baseParamsStr); // url safe

    // ii) concatenate request elements (HTTP method + url + base string parameters)
    var baseString = method.toUpperCase() + "&" + url + "&" + baseParamsStr;

    // C) Signing Base String to get Digital Signature
    var signWith = {
      key: fs.readFileSync(keyCertContent, 'utf8')
    }; // Provides private key

    // Load pem file containing the x509 cert & private key & sign the base string with it to produce the Digital Signature
    var signature = crypto.createSign('RSA-SHA256')
      .update(baseString)
      .sign(signWith, 'base64');

    // D) Assembling the Authorization Header
    var strAuthHeader = "PKI_SIGN app_id=\"" + appId + // Defaults to 1st part of incoming request hostname
      "\",timestamp=\"" + timestamp +
      "\",nonce=\"" + nonceValue +
      "\",signature_method=\"RS256\"" +
      ",signature=\"" + signature +
      "\"";

    return strAuthHeader;
  };

Token Validation

NOTE: Entity-Person APIs only

Access Tokens are in JWT format. This JWT complies to the standard 'JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants' (https://tools.ietf.org/html/rfc7523). You will need to verify the token with our public cert (provided during application onboarding).

Sample Code in NodeJS

  // Sample Code for Verifying & Decoding JWS or JWT
  function verifyJWS(jws, publicCert) {
    // verify token
    // ignore notbefore check because it gives errors sometimes if the call is too fast.
    try {
      var decoded = jwt.verify(jws, fs.readFileSync(publicCert, 'utf8'), {
        algorithms: ['RS256'],
        ignoreNotBefore: true
      });
      return decoded;
    }
    catch(error) {
      throw("Error with verifying and decoding JWS");
    }
  }

Payload Signing and Encryption (Entity-Person)

NOTE: Entity-Person APIs in Test and Production environments only

The response payload for the Entity-Person API (for test and production environments) is first signed, then encrypted:

Encryption protects the data at rest while a signed payload means, if necessary, you will be able to pass this signed payload to a 3rd party where they can verify the payload's integrity with our public certificate.

In order to read the payload, you have to perform the following steps in order:

  1. Decrypt the payload with your application's private key.
  2. Validate the decrypted payload signature with our public key.
  3. Decode the verified JWS payload using Base64 decode.

After doing the above steps, your application will be able to extract the payload in JSON format.

STEP 1: Decryption

  • Encryption is done using your application's public key that you provided during onboarding. Decryption of the payload should be using the private key of that key-pair.
  • Current encryption algorithms used:
    • RSA-OAEP (for content key wrapping)
    • AES256GCM (for content encrytion)

Sample Code in NodeJS

  // Sample Code for decrypting JWE
  // Decrypt JWE using private key
  function decryptJWE(header, encryptedKey, iv, cipherText, tag, privateKey) {

    return new Promise((resolve, reject) => {

      var keystore = jose.JWK.createKeyStore();

      var data = {
        "type": "compact",
        "ciphertext": cipherText,
        "protected": header,
        "encrypted_key": encryptedKey,
        "tag": tag,
        "iv": iv,
        "header": JSON.parse(jose.util.base64url.decode(header).toString())
      };
      keystore.add(fs.readFileSync(privateKey, 'utf8'), "pem")
        .then(function(jweKey) {
          // {result} is a jose.JWK.Key
          jose.JWE.createDecrypt(jweKey)
            .decrypt(data)
            .then(function(result) {
              resolve(JSON.parse(result.payload.toString()));
            })
            .catch(function(error) {
              reject(error);
            });
        });

    })
    .catch (error => {
      throw "Error with decrypting JWE";
    })
  }

STEP 2: Verification of Signature

The decrypted payload is signed according to JWS (JSON Web Signature) format, similar to the access token.

  • signature algorithm used is RS256.

Sample Code in NodeJS

  // Sample Code for Verifying & Decoding JWS or JWT
  function verifyJWS(jws, publicCert) {
    // verify payload
    // ignore notbefore check because it gives errors sometimes if the call is too fast.
    try {
      var decoded = jwt.verify(jws, fs.readFileSync(publicCert, 'utf8'), {
        algorithms: ['RS256'],
        ignoreNotBefore: true
      });
      return decoded;
    }
    catch(error) {
      throw("Error with verifying and decoding JWS");
    }
  }

Understanding the Data Structure

MyInfoBiz Entity and Person data follows a specific structure that you need to understand to traverse the data effectively. This section will explain the structure in detail.

The Entity-Person response includes both an Entity and a Person object (see diagram): Entity-Person Response Structure

The diagram below illustrates how the Entity data is represented logically:
EDH Entity Data Structure

The diagram below illustrates how the Person data is represented logically:
MyInfo Person Data Structure

Data Items (Top-Level)

Data Items are attributes that can be requested in the API. Each top-level data item can either be a data item object or an array of data item objects. Each data item object will consist of the following properties:

  • source (see below)
  • unavailable (in certain situations - see below)
  • additional data properties containing data values or arrays

Data Source

The source property indicates the source of data. Possible values are:

  • '1' - Government-verified
  • '2' - User Provided
  • '3' - Field is Not Applicable to this Entity
  • '4' - Verified by SingPass

Data Properties

In each data item, there can be multiple data properties or arrays of data properties.

Each data property will contain either:

  • a value property, or
  • a pair of code and desc properties, or
  • an array of data properties, or
  • other data properties

Note:

  • value property can be strings, numbers, or dates.
  • code and desc pairs will contain the code and its matching description.
  • value is mutually exclusive from (code + desc); i.e. if there is a value, there will not be any code or desc.
  • Where there is code, there will always be a desc - no value will be present.

Exceptions: For these cases, the values will be directly in the property and not in a value, code or desc subproperty:

  • for data item metadata properties; e.g. source and unavailable
  • for discriminator properties; e.g. type in address formats

Data Not Applicable

Sometimes, a requested data item or data property is not applicable to the entity. Examples include:

  • a Business Entity (entitytype = BN) will never have a shareholders data item.
  • a Business Entity (entitytype = BN) will never have a declarations data item.
  • a Local Company (entitytype = LC) will never have commencment-date data property.

For a full list, refer to the descriptions in each of the data properties of the entity data model.

Data Item Not Applicable

When a requested data item is not applicable to the entity:

  • for data item objects, the source property will be 3
  • for data item arrays, an empty array will be returned

In such cases, please ignore the data item completely. Check out the different Entity schemas for each type by selecting the different entitype discriminator in the specifications. E.g. if you choose "BN" (Business) entity type, you will see that shareholders schema is an empty array.

Data Property Not Applicable

  • The Entity object has a entitytype discriminator which helps to specify the data properties applicable to each entity type.
  • When a data property is not applicable to the entity, it will not appear in the schema of that particular entity type.

Data Unavailable

In other situations, a requested data item might not have any data for that data item from the data source; i.e. data is unavailable. Examples include:

  • when an entity does not have any grants submitted/approved

Data Item Unavailable

  • for data item objects, the data item will have the property unavailable with value true.
    In such cases, no additional properties (other than source) will be provided for the data item.
  • for data item arrays, an empty array will be returned.

Please display as "Not Available" in your form.

Data Property Unavailable

  • for data property objects, the value or code/desc will be empty value ("") or NaN.
  • for arrays of data properties, an empty array will be returned.

Error Handling

The RESTful API(s) uses HTTP specification standard status codes to indicate the success or failure of each request. Except gateway errors, the response content will be in the following JSON format:

{
    "code": "integer (int32)",
    "message": "string"
}

Refer to the individual API definitions for the error codes you might encounter for each API.

Support

Please refer to the links below for the following supporting materials where relevant:

For technical queries, contact support@myinfo.gov.sg.

For business queries, contact partner@myinfo.gov.sg.

Authentication

oauth2

The following are the available OAuth2 scopes for MyInfo Business APIs

Security Scheme Type OAuth2
authorizationCode OAuth Flow
Authorization URL: /authorise
Token URL: /token
Scopes:
  • basic-profile -

    (Entity) Basic Entity Profile

  • previous-names -

    (Entity) Previous Names

  • previous-uens -

    (Entity) Previous UENs

  • addresses -

    (Entity) Addresses

  • financials -

    (Entity) Financials

  • capitals -

    (Entity) Capitals

  • appointments -

    (Entity) Appointments

  • shareholders -

    (Entity) Shareholders

  • grants -

    (Entity) Grants

  • builders-contractors -

    (Entity) Builders and contractors

  • gov-contracts -

    (Entity) Government contracts

  • licences -

    (Entity) Licences

  • uinfin -

    (Person) NRIC/FIN

  • name -

    (Person) Full Name

  • hanyupinyinname -

    (Person) Han Yu Pin Yin name

  • aliasname -

    (Person) Alias name

  • hanyupinyinaliasname -

    (Person) Han Yu Pin Yin Alias name

  • marriedname -

    (Person) Married name

  • sex -

    (Person) Sex

  • race -

    (Person) Race

  • secondaryrace -

    (Person) Secondary Race

  • dialect -

    (Person) Dialect

  • nationality -

    (Person) Nationality

  • dob -

    (Person) Date of Birth

  • birthcountry -

    (Person) Country of Birth

  • residentialstatus -

    (Person) Residential Status

  • passportnumber -

    (Person) Passport Number

  • passportexpirydate -

    (Person) Passport Expiry Date

  • regadd -

    (Person) Registered Address

  • housingtype -

    (Person) Housing Type

  • hdbtype -

    (Person) HDB Type

  • ownerprivate -

    (Person) Ownership of Private Property Status

  • email -

    (Person) Email Address

  • mobileno -

    (Person) Mobile Number

  • marital -

    (Person) Marital Status

  • marriagecertno -

    (Person) Certificate number of the latest marriage

  • countryofmarriage -

    (Person) Country of the latest marriage

  • marriagedate -

    (Person) Latest Marriage Date

  • divorcedate -

    (Person) Last Divorce Date

  • childrenbirthrecords -

    (Person) Details of Children Birth Records

  • occupation -

    (Person) Occupation

  • employment -

    (Person) Employer's Name

  • workpassstatus -

    (Person) Work pass status of a FIN holder

  • workpassexpirydate -

    (Person) Work pass expiry of a foreigner

  • assessableincome -

    (Person) Latest Assessable Income

  • assessyear -

    (Person) Year of Assessment (for Assessable Income)

  • noa-basic -

    (Person) Notice Of Assessment (Basic)

  • noa -

    (Person) Notice Of Assessment

  • noahistory-basic -

    (Person) History of Notice Of Assessment (Basic)

  • noahistory -

    (Person) History of Notice Of Assessment

  • cpfcontributions -

    (Person) Employer CPF Contributions

  • cpfbalances -

    (Person) CPF Balances

  • vehicles -

    (Person) Vehicle Number

MyInfo Business

Entity-Person API resource operations to access corporate entity and person details.

Entity-Person-Sample

Retrieves a sample Entity-Person data from MyInfo Business based on UEN and UIN/FIN.

This API does not use OAuth2.0 to perform authentication or authrisation, and does not require authorisation token and digital signature.

Note: Null value indicates that an attribute is unavailable.

path Parameters
uen
required
string <= 10 characters
Example: T15LP0010D

Required URL path parameter of the entity's unique entity number. This value can be obtained from the sub (uen_uinfin) in the decoded access_token.

uinfin
required
string <= 9 characters
Example: S9203266C

Required URL path parameter of the person's uinfin. This value can be obtained from the sub (uen_uinfin) in the decoded access_token.

query Parameters
txnNo
string

Transaction ID from requesting digital services for cross referencing.

attributes
required
Array of strings
Example: attributes=addresses,basic-profile,name,hanyupinyinname

Comma separated list of attributes requested. Possible attributes are listed in the scopes of the OAuth2 Security Schema above.

client_id
required
string

Unique ID for your application.

subentity
string
Example: subentity=180099736H

UEN of SaaS partner's client that will be receiving the person data.

Responses

Request samples

curl https://sandbox.api.myinfo.gov.sg/biz/v2/entity-person-sample/T15LP0010D/S9203266C

Response samples

Content type
application/json
{
  • "entity":
    {
    },
  • "person":
    {
    }
}

Authorise

This API triggers CorpPass login and obtain consent for the MyInfo Business to retrieve person and entity data from MyInfo Business. Once the user has authenticated and consented, an authorisation code (authcode) will be returned together with the state for verification via the callback URL defined. The authcode can then be used to retrieve an access token via the Token API.

Note: This API is public and should be implemented as a link or button on your online webpage.

query Parameters
authmode
string
Default: "CORPPASS"
Enum: "CORPPASS" "MOBILEID"

Mode of authentication used to obtain user consent. Default is "CORPPASS".

purpose
required
string

State the purpose for requesting the data. This will be shown to the user for his consent.

response_type
string
Default: "code"

Response type for authorisation code flow - must be "code".

attributes
required
Array of strings
Example: attributes=addresses,basic-profile,name,hanyupinyinname

Comma separated list of attributes requested. Possible attributes are listed in the scopes of the OAuth2 Security Schema above.

state
required
string

Identifier to reconcile query and response. This will be sent back to you via the callback URL. Use a unique system generated number for each and every call.

redirect_uri
required
string

Your callback URL for MyInfo Business to return with the authorisation code.

client_id
required
string
Example: client_id=STG-180099999K-TEST01

Unique ID for your application.

Responses

Request samples

function callAuthoriseApi() {
  var authoriseUrl = authApiUrl + "?client_id=" + clientId +
    "&attributes=" + attributes +
    "&purpose=" + purpose +
    "&state=" + state +
    "&redirect_uri=" + redirectUrl;

  window.location = authoriseUrl;
}

Token

This API generates an access token when presented with a valid authcode obtained from the Authorise API. This token can then be used to request for the person and entity data that were consented.

header Parameters
Authorization
required
string

Add token constructed containing the RSA digital signature of the base string. Refer to Security > Request Signing on how this token should be generated.

Note: This header is not required when calling Sandbox API.

Request Body schema: application/x-www-form-urlencoded
code
required
string

The authcode given by the authorise API.

grant_type
string
Default: "authorization_code"

Grant type for getting token (default "authorization_code")

client_secret
required
string

Secret key given to your application during onboarding.

client_id
required
string

Unique ID for your application.

redirect_uri
required
string

Application's callback URL.

state
string

Identifier that represents the user's session with the client, provided earlier during the authorise API call.

Responses

Request samples

// function to prepare request for TOKEN API
function createTokenRequest(code) {
  var cacheCtl = "no-cache";
  var contentType = "application/x-www-form-urlencoded";
  var method = "POST";
  var request = null;

  // preparing the request with header and parameters
  // assemble params for Token API
  var strParams = "grant_type=authorization_code" +
    "&code=" + code +
    "&redirect_uri=" + _redirectUrl +
    "&client_id=" + _clientId +
    "&client_secret=" + _clientSecret;
  var params = querystring.parse(strParams);


  // assemble headers for Token API
  var strHeaders = "Content-Type=" + contentType + "&Cache-Control=" + cacheCtl;
  var headers = querystring.parse(strHeaders);

  // Sign request and add Authorization Headers
  var authHeaders = generateAuthorizationHeader(
    _tokenApiUrl,
    params,
    method,
    contentType,
    _authLevel,
    _clientId,
    _privateKeyContent,
    _clientSecret
  );

  if (!_.isEmpty(authHeaders)) {
    _.set(headers, "Authorization", authHeaders);
  }

  var request = restClient.post(_tokenApiUrl);

  // Set headers
  if (!_.isUndefined(headers) && !_.isEmpty(headers))
    request.set(headers);

  // Set Params
  if (!_.isUndefined(params) && !_.isEmpty(params))
    request.send(params);

  return request;
}

Response samples

Content type
application/json
{
  • "access_token":
    {
    },
  • "token_type": "Bearer",
  • "expires_in": 0,
  • "refresh_token": "string",
  • "scope": "string"
}

Entity-Person

This API returns person and entity data from MyInfo Business when presented with a valid access token obtained from the Token API.

Note: Null value indicates that an attribute is unavailable.

Authorizations:
path Parameters
uen
required
string <= 10 characters
Example: T15LP0010D

Required URL path parameter of the entity's unique entity number. This value can be obtained from the sub (uen_uinfin) in the decoded access_token.

uinfin
required
string <= 9 characters
Example: S9203266C

Required URL path parameter of the person's uinfin. This value can be obtained from the sub (uen_uinfin) in the decoded access_token.

query Parameters
txnNo
string

Transaction ID from requesting digital services for cross referencing.

attributes
required
Array of strings
Example: attributes=addresses,basic-profile,name,hanyupinyinname

Comma separated list of attributes requested. Possible attributes are listed in the scopes of the OAuth2 Security Schema above.

client_id
required
string
Example: client_id=STG-180099999K-TEST01

Unique ID for your application.

header Parameters
Authorization
required
string

Add authorization token constructed containing the RSA digital signature of the base string. Refer to Security > Request Signing on how this token should be generated. Also include the access token (JWT) from /token API in your header prefixed with 'Bearer'.

Note: Only the Bearer token is required when calling Sandbox API.

Responses

Request samples

// function to prepare request for PERSON API
function createPersonRequest(uinfin, validToken) {
  var url = _personApiUrl + "/" + uinfin + "/";
  var cacheCtl = "no-cache";
  var method = "GET";
  var request = null;
  // assemble params for Person API
  var strParams = "client_id=" + _clientId +
    "&attributes=" + _attributes;
  var params = querystring.parse(strParams);

  // assemble headers for Person API
  var strHeaders = "Cache-Control=" + cacheCtl;
  var headers = querystring.parse(strHeaders);
  var authHeaders;

  // Sign request and add Authorization Headers
  authHeaders = generateAuthorizationHeader(
    url,
    params,
    method,
    "", // no content type needed for GET
    _authLevel,
    _clientId,
    _privateKeyContent,
    _clientSecret
  );

  if (!_.isEmpty(authHeaders)) {
    _.set(headers, "Authorization", authHeaders + ",Bearer " + validToken);
  }
  else {
    // NOTE: include access token in Authorization header as "Bearer " (with space behind)
      _.set(headers, "Authorization", "Bearer " + validToken);
  }

  // invoke token API
  var request = restClient.get(url);

  // Set headers
  if (!_.isUndefined(headers) && !_.isEmpty(headers))
    request.set(headers);

  // Set Params
  if (!_.isUndefined(params) && !_.isEmpty(params))
    request.query(params);

  return request;
}

Response samples

Content type
application/json
{
  • "entity":
    {
    },
  • "person":
    {
    }
}