{"openapi":"3.1.0","info":{"title":"OBV External Service","description":"OBV External Service","version":"1.0.0"},"servers":[{"url":"https://ooes-mint.paramountcommerce.com/v1"}],"security":[{"bearerAuth":[]}],"paths":{"/obv":{"post":{"summary":"Create a new OBV Flow","operationId":"createOBVFlow","requestBody":{"description":"A request to initiate an OBV Flow in return for a URL for fulfilling verification.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateOBVRequest"}}},"required":true},"responses":{"201":{"description":"The consumer should fulfill verification with the returned URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InitiateOBVResponse"}}}},"400":{"description":"Bad Request","content":{}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal Server Error","content":{}}}}},"/obv/{obvToken}/balance":{"get":{"summary":"Get balance for a client that possess an OBV Token","operationId":"getBalance","parameters":[{"in":"path","name":"obvToken","description":"A Paramount OBV token that must be provided on requests that seek to perform a verification of an existing bank account.","required":true,"schema":{"type":"string"}},{"in":"query","name":"merchantId","description":"Merchant's assigned Paramount Commerce ID","required":true,"schema":{"type":"string"}},{"in":"query","name":"merchantSubId","description":"Merchant Sub ID. This parameter is used to separate reporting and notifications by Merchants who process transactions for multiple websites or need to separate their traffic for other reasons.","required":true,"schema":{"type":"integer"}},{"in":"query","name":"merchantUserId","description":"Merchant User ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Get Balance Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBalanceResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetBalanceErrorResponse"}}}}}}},"/obv/{obvToken}/bank-details":{"get":{"summary":"Get bank details for a client that possess an OBV Token","operationId":"getBankDetails","parameters":[{"in":"path","name":"obvToken","description":"A Paramount OBV token that must be provided on requests that seek to perform a verification of an existing bank account.","required":true,"schema":{"type":"string"}},{"in":"query","name":"merchantId","description":"Merchant's assigned Paramount Commerce ID","required":true,"schema":{"type":"string","minLength":1}},{"in":"query","name":"merchantUserId","description":"Merchant User ID","required":true,"schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Get Bank Details Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetAccountDetailsResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"sendObvSuccessNotification":{"post":{"summary":"Send a success notification request to the merchant","description":"A success notification request will be sent back to the merchant after the verification request is complete success","requestBody":{"description":"Transaction, merchant, banking and identity information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantNotification"}}}},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}}}},"sendObvFailedNotification":{"post":{"summary":"Send a failure notification request to the merchant","description":"A failed notification request will be sent back to the merchant after the verification request is complete but failed","requestBody":{"description":"Only the transaction and merchant information will be sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantNotificationForFailures"}}}},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"InitiateOBVRequest":{"type":"object","properties":{"countryCode":{"$ref":"#/components/schemas/Country"},"merchant":{"$ref":"#/components/schemas/Merchant"},"transaction":{"$ref":"#/components/schemas/Transaction"},"consumer":{"$ref":"#/components/schemas/Consumer"},"accountToken":{"type":"string","description":"Account token for reauthorization","example":"167371ae-4e59-433c-bc28-641140408931"}},"required":["countryCode","merchant","consumer","transaction"]},"Transaction":{"type":"object","properties":{"transactionType":{"$ref":"#/components/schemas/TransactionType"},"transactionAmount":{"description":"Integer representing transaction amount in cents.","type":"integer","example":19384},"currencyCode":{"$ref":"#/components/schemas/TransactionCurrency"},"transactionRegion":{"$ref":"#/components/schemas/TransactionState"},"returnUrl":{"type":"string","description":"The URL where the Consumer’s browser is redirected at the end of the payment process. Merchants can include URL query string parameters, which are passed back to the Merchant system in the payment redirect response. The URL query string must be URL-encoded.","example":"http://localhost:3000/return-url"}},"required":["transactionType","transactionAmount","currencyCode","returnUrl"]},"Merchant":{"type":"object","properties":{"merchantId":{"description":"Merchant's assigned Paramount Commerce ID","type":"string","example":"Paramount"},"merchantSubId":{"description":"\"Merchant Sub ID. This parameter is used to separate reporting and notifications by Merchants who process\ntransactions for multiple websites or need to separate their traffic for other reasons.\"\n","type":"string","example":0},"merchantUserId":{"description":"Merchant's user ID","type":"string","example":"user"},"merchantTransactionId":{"type":"string"}},"required":["merchantId","merchantSubId","merchantUserId","merchantTransactionId"]},"Consumer":{"type":"object","properties":{"firstName":{"description":"User's first name","type":"string","example":"Alberta"},"lastName":{"description":"User's last name","type":"string","example":"Charleson"},"dob":{"description":"User's date of birth. Must be in ISO format: YYYY-MM-DD","type":"string","format":"yyyy-mm-dd","example":"1971-01-01"},"region":{"$ref":"#/components/schemas/State"},"postalCode":{"description":"User's home address postal code (NNNNN or ANA-NAN or ANA NAN or ANANAN (A = Alphabet, N = Numeric))","type":"string","example":"H3B-5E8","pattern":"^(\\d{5})$|^([A-Za-z]\\d[A-Za-z]-\\d[A-Za-z]\\d)$|^([A-Za-z]\\d[A-Za-z][ ]\\d[A-Za-z]\\d)$|^([A-Za-z]\\d[A-Za-z]\\d[A-Za-z]\\d)$"},"emailAddress":{"description":"User's email address","type":"string","format":"email","example":"frodo@bagend.com"},"emailAddressVerifiedTime":{"description":"ISO 8601 full-time formatted timestamp of when the merchant last verified the user's ownership of the email address via an acceptable OTP method.","type":"string","example":"2021-06-04T16:39:57-08:00","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)(([-+](\\d{2}):(\\d{2})|Z)?)$"},"phoneNumber":{"description":"User's phone number","type":"string","example":123456789},"phoneNumberVerifiedTime":{"description":"ISO 8601 full-time formatted timestamp of when the merchant last verified the user's ownership of the phone number via an acceptable OTP method.","type":"string","example":"2021-06-04T16:39:57-08:00"},"originatorIp":{"type":"string","description":"IP address the consumer is currently on","example":"174.26.150.77"}},"required":["firstName","lastName","dob","region","postalCode","originatorIp","phoneNumber"]},"InitiateOBVResponse":{"type":"object","properties":{"consumerUrl":{"description":"The URL that the Consumer should be directed to in order to fulfil the verification.","type":"string"}}},"TransactionType":{"type":"string","description":"The type of transaction.  Must be either DEBIT or CREDIT.","example":"DEBIT","enum":["DEBIT","CREDIT","VERIFY"]},"TransactionCurrency":{"type":"string","description":"Currency of the transaction.  Only CAD is expected.","default":"CAD","enum":["USD","CAD"]},"TransactionState":{"description":"\"The state where the payment transaction amount will be used. For example, if a Consumer in Texas makes a\npayment transaction that will be used by the Consumer when they are in New Jersey, the txn_state is NJ.\nUse the standard 2-letter state abbreviation as defined by USPS.\"\ntype: string\n","type":"string","example":"QC","enum":["AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY","AB","BC","MB","NB","NL","NT","NS","NU","ON","PE","QC","SK","YT"]},"State":{"description":"User's home address state. Use the standard 2-letter state abbreviation as defined by USPS.","type":"string","default":"QC","enum":["AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY","AB","BC","MB","NB","NL","NT","NS","NU","ON","PE","QC","SK","YT"]},"Country":{"type":"string","description":"Country.  Must be 'CA'.","default":"CA","enum":["US","CA"]},"GetBalanceResponse":{"type":"object","properties":{"obvToken":{"description":"A Paramount OBV token that must be provided on requests that seek to perform a verification of an existing bank account.","type":"string"},"balance":{"description":"Balance in minor unit (e.g. pennies)","type":"integer"},"currency":{"description":"Currency","type":"string"}}},"GetAccountDetailsResponse":{"type":"object","properties":{"obvToken":{"description":"A Paramount OBV token that must be provided on requests that seek to perform a verification of an existing bank account.","type":"string"},"firstName":{"description":"User's first name","type":"string"},"lastName":{"description":"User's last name","type":"string"},"state":{"$ref":"#/components/schemas/State"},"country":{"$ref":"#/components/schemas/Country"},"zip":{"description":"User's home address zip code (NNNNN or ANA-NAN or ANA NAN or ANANAN (A = Alphabet, N = Numeric))","type":"string","example":"H3B-5E8","pattern":"^(\\d{5})$|^([A-Za-z]\\d[A-Za-z]-\\d[A-Za-z]\\d)$|^([A-Za-z]\\d[A-Za-z][ ]\\d[A-Za-z]\\d)$|^([A-Za-z]\\d[A-Za-z]\\d[A-Za-z]\\d)$"},"bankInfo":{"$ref":"#/components/schemas/BankInfo"}}},"BankInfo":{"type":"object","properties":{"fiName":{"type":"string"},"fiRoutingNumber":{"type":"string"},"fiAccountNumber":{"type":"string"},"accountType":{"type":"string"},"fiTransitNumber":{"type":"string"},"fiNumber":{"type":"string"},"accountLabel":{"type":"string"}}},"Error":{"type":"object","properties":{"errorCode":{"description":"Error Code","type":"string"},"errorMessage":{"description":"Error Message","type":"string"}}},"GetBalanceErrorResponse":{"type":"object","properties":{"errorCode":{"description":"Error Code","type":"string"},"errorMessage":{"description":"Error Message","type":"string"},"obvToken":{"description":"obvToken","type":"string"},"success":{"description":"indicates whether the request is successful","type":"boolean"}}},"BaseMerchantNotification":{"type":"object","properties":{"verificationStatus":{"$ref":"#/components/schemas/VerificationStatus"},"merchant":{"$ref":"#/components/schemas/MerchantResponse"},"transaction":{"$ref":"#/components/schemas/TransactionResponse"}}},"MerchantNotification":{"allOf":[{"$ref":"#/components/schemas/BaseMerchantNotification"}],"type":"object","properties":{"accountInfo":{"$ref":"#/components/schemas/AccountResponseSuccess"},"identityInfo":{"$ref":"#/components/schemas/IdentityDto"}}},"MerchantNotificationForFailures":{"allOf":[{"$ref":"#/components/schemas/BaseMerchantNotification"}],"type":"object","properties":{"errorCode":{"type":"integer"},"errorMessage":{"type":"string"},"errorType":{"type":"string"}}},"VerificationStatus":{"type":"string","example":"SUCCESS","enum":["SUCCESS","FAIL"]},"MerchantResponse":{"type":"object","properties":{"merchantId":{"type":"string"},"merchantSubId":{"type":"integer"},"merchantUserId":{"type":"string"},"merchantTransactionId":{"type":"string","description":"Transaction identifier supplied by the merchant"}}},"AccountResponseSuccess":{"type":"object","properties":{"accountToken":{"type":"string"},"accountLabel":{"type":"string"},"fiName":{"type":"string"},"accountType":{"type":"string"}}},"TransactionResponse":{"type":"object","properties":{"transactionAmount":{"type":"integer","description":"Transaction amount"},"currencyCode":{"$ref":"#/components/schemas/TransactionCurrency"},"transactionType":{"$ref":"#/components/schemas/TransactionType"}}},"IdentityDto":{"type":"object","properties":{"name":{"type":"string"},"address":{"$ref":"#/components/schemas/Address"},"email":{"$ref":"#/components/schemas/Email"},"phoneNumber":{"$ref":"#/components/schemas/Phone"}}},"Address":{"type":"object","properties":{"city":{"type":"string"},"region":{"type":"string"},"street":{"type":"string"},"postalCode":{"type":"string"},"country":{"type":"string"}}},"Email":{"type":"object","properties":{"email":{"type":"string"}}},"Phone":{"type":"object","properties":{"phoneNumber":{"type":"string"},"phoneType":{"type":"string"}}}}}}