{ "name": "api-fraud", "info": { "contact": { "name": "Frozone", "email": "frozone@hbc.com" } }, "base_url": "http://fraud-frozone", "description": "API documentation for the fraud service", "headers": [], "enums": { "RecommendationCode": { "description": "Enum describing the possible responses", "values": [ { "name": "reject" }, { "name": "review" }, { "name": "accept" } ], "attributes": [ { "name": "DynamoDBTypeConvertedEnum", "value": { } } ] }, "CustomerType": { "description": "Possible types of customers", "values": [ { "name": "guest" }, { "name": "registered" }, { "name": "employee" } ], "attributes": [ { "name": "DynamoDBTypeConvertedEnum", "value": { } } ] }, "Banner": { "description": "Our lovely store chains", "values": [ { "name": "lat" }, { "name": "s5a" }, { "name": "o5a" }, { "name": "bay" } ], "attributes": [ { "name": "DynamoDBTypeConvertedEnum", "value": { } } ] } }, "models": { "Transaction": { "description": "Defines data expected to come in from OMS describing a transaction", "fields": [ { "name": "orderId", "type": "string" }, { "name": "groupId", "type": "string" }, { "name": "orderTotal", "type": "decimal" }, { "name": "shippingCost", "type": "decimal" }, { "name": "currencyCode", "type": "string" }, { "name": "storeNumber", "type": "integer" }, { "name": "salesRep", "type": "string", "required": false }, { "name": "lastModifiedDate", "type": "date-iso8601", "required": false }, { "name": "banner", "type": "Banner", "required": true }, { "name": "creditCard", "type": "CreditCard", "required": true }, { "name": "promos", "type": "[Promo]", "required": false }, { "name": "items", "type": "[Item]", "required": true }, { "name": "ipAddress", "type": "string", "required": false }, { "name": "source", "type": "string", "description": "Order source (web, store, etc)", "required": true }, { "name": "customer", "type": "Customer", "required": true }, { "name": "additionalData", "type": "AdditionalData", "description": "Additional `envelope` data sent through our system to f-s, should include InAuthId", "required": false } ] }, "AdditionalData": { "description": "Envelope data", "fields": [ { "name": "inAuthId", "type": "uuid" } ] }, "CreditCard": { "description": "A customer's complete credit card information", "fields": [ { "name": "nameOnCard", "type": "string", "required": true }, { "name": "billingAddress", "type": "Address", "required": true }, { "name": "cardType", "type": "string", "required": true }, { "name": "cardNumber", "type": "string", "required": true }, { "name": "authorizedAmount", "type": "decimal", "required": true }, { "name": "fullAmount", "type": "decimal", "required": true }, { "name": "expiryDate", "type": "string", "required": true, "description": "MM-YY that the credit card expires" }, { "name": "authCode", "type": "string", "required": true, "description": "CVV code on the back of the card" }, { "name": "responseCode", "type": "integer" }, { "name": "merchantId", "type": "integer", "required": false }, { "name": "registerNumber", "type": "string", "required": false }, { "name": "transactionNumber", "type": "string", "required": true }, { "name": "avsResponse", "type": "string", "required": true, "description": "Address Verification System response, Codes are available here: https://www.chasepaymentech.com/address_verification_service.html" } ], "attributes": [ { "name": "DynamoDBDocument", "value": { } } ] }, "Promo": { "description": "Promotion model", "fields": [ { "name": "promotionCode", "type": "string", "required": true }, { "name": "promotionAmount", "type": "decimal", "required": true, "description": "Dollar amount discounted by the promotion" } ], "attributes": [ { "name": "DynamoDBDocument", "value": { } } ] }, "Item": { "description": "Single item", "fields": [ { "name": "svsNumber", "type": "integer", "required": true, "description": "Product style number (parent number)" }, { "name": "skuNumber", "type": "integer", "required": true, "description": "HBC internally generated number for items (alias SKN)" }, { "name": "upcNumber", "type": "integer", "description": "The number on the barcode that could be used across different retailers", "required": false }, { "name": "classNumber", "type": "integer", "description": "Signifies business category of an item (pants, tops, shirts, etc.)", "required": false }, { "name": "color", "type": "string", "required": false }, { "name": "size", "type": "string", "required": false }, { "name": "currentStatus", "type": "string", "required": true }, { "name": "department", "type": "integer", "required": true }, { "name": "signOnDelivery", "type": "string", "required": false }, { "name": "giftWrapped", "type": "boolean", "required": false }, { "name": "costAmount", "type": "decimal", "required": false }, { "name": "marginAmount", "type": "decimal", "required": false }, { "name": "description", "type": "string", "required": true }, { "name": "price", "type": "decimal", "required": true, "description": "Price of single item" }, { "name": "extendedPrice", "type": "decimal", "description": "Total price of all items ordered" }, { "name": "quantity", "type": "integer", "required": true }, { "name": "groupNumber", "type": "integer", "required": true }, { "name": "shippingAddress", "type": "Address", "required": true }, { "name": "shippingMethod", "type": "string", "required": true }, { "name": "shippingCountry", "type": "string", "required": true } ], "attributes": [ { "name": "DynamoDBDocument", "value": { } } ] }, "Address": { "description": "General address model", "fields": [ { "name": "name", "type": "string", "required": true }, { "name": "streetLineOne", "type": "string", "required": true }, { "name": "streetLineTwo", "type": "string", "required": false }, { "name": "city", "type": "string", "required": true }, { "name": "state", "type": "string", "required": true }, { "name": "zip", "type": "string", "required": true }, { "name": "country", "type": "string", "required": true } ], "attributes": [ { "name": "DynamoDBDocument", "value": { } } ] }, "Customer": { "description": "Customer model", "fields": [ { "name": "customerType", "type": "CustomerType", "required": true }, { "name": "accountId", "type": "string", "required": true }, { "name": "creationDate", "type": "date-iso8601", "required": true }, { "name": "firstName", "type": "string", "required": true }, { "name": "lastName", "type": "string", "required": true }, { "name": "emailAddress", "type": "string", "required": true } ], "attributes": [ { "name": "DynamoDBDocument", "value": { } } ] }, "Decision": { "description": "Defines decision information", "fields": [ { "name": "transactionId", "type": "string", "required": true }, { "name": "recommendationCode", "type": "RecommendationCode", "required": true }, { "name": "crossReference", "type": "uuid", "required": false }, { "name": "rulesTripped", "type": "string", "required": false }, { "name": "totalScore", "type": "integer", "required": true }, { "name": "remarks", "type": "string", "required": false } ], "attributes": [ { "name": "DynamoDBDocument", "value": { } } ] }, "DBRecord": { "description": "Response model to OMS containing the transaction they've sent and the decision we've made", "fields": [ { "name": "transactionId", "type": "string", "attributes": [ { "name": "DynamoDBHashKey", "value": { "attributeName": "transactionId" } } ] }, { "name": "lastModifiedDate", "type": "date-iso8601", "required": false, "attributes": [ { "name": "DynamoDBRangeKey", "value": { "attributeName": "lastModifiedDate" } } ] }, { "name": "createdDate", "type": "date-iso8601", "description": "Date this record was first created within the database", "required": false }, { "name": "transaction", "type": "Transaction" }, { "name": "decision", "type": "Decision" } ], "attributes": [ { "name": "DynamoDBTable", "value": { "tableName": "fraud_service_orders_dev" } } ] }, "Error": { "description": "Error response model", "fields": [ { "name": "message", "type": "string", "description": "Error description message", "example": "Oops, something went wrong!" }, { "name": "error", "type": "string", "description": "Error code", "example": "invalid_email" } ] } }, "resources": { "Transaction": { "path": "/transaction", "description": "Store a transaction and give an immediate yes/no/maybe decision, if maybe send to manual review and await other endpoint", "operations": [ { "method": "POST", "description": "Provides decision about a transaction by supplying order or other information", "body": { "type": "Transaction" }, "responses": { "200": { "type": "Decision" }, "400": { "type": "[Error]" } } } ] }, "Decision": { "path": "/decision", "description": "", "operations": [ { "method": "POST", "description": "Consumes the decision about a transaction (usually meant for manual review) and triggers OMS to process/cancel the order", "body": { "type": "Decision" }, "responses": { "200": { "type": "unit" }, "400": { "type": "[Error]" } } } ] } } }