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/<ClientIDISO>/cards
https://<FQDN>/v1/clients/<ClientIDISO>/cards?RejectDuplicateCard
https://<FQDN>/v1/clients/<ClientIDISO>/cards?OKToAddDuplicateCard
Note:
ReadMe currently does not support empty query strings, so building a request interactively with query strings (ie ?RejectDuplicateCard, ?OKToAddDuplicateCard) is unavailable. However, works today in sandbox/production.
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 2030
Response:
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