Creates an Account.
Optional Query Strings:
- ? RejectDuplicateCard (required to reject Account Creation if Card already exists)
- ? OKToAddDuplicateCard (required to allow Account Creation if Card already exists)
Use ?QueryParam1+QueryParam2 if you’re using multiple query strings
If you are an ISO (Independent Sales Organization), you will need to specify a SubClientID. (see notes below)
URL:
https://FQDN/v1/clients/ClientID/accounts
https://FQDN/v1/clients/ClientID/accounts?RejectDuplicateCard
https://FQDN/v1/clients/ClientID/accounts?OKToAddDuplicateCard
Request:
| JSON Name | Value | Required | Default | Description | Conditional | ||
|---|---|---|---|---|---|---|---|
| referenceID | String 1-15 characters |
R | Your unique Reference ID | ||||
| bank | object | CR | Either Bank or Card | ACH | |||
| routingNumber | String 9 digits |
R a | Routing Number | ACH | |||
| accountNumber | String 4-17 digits |
R a | Account Number | ACH | |||
| accountType | String 1-character code |
R a | Account Type | ACH | |||
| card | object | CR | Either Bank or Card
Either Payment Card Not Encrypted:
|
Payment Card | |||
| accountNumber | String 13-19 digits |
R n | Payment Card Account Number | Payment Card Not Encrypted |
|||
| expirationDate | String YYYYMM Format |
R n O n |
Expiration Date | Payment Card Not Encrypted |
|||
| keyID | String 22 characters |
R e | KeyID | Payment Card Encrypted |
|||
| data | String | R e | Encrypted Card Data, see below encoded in Base64 URL-Safe Character Set |
Payment Card Encrypted |
|||
| token | String | ® t | Card Token (from SSO) Restricted Usage |
Payment Card Token |
|||
| device | object | ® d | Card Data from P2PE Device Restricted Usage |
Payment Card Device |
|||
| id | String | ® d | Device Identifier | Payment Card Device |
|||
| blob | Hex String | ® d | Blob in Hex | Payment Card Device |
|||
| owner | object | R | Account Owner | ||||
| name | object | R | Name
Either Company or First, Middle, Last, and Suffix |
||||
| company | String | R c | Company Name | ||||
| first | String | R n | First Name | ||||
| middle | String | O n | Middle Name or Initial | ||||
| last | String | R n | Last Name | ||||
| suffix | String | O n | Suffix | ||||
| address | object | O | Address | ||||
| line1 | String | R | Address Line 1 | ||||
| line2 | String | O | Address Line 2 | ||||
| city | String | R | City | ||||
| state | String 2-character code |
R | State Code | 840 | |||
| zipcode | String | R | Zip Code | 840 | |||
| country | String 3-digit code |
O | 840 | ISO 3166-1 Country Code | 840 | ||
| phone | object | O | Phone Number (E.164 Numbering) | 840 | |||
| countryCode | String 1-3 digits |
O | 1 | Country Calling Code | 840 | ||
| number | String Min: 4 digits Max: 12-14 digits |
R | Phone Number | 840 | |||
(Encrypted) Card Data
| Field | Required | Description | UnEncrypted Card Data Format |
|---|---|---|---|
| Card Number | R | 13-19 digit Card Number | CardNumber | Expiration Date | (no spaces, pipe symbol separated) see samples |
| Expiration Date | R | Expiration date in YYYYMM Format |
Pack your Request, the following Samples shown here are unpacked only for human readability:
Create Payment Card Account:
{
"referenceID": "1",
"card":
{
"accountNumber": "9999999999999999",
"expirationDate": "202012"
},
"owner":
{
"name":
{
"first": "John",
"last": "Customer"
},
"address":
{
"line1": "465 Fairchild Drive",
"line2": "Suite #222",
"city": "Mountain View",
"state": "CA",
"zipcode": "94043"
},
"phone":
{
"number": "4159808222"
}
}
}
Unencrypted Card Data:
1111111111111111|203001|
where
Card Number: 1111111111111111
Expiration Date: January 2030Response:
Status Codes:
| Status Code | Description | |
|---|---|---|
| 200 | OK | An Account is Created. |
| 207 | Multi-Status | Account created, but Duplicate Card Check Failed. |
| 409 | Conflict | Duplicate Card Check Matched. |
See Status Codes for other possible Status Codes that might be returned.
Response Data:
| JSON Name | Value | Description | Status Code | |||||
|---|---|---|---|---|---|---|---|---|
| 200 | 207 | 409 | Other | |||||
| SC | Integer 3-digit code |
HTTP Status Code | ✔ | ✔ | ✔ | O | ||
| EC | String 1 or 8 characters |
Internal Error Code | ✔ | ✔ | ✔ | O | ||
| EM | String | Error Message | ✔ | ✔ | O | |||
| accountID | String 22 characters |
AccountID | ✔ | ✔ | ||||
| card | object | Card | O | O | ||||
| last4 | String 4 digits |
Last 4 of Card Account Number (PAN) | ✔ | ✔ | ||||
| expirationDate | String 6 digits |
Expiration Date YYYYMM Format |
O | O | ||||
| notices | String | Important Notices | O | O | O | |||
| duplicateAccountIDs | Array of Strings |
AccountIDs using the same Card Account Number | O | |||||
Sample response:
Account created:
{
"SC": 200,
"EC": "0",
"accountID": "TabaPay_AccountID_22ch"
}Notes:
For Clients who are an ISO (Independent Sales Organization), to specify your ClientID and a SubClientID, use the underscore character ("_") to separate the two values: <ClientID>_<SubClientID> where:
- ClientID is your unique 22-character string and
- SubClientID is an assigned 4, 6 or 8-digit value.
Creating an Account just to do a Query Card is not the valid way to use our API (it is an Anti-Pattern). As we try to show in the Sample Flows: Query Card should be done first before Creating an Account, this is the correct Pattern (or use of our API).
Creating unused and/or inactive Accounts will result in:
- These Account incurring an extra charge (fee)
- These Account being automatically deleted
Excessive Anti-Pattern behavior will result in:
- Your Requests failing
- Your Client being locked