Merchant Automated Boarding - API Documentation
General
The Merchant Automated Boarding API allows an authorized third-party to populate a Merchant Application using a specified pricing program and have that Merchant Application electronically sent to the merchant for signature. Post execution, the MPA is routed to MiCamp for boarding with Fiserv.
This workflow uses Docusign for the signature capture on the documents.
As part of the signing process the merchant will upload a voided check to the Merchant Application.
Workflow
API Endpoints & Authentication
All requests to the MiCamp Boarding API are sent via the HTTP POST and GET methods to one of the API endpoint URLs
HTTP Request Method: GET/POST/PUT/PATCH
JSON Content-Type: application/json
API Endpoint: 199.117.154.42/api/v2
- All calls to the MiCamp Boarding API use an API Key a JWT session.
- API Key: (will be provided)
- Basic Authentication: Base 64 Encoded (username + : + password)
Header(“Authorization”, “Basic ” + Base64Secret)
JWT Session Endpoint
199.117.154.42/api/v2/user/session
To obtain a JWT session make a request to the JWT Session Endpoint using this request body:
{
"email": "user@example.com",
"password": "secret",
"remember_me": false
}
If your account is set up to use Encrypted requests, use this request Body *before* encryption instead:
{
"resource": [
{
"email": "admin@example.com",
"password": "secret",
"remember_me": false
}
]
}
Encrypted API Endpoints & Authentication
To use the encrypted API client must provide a public key.
Example of public key:
-----BEGIN PRIVATE KEY-----
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
-----END PRIVATE KEY-----
- This tool can be used for RSA encryption and decryption as well as to generate RSA key online. https://www.devglan.com/online-tools/rsa-encryption-decryption
- Both public and private keys can be generated for free.
- A unique RSA key will be created by MiCamp.
- The client must use attached encryption/decryption class.
class Encryption {
public static function decrypt($data, $symkey, $private_key, $method = 'AES-256-CBC', $shared_iv) {
$symkey = base64_decode($symkey);
$shared_iv = base64_decode($shared_iv);
openssl_private_decrypt($symkey, $decrypted_symkey, $private_key, OPENSSL_PKCS1_PADDING);
$decrypted_data = openssl_decrypt($data, $method, $shared_iv, 0, $decrypted_symkey);
return $decrypted_data;
}
public static function encrypt($data, $public_key, $method = 'AES-256-CBC', $shared_iv) {
$iv_bytes = openssl_cipher_iv_length($method);
$symkey = openssl_random_pseudo_bytes($iv_bytes);
$encrypted_data = openssl_encrypt($data, $method, base64_encode($shared_iv), 0, $symkey);
$isvalid = openssl_public_encrypt($symkey, $encrypted_symkey, $public_key, OPENSSL_PKCS1_PADDING);
return array(
'sk' => base64_encode($encrypted_symkey),
'msg' => $encrypted_data,
'iv' => base64_encode($shared_iv)
);
}
}
- When the user makes a request use the correct body format:Example: User sessions request before encryption
{ "resource": [ { } ] }
{ "resource": [ { "email": "test@micamp.com", "password": "Xew13Exx3vf2!", "remember_me": false } ] }
- To encrypt use to following the next line:
//Encryption process:
//To encrypt make sure you have the right Public Key and if it requires Base 64 decoding (depending on the method of storage of your RSA key pair )
$public_key = base64_decode('{publickey}');
$iv = openssl_random_pseudo_bytes(128);
$e = new Encryption();
$enc_data = $e->encrypt( json_encode($frecord), $public_key, 'AES-256-CBC', $iv);
- To Decryption use to following the next line:
//Decryption process:
//In order to decrypt the information first get it out of the response container :
$enc_data= $response['resource'][0];
//Decrypt the information
$dec_data2 = $e->decrypt( $enc_data['msg'], $enc_data['sk'], $private_key, 'AES-256-CBC', $enc_data['iv']);
API Endpoints
Add a New Merchant
199.117.154.42/api/v2/boarding/_table/MerchantDetail/
Use this method to get, create, update, or delete a MerchantDetail record, the information to update must be sent in the request body using the format provided below – note you must separately update Owner Information (see below).
Methods
199.117.154.42/api/v2/boarding/_table/MerchantDetail/?filter=GUID=T252SD5A-EC1A-4A8F-8985-0085D3B1D664&viewtype=detail
Request URL
EndPoint + /boarding/_table/MerchantDetail
EndPoint + /boarding/_table/MerchantDetail/[ID]
Fields name | Format | Required | Description |
UserGUID | String, up to 50 characters | NO | Globally Unique Identifier uniquely identifying the merchant record. |
bank_accountNumber | String, up to 25 characters | YES | The bank account number associated with the merchant record. This identifies where merchant processing receipts will be deposited into. |
bank_name | String, up to 25 characters | YES | The name of the bank associated with the bank account provided in the merchant record. |
bank_routingNumber | String, 9 characters | YES | The bank routing number associated with the merchant record. In conjunction with the bank account number, these fields identify where merchant processing receipts will be deposited into. |
biz_BusinessTypeID | String, up to 25 characters | YES | The type of business is used as part of the underwriting process to help identify the risks that may be associated with the business.
|
biz_customerServiceEmail | String, up to 50 characters | NO | The customer service email. |
biz_dbaBusinessAddress | String, up to 50 characters | YES | The physical address of the business location (DBA) identified in this application. This cannot be a PO Box. |
biz_dbaBusinessCity | String, up to 150 characters | YES | The physical address of the business location (DBA) identified in this application. |
biz_dbaBusinessEmail | String, up to 100 characters | YES | The email address for the business location (DBA) identified in this application. The business location (DBA) email address may be different than the email address for the legal entity. |
biz_dbaBusinessName | String, up to 50 characters | YES | The DBA Business Name for the business location (DBA) identified in this application. |
biz_dbaBusinessState | String, up to 2 characters | YES | The physical address of the business location (DBA) identified in this application. |
biz_dbaBusinessWebsite | String, up to 50 characters | NO | The website URL of the business location (DBA) identified in this application. |
biz_dbaBusinessZip | String, up to 9 characters | YES | The physical address of the business location (DBA) identified in this application. |
biz_dbaFaxNumber | String, up to 10 characters | NO | The fax number for the business location (DBA) identified in this application. |
biz_dbaPhoneNumber | String, up to 25 characters | YES | The phone number for the business location (DBA) identified in this application. |
biz_irsCertifyForeignEntity | Integer | NO | The IRS designation for if this organization is classified by the IRS as a Foreign Entity:
0. Not a foreign entity. 1. It is foreing entity |
biz_irsFederalTaxID | String, up to 25 characters | YES | The Federal Tax ID or Social Security Number for the organization identified in this application. If the Business Type is an Individual/Sole Proprietorship, then a Social Security Number should be provided. All other entities should provide a Federal Tax ID. |
biz_irsName | String, up to 50 characters | YES | The name of the organization that is identified in this application, as it appears on tax documents filed with the IRS. |
biz_legalAddress | String, up to 50 characters | YES | The mailing address of the legal entity identified in this application. |
biz_legalCity | String, up to 50 characters | YES | The mailing address of the legal entity identified in this application. |
biz_legalContactEmail | String, up to 100 characters | YES | The email address for the contact at the legal entity. |
biz_legalContactFaxNumber | String, up to 10 characters | NO | The fax number for the legal entity identified in this application. |
biz_legalContactName | String, up to 50 characters | YES | The contact name for the legal entity identified in this application. |
biz_legalContactPhoneNumber | String, up to 25 characters | YES | The phone number for the business location (DBA) identified in this application. |
biz_legalMonthYearStarted | Date | YES | The legal month year started. |
biz_legalName | String, up to 50 characters | YES | The legal name of the business identified in this application. |
biz_legalState | String, up to 2 characters | YES | The mailing address of the legal business identified in this application. |
biz_legalStateIncorp | String, up to 2 characters | YES | The state that the legal business identified in this application was formed in. |
biz_legalZip | String, up to 9 characters | YES | The mailing address of the legal business identified in this application. |
biz_retrievalSendToBizFaxNumber | Integer | NO | If selected, chargeback retrieval documents will be sent to the fax number listed in biz_retrievalRequestFaxNumber. Note that chargeback retrievals can be sent to both a fax number and mailed to the business address. |
biz_retrievalRequestFaxNumber | String, up to 10 characters | NO | The fax number that chargebacks will be sent to. |
biz_retrievalSendToBizAddress | Integer | NO | If selected, chargeback retrieval documents will be mailed to the address of the business location (DBA). |
biz_SICMCC | Integer, up to 9 characters | NO | The numeric SIC/MCC associated with this business. A merchant should know the MCC for their business, but a list is available here: https://www.dm.usda.gov/procurement/card/card_x/mcc.pdf |
biz_TypeOfGoodsSold | String, up to 100 characters | YES | A text description where the types of goods sold, or types of business can be entered. |
txtMSOAgentID | String, up to 250characters | NO | Contains the MSO Agent ID or the exact name of the Agent in MiCamp's System. |
fin_AnnualAMEX | Decimal, up to 18 digits with a decimal point. | YES | The merchants estimate of the annual American Express volume the merchant expects to process. |
fin_AnnualDiscover | Decimal, up to 18 digits with a decimal point. | YES | The merchants estimate of the annual Discover volume the merchant expects to process. |
fin_AnnualTotalSales | Decimal, up to 18 digits with a decimal point. | YES | The merchants estimate of the combined annual volume the merchant expects to process. |
fin_AnnualVisaMC | Decimal, up to 18 digits with a decimal point. | YES | The merchants estimate of the annual Visa and Mastercard volume the merchant expects to process. |
fin_AverageTicket | Decimal, up to 18 digits with a decimal point. | YES | The average transaction/ticket size of a transaction the merchant anticipates processing. |
fin_highTicket | Decimal, up to 18 digits with a decimal point. | YES | The largest transaction/ticket size that a merchant anticipates processing. |
biz_MID | String, up to 20 characters | NO | The Merchant Identification Number associated with this merchant record. This value will be provided by the processor and will be updated by MiCamp.
Note: Do not include a Value in this field for your POST requests unless the Merchant is already on MiCamp,read the section below for more information. |
FormID | Integer | YES |
1 = Flat Rate 2.99% D/C rate / 0.25 Tx Fee 2 = Flat Rate 2.70 D/C rate / 0.20 Tx Fee 3 - WAVit account, variable rate, no Tx Fee |
status | Integer | NO | The status of the document creation process.
|
WAVitPercent | Decimal, up to 18 digits with a decimal point. | Required for WAVit contracts. Not required for flat fee contracts. | The flat rate percentage that is associated with a WAVit account. Must be less than 4.0%. Enter as a decimal (e.g. 4.00% = 0.04). |
isDocuSignProduction | Integer | YES |
0 or blank/null indicates demo environment (contract has watermark) 1 is production. Contract has no watermark |
gw_merchantKey | Integer | NO | The gateway merchant key |
gw_username | String, up to 20 characters | NO | The gateway username |
gw_password | String, up to 20 characters | NO | The gateway password |
biz_dbaCustomerServicePhone | String, up to 10 characters | NO |
Request Body:
Note that the following fields will be a part of a GET response, but are not permitted in a POST request:
- biz_MID
- status
{
"resource": [
{
"UserGUI": "65265fff-2dad-4b4f-9238-809ce09e5b9f",
"fin_AverageTicket": 1000,
"bank_accountNumber": "123456789123456",
"bank_name": "BOK Financial",
"bank_routingNumber": "123456798",
"biz_dbaBusinessAddress": "123 Any Street",
"biz_dbaBusinessCity": "Scottsdale",
"biz_dbaFaxNumber": "8001231234",
"biz_dbaBusinessName": "My Company Name",
"biz_dbaPhoneNumber": "8001231234",
"biz_dbaBusinessState": "AZ",
"biz_dbaBusinessWebsite": "mybusiness.com",
"biz_dbaBusinessZip": "85251",
"fin_AnnualAMEX": 10000,
"fin_AnnualDiscover": 10000,
"fin_AnnualTotalSales": 100000,
"fin_AnnualVisaMC": 10000,
"fin_highTicket": 1000,
"biz_legalAddress": "123 Any Street",
"biz_BusinessTypeID": 2,
"biz_legalCity": "Scottsdale",
"biz_legalContactEmail": "myemail@mycompany.com",
"biz_legalContactName": "My Name",
"biz_legalMonthYearStarted": "2009-07-01",
"biz_legalName": "My Company Name",
"biz_legalState": "AZ",
"biz_legalStateIncorp": "AZ",
"biz_legalZip": "85251",
"biz_legalContactPhoneNumber": "1234567895",
"biz_irsName": "nameirs",
"biz_irsFederalTaxID": "123555",
"biz_TypeOfGoodsSold": "Retail",
"txtMSOAgentID": "0",
"biz_emailAddress": "email@email.com",
"FormID": "2",
"status": "0",
"biz_customerServiceEmail": "email@email.com",
"biz_legalContactFaxNumber": "1234567895",
"biz_retrievalSendToBizAddress": "0",
"biz_retrievalRequestFaxNumber": "0",
"biz_retrievalSendToBizFaxNumber": "",
"biz_SICMCC": "122",
"biz_irsCertifyForeignEntity" : "0",
"WAVitPercent" : 1,
}
]
}
Response:
{
"resource": [
{
"Id": 23
}
]
}
On-boarding of existing Merchants
When using the post request, if an MID is included in the request body , all other fields will be ignored and instead the system will check if an MID already exists within Micamp, if it does, the merchant will be created under the provided UserGUID and have a GUID assigned. This behaviour is exclusive to the POST request endpoint, the UserMID's cannot be modified, and records created this way are immediately locked from being modified.
Example:
{
"resource": [
{
"UserGUID" : "user's guid",
"biz_MID": "Existing MID",
"biz_legalZip": "8400",
}]}
Add an Owner to a New Merchant Entry
Each MerchantDetail record must include one or more Owner records.
199.117.154.42/api/v2/boarding/_table/BizMerchantOwners
Methods
GET, POST, PUT
Request URL
EndPoint + /boarding/_table/BizMerchantOwners
EndPoint + /boarding/_table/BizMerchantOwners/[ID]
Fields name | Format | Required | Description |
biz_ownerDateOfBirth | Date | YES | The owner date of birth. |
biz_ownerFirstName | String, up to 50 characters | YES | The owner first name. |
biz_ownerMiddleName | String, up to 50 characters | YES | The owner first middle name. |
biz_ownerHomeAddress | String, up to 25 characters | YES | The owner home address. |
biz_ownerHomeCity | String, up to 50 characters | YES | The owner home city. |
biz_ownerHomeState | String, up to 2 characters | YES | The owner home state. |
biz_ownerHomeZip | String, up to 9 characters | YES | The owner home zip code. |
biz_emailAddress | String, up to 100 characters | YES | The email address. |
biz_ownerLastName | String, up to 50 characters | YES | The owner last name. |
biz_ownerPhoneNumber | String, up to 25 characters | YES | The owner phone number. |
biz_ownerPercentOwner | Decimal, up to 18 digits with a decimal point. | YES | % of Ownership |
biz_ownerSSN | String, up to 9 characters | NO | The owner social security number. |
MerchantGUID | String, up to 100 characters | YES | The merchant GUID end merchant details |
UserGUID | String, up to 50 characters | NO | |
biz_ownerIsPrimary | Integer | YES |
1 = Primary. 2 = Secondary. 3 = Tertiary. If nothing is provided, the signers will be randomly assigned If you forget to assign secondary, the second signer will be randomly assigned. |
biz_title | String, up to 100 characters | YES | |
status | Integer | NO | Status not verified. |
Request:
{
"resource": [
{,
"MerchantGUID": 23,
"UserGUID": "652b5fff-2d5d-4b4f-9238-809ce09e5b9f",
"biz_ownerFirstName": "Ted",
"biz_ownerMiddleName": "T",
"biz_ownerLastName": "More",
"biz_ownerHomeAddress": "1313 Mocking bird lane",
"biz_ownerHomeCity": "Belmont",
"biz_ownerHomeState": "Ca",
"biz_ownerHomeZip": "774747",
"biz_emailAddress": "email@email.com",
"biz_ownerPhoneNumber": "323-33-1234",
"biz_ownerDateOfBirth": "2009-07-01",
"biz_ownerPercentOwner": 50.1,
"biz_ownerSSN": "345678901"
"biz_ownerIsPrimary": "0"
"biz_title": "title",
"status": "0"
}
]
}
Response:
{
"resource": [
{
"": null
}
]
}
How to start the PDF Generation Process
199.117.154.42/api/v2/boarding/_table/BizMerchantOwners
After to have the details and owners created in order to start generating the PDF all of you have to do is send a put request to :
199.117.154.42/api/v2/boarding/_table/MerchantDetail/
And include the status change along with GUID in the request body like this:
{"resource": [{
"GUID": "652b5ff3-2dad-4b4f-9238-809ce09e5b9f",
"status": 1
}]
}
Notes
- The timeout for signing a document is 30 days.
- All GUID are case sensitive.
- Merchant detail status can only be changed to 0 or 1.
- 0 OR null Not ready
- 1 = Verified
- When value is set to 1, trigger on MiCamp’s side to initiate the document creation/signing process.
- Can GET the value of STATUS and can verify STATUS can be changed to zero if existing STATUS is not in the below list.
- If STATUS currently has a value that’s not in the below list, the document has already been signed and is in the underwriting process.
- There is no automated method for the process to be stopped.
- Status list of values, allowing change of status to 0:
- 1 = Verified
- 2 = Cancelled/declined
- 4 = Failed validation
- 6–9 = Document prepared, but not sent (possible errors)
- 10 = Document sent
- Status list of values requiring manual intervention.
- 13 = Underwriting errors
- 17 = Manual process.
- If an application is ultimately declined by underwriting, in almost all cases the application is “dead” and cannot be resubmitted
- communication would need to go through applications@micamp.com for further information and/or instructions.