Integration API. Author Kodmyran AB

Similar documents
cdiscount version BoostMyShop

PAYMENTADMIN API 1.1 SveaWebPay

Homework Assignment 3. November 9th, 2017 Due on November 23th, 11:59pm (midnight) CS425 - Database Organization Results

BulkSMS Marketo Gateway

MPI Frequently Asked Questions

Octolooks Scrapes Guide

Cdiscount Integration - User Guide

Sears-Magento Integration Guide 0.0.1

Account Activity Migration guide & set up

Catch Integration - User Guide

1. Overview Account Configuration Details... 3

NotifySync 4.7. Notify Technology Corporation

Smart Bulk SMS & Voice SMS Marketing Script with 2-Way Messaging. Quick-Start Manual

Account Activity Migration guide & set up

Introduction. Copyright 2018, Itesco AB.

Libelium Cloud Hive. Technical Guide

Magento 2 Integration Manual (Version /10/2017)

Opaali Portal Quick guide

Setting up a Salesforce Outbound Message in Informatica Cloud

LINK Mobility SMS REST API MT and Delivery Reports Version 1.3; Last updated September 21, 2017

Shopitem API A technical guide to the REST API for managing updates of shopitems

MultiSafepay Integration manual

EMARSYS FOR MAGENTO 2

ZipRecruiter Apply Webhook Documentation. ZR ATS Integration Team. Version 1.1,

Bonanza Integration - User Guide

INTEGRATION DOCUMENTATION Svea Checkout API v1.12

Magento Integration Manual (Version /15/2017)

ForeScout CounterACT. Configuration Guide. Version 3.4

API Documentation. Release Version 1 Beta

The production version of your service API must be served over HTTPS.

USER MANUAL Setting Up Fooman Connect: Xero

Lead Actions Guide Version Lead Actions Guide. Prepared By: John Jackson Date: 10 th October 2017 Version: 1.90 Release

Ebay Integration User Guide 0.0.1

File Reputation Filtering and File Analysis

Fyndiq Magento Extension

Contents OVERVIEW... 3

MercadoLibre Integration for Magento Guide

Interactive Voice Response (IVR) Extension Type Guide

You can use these quick links, and the links on the left sidebar to navigate quickly around this User Manual.

Sears Integration for Magento 2-User Guide 0.0.1

Managing System Administration Settings

The Beer Store On-line Ordering System User Guide

Partner Web Services. GetOrderStatus Version 1 Service Manual

DQIAGILITY RELEASE NOTES. Subject: DQIAgility v7.1.30

SyncBreeze FILE SYNCHRONIZATION. User Manual. Version Dec Flexense Ltd.

Webhooks Integration Guide

Withdrawal, Production, and Supplier; the Three Types of Kanban

12/05/2017. Geneva ServiceNow Custom Application Development

ideal QR - Merchant Implementation Guidelines (EN)

OPC XML-DA Client Driver PTC Inc. All Rights Reserved.

Jet-Magento Integration Guide

Ebay Integration User Guide 0.0.1

CitiDirect BE SM Mobile

ForeScout Open Integration Module: Data Exchange Plugin

THOMSON REUTERS TICK HISTORY RELEASE 12.1 BEST PRACTICES AND LIMITS DOCUMENT VERSION 1.0

Equitrac Embedded for Ricoh Basic. Setup Guide Equitrac Corporation

Con o t n i t n i e n n e t n a t l a S u S p u p p l p ier e r P or o t r a t l User Manual

Brand feed requirements

Go to SQA Academy the website address is

F-Billing Revolution 2015 User Manual F-Billing Software

Jet Marketplace Integration with Magento Version: 1.0

Managing System Administration Settings

Update 9/16/16: Version published to the ServiceNow store now supports Helsinki, Istanbul and Jakarta.

Catalog Content Management

Citrix Analytics Data Governance Collection, storage, and retention of logs generated in connection with Citrix Analytics service.

BulkSMS / Customer, Marketo Integration Guide, version 2.6, 2018/01/19. BulkSMS / Customer. Marketo Quick Start Integration Guide

EMC Disk Library Automated Tape Caching Feature

FieldView. Management Suite

User Guide. Document Version: 1.0. Solution Version: 365_102017_3_4

Direct Merchant Notification Guide API v 1.0.0

IronSync File Synchronization Server. IronSync FILE SYNC SERVER. User Manual. Version 2.6. May Flexense Ltd.

Frooition Implementation guide

Configuring IEEE 802.1x Port-Based Authentication

Identity Firewall. About the Identity Firewall

Management Tools. Management Tools. About the Management GUI. About the CLI. This chapter contains the following sections:

4PSA VoipNow Core Reseller's Guide. Copyrights Rack-Soft Inc. VoipNow is a registered trademark of Rack-Soft Inc.

Introduction to Cisco TV CDS Software APIs

C U B I T S. API DOCUMENTATION Version 1.8

Marketo Data Shield Setup Guide

Release Notes for Version

Ebook : Overview of application development. All code from the application series books listed at:

SIP System Features. SIP Timer Values. Rules for Configuring the SIP Timers CHAPTER

MANUAL. Extension for Shop System Magento Version th September 2017

Workspace ONE UEM Certificate Authentication for EAS with ADCS. VMware Workspace ONE UEM 1902

OpenIAM Identity and Access Manager Technical Architecture Overview

Managing System Administration Settings

ivend Retail & QuickBooks Desktop Integration Documentation

Batches and Commands. Overview CHAPTER

Unified CCX Outbound Dialer Configuration

ewallet API integration guide version 5.1 8/31/2015

271 Waverley Oaks Rd. Telephone: Suite 206 Waltham, MA USA

Guide to Ordering Test Materials

Fyndiq Prestashop Module

Visualization of Large Dynamic Networks

Improved Import / Export Magento 2 Extension Manual. Manual for Improved Import / Export extension for Magento 2

Trellis Magento 2 Salsify Connector

Please note: This is a working document and is subject to change. Please check back periodically to ensure you have the latest version of this spec.

Twitter Adaptation Layer Submitted for Drexel University s CS544

SymmetricDS Quick Start Guide

Microsoft Dynamics CRM Integration with Bomgar Remote Support

Transcription:

Integration API Author Kodmyran AB Introduction The integration API provides a subset of the entity API. Unlike the entity API the concept here is for a consumer to read what is essentially a transaction log, apply the changes to their local system and when required push changes back into Kodmyran Commerce. This is the recommended approach for most integrations towards webshops and similar as it provides more consistency checks and will automatically resolve various things for you. Callbacks/Webhooks To avoid having to poll the API for changes the system supports callbacks (webhooks). A webhook is a call from Kodmyran Commerce to an external party whenever a pre-determined condition occurs within Kodmyran Commerce. They are typically triggered as the result of a new object or changes to an existing object. For the integration API webhooks, a 200 OK response will indicate that the change was accepted by the consuming system leading to those events being freed from the synchronization view. Unlike the entity API webhooks a single integration webhook may contain many entities/types to act upon. The integration API is subject to a different timeout compared to the entity API and will allow processing for about 120 seconds. The system will never make multiple simultaneous calls for the same webhook, they will be executed in a single-threaded fashion one by one. For the integration API a single webhook call may contain multiple objects, in that case they should always be executed in the order received. 1

Synchronization views Kodmyran Commerce has support for a wide variety of synchronization patterns, for the integration API a synchronization view should be used. A synchronization view is a special type of view used by Kodmyran Commerce to know which objects and changes that belong to which integration. If an entry exists in the view matching the newly updated object, information is added to the synchronization log. When requested, the synchronization log is sent in batches to the consumer which applies them in order and gives a 200 OK message back to signal it accepted the log entry batch. If the call fails (response is non 200) the call will be re-attempted a number of times, and after a finite number of attempts the synchronization will enter a paused state. Endpoint The integration API is available at the endpoint: https://testaccount.shop4sale.se/admin/api/integrate The integration endpoint is the main method for integrating downwards in the stack, towards external systems such as webshops. It is designed to synchronize specific types of objects and in general simplify the integration as much as possible by providing a stream of events that the remote system can execute to stay in sync with Kodmyran Commerce. The events received must be executed in the order received. The downstream system may also submit new orders, users and products into Kodmyran Commerce. Products and users can be updated after the initial submission but orders are blocked from updating once submitted. The integration API can be considerad a simplified subset of the entity API Synchronization pattern The synchronization pattern for the integration API is essentially a matter of processing a list of events in order. If an object is changed twice before the remote system has a chance to process the change it will only see the last event, the first event will be overwritten by the second but executed in the same log position as the first event. Each event has a unique increasing counter that will not reset unless a restore operation is done on the Kodmyran Commerce side. 2

Each integration has its own dedicated (virtual) synchronization view and can be at different positions in the log at any given time. The very first call you typically need to make is to create your dedicated synchronization view. During the view creation you will be provided with a view-id/hash that all other calls in the integration API require, in addition to the API key. Kodmyran Commerce will push changes to the remote system shortly after a change occured, if a communication error occur the events will be retried several times with a time interval before giving up. If the synchronization gives up the webhooks interface will be paused. Unlike the full entity API the callbacks are fully stateful and persisted to database to reduce the need for full synchronizations to an absolute minimum, in fact only very severe error conditions can cause the sync to be completely broken. We recommend recording the event log counter provided with each synchronization view log entry in your debug logs for easier troubleshooting on the remote system. Full resynchronization Sometimes there can be a need for a full resynchronization, either because the systems have lost synchronization (e.g. after a restore) or because the downstream system has not been initialized yet (brand new). The downstream system can request a full resynchronization which will empty the current synchronization view, and then copy a reference for every user and product into the view (that are mapped to that store). The synchronization will then proceed normally and slowly get the two systems back in sync. Note that order data is never synchronized back to the remote system. Recommended method First time setup: Create a new synchronization view and setup the callback URL. Do this only once or provide a button/trigger to allow the user to re-create/reinitialize the view if required. Note that the default settings in Kodmyran Commerce do not allow updating a synchronization view after initial creation. The provided callback will be requested as soon as there are events available. The callback should process all events in order and once completed terminate with a HTTP 200 OK message. The request will always be a HTTP POST operation. The callback handler should NOT try to add new objects to Kodmyran Commerce within the callback session. Sending new orders, users and products to Kodmyran Commerce is typically done through a job run from cron or a similar setup on the remote system. It can 3

also be done by utilizing webhooks from the webshop to call a script, however this must usually be complemented by a cron style job anyway as webhooks are not usually 100% reliable. The important thing is that this is not done from within the Kodmyran Commerce callback. Because of this it is assumed that the webshop can handle inventory levels on its own as it will not receive a callback for stock levels it itself is the reason for. The exception is structural products and composite warehouses which will incur an inventory callback regardless. The consuming system must have logic in place that prevents an incoming synchronization from Kodmyran Commerce to occur at the same time as a sending new/changed users, products and orders to Kodmyran Commerce. Without a mutually exclusive lock it is possible for the two systems to get out of sync with regards to stock levels. Processing the callback handler change list The change list contains a meta header describing how many events there are in the log in total and the amount of entries in the current callback block. The callback block itself is a list of entries with four fields each: The sync log ID, this is a unique number that is ever increasing. This number may not be consecutive as events that do not pertain to this integration are not sent there (leaving a gap). The timestamp in UTC when the original log entry was made. This can be used for statistics about e.g. how long delay there is between change and apply. It does not serve any function otherwise. The type of log entry. The object itself. There are currently four types of log entries: Product, this is a product object containing information about pricing, names, etc. User, this is a user object with address information about a customer Order, contains the status of an order. Fields included are the current status, the order rows, delivery information and payment references etc. Inventory, changes to inventory are reported separately from the product object as this can change much more frequently than the above fields. On some platforms, this avoids a costly update and cache invalidation cycle for products. The format of each structure is identical to the format used when submitting new data as described in the next section. 4

If the log can be fully processed the response should be set to 200 OK, in which case Kodmyran Commerce will assume the operation completed successfully and move the pointer in the log forward. The completed entries will be freed from Kodmyran Commerce automatically. If the remote system processing logic encounters a change type it does not recognize it should just skip that entry and continue with the next one. This ensures future compatibility when additional types are added to the protocol. Example outbound request from Kodmyran Commerce to a remote system: meta version: "6.0.0", syncview: 11, operations_in_queue: 25, operations_in_request: 2, callback operations: [ syncid: 6081, timestamp: "2017-05-31T10:19:36+02:00", type: "inventory", obj: sku: "OMX934", prodno: 8113, warehouse: [ warehouseid: 1 name: "Centrallager", instock: 18, available: 6, warehouseid: 2 name: "BigStore", instock: 2, available: 2 ], syncid: 6082, timestamp: "2017-05-31T10:22:12+02:00", type: "product", obj: 5

]... Validating the webhook All webhooks sent through the integration API includes a HTTP header field, X-Commerce-Signature, that contains a signature that you can validate to ensure the request has not been tampered with. The signature is a SHA1 hash over the entire JSON data prefixed by a shared secret set up during initial registration of the synchronization view. Sending new orders, users and products To update or create new objects in Kodmyran Commerce you make a HTTP POST operation to one of the below endpoints. Operations other than POST are denied except for deleting (de-activating) a product which uses the HTTP DELETE operation. We recommend synchronizing using the order: product, user, order as orders are generally dependent upon a user. Orders are also commonly dependent upon products making orders the last type of object to sync. Delete product When you call the DELETE method of an entity that entity will undergo a reference check. If references are found the deletion will be denied. This matches the behavior of the low-level framework. You need to specify one or more selection keys, prodno takes precendence, followed by sku, and lastly gtin. The service will respond with a HTTP 200 message if the deletion was successful and a standard callstatus field. Request: DELETE https://testaccount.shop4sale.se/admin/api/integrate/product HTTP/1.0 Content-Type: application/json X-API-Key: 6c38acfe12cc8192b prodno: 1092, sku: "XYZ123", 6

gtin: "7856321289371" Response: callstatus: "OK", message: "No error" Create/Update product Endpoint: https://testaccount.shop4sale.se/admin/api/integrate/product When sending a new product to Kodmyran Commerce the initial warehouse levels will be respected and added to the inventory tables. When sending warehouse levels for existing products the stock level will be silently ignored unless explictly configured in Kodmyran Commerce to respect the level. Example object: prodno: 2020, producttype: "item", displayid: "MX-1892", gtin: "714346319138", name: [ en: "Kermit the frog", sv: "Grodan Kermit" ], association: 0, assoctext1: "Green", assoctext2: "", assoctext3: "", price: 145.00, orgprice: 145.00, currency: "SEK", vatrate: 25, weight: 800, stock: [ warehouseid: 2, 7

, available: 8, instock: 10, threshold: 2, location: "X2-04" warehouseid: 3, available: 0, instock: 0, threshold: 2, location: "B36" ], suppliers: [ name: "SoftToys Inc", supplierid: 8, supplierpn: "KMIT34", purchaseprice: 4, primarysupplier: true, currency: "USD" ], prices: [ currency: "SEK", price: 145.00, orgprice: 145.00, agreementid: 0, validfrom: "", validto: "", currency: "EUR", price: 13.00, orgprice: 13.00, agreementid: 0, validfrom: "", validto: "2017-10-28T23:59:59+01:00", ] note: "", customfields: 8

Create/Update user Endpoint: https://testaccount.shop4sale.se/admin/api/integrate/user Example object: userid: 1831, username: "kalle.anka@kodmyran.se", email: "kalle.anka@kodmyran.se", orgno: "420903-8596", language: "sv", newsletter: true, smsnotification: true, invoiceaddress: company: "", firstname: "Kalle", lastname: "Anka", address1: "Storgatan 3", address2: "", zipcode: "12345", city: "Ankeborg", country: "SE", deliveryaddress: company: "Joakim von Anka AB", firstname: "Joakim", lastname: "von Anka", address1: "Penningkullen 1", address2: "", zipcode: "12345", city: "Ankeborg", country: "SE", note: "" Create order Endpoint: https://testaccount.shop4sale.se/admin/api/integrate/order 9

Example object: userid: 1831, orderid: 902, ordertimestamp: "2017-05-31T09:18:36+02:00". responsibleadminuserid: 1, storeid: 1, warehouseid: 1, customerreference: "CCX-3601", paymentmethod: "Klarna", paymentreference: "81561452961561", paymentdata: 365, freightmethod: "Express", currency: "SEK", language: "SV", invoiceaddress: company: "", firstname: "Kalle", lastname: "Anka", address1: "Storgatan 3", address2: "", zipcode: "12345", city: "Ankeborg", country: "SE", deliveryaddress: company: "Joakim von Anka AB", firstname: "Joakim", lastname: "von Anka", address1: "Penningkullen 1", address2: "", zipcode: "12345", city: "Ankeborg", country: "SE", comment: "", note: "", orderrows: [ sku: "MX-1892", name: "Kermit the frog", amount: 2, vatrate: 25, price: 140, discount: 0, 10

] discountmode: "abs" When sending new orders, it is important that the request includes a payment reference and the payment provider. This enables Kodmyran Commerce to be able to activate the payment at delivery time. For payment providers that may exist in multiple instances, such as Klarna, you should include the EID used in the request as well. For Klarna specifically the payment reference is the Klarna reservation number, the older format with a passive invoice ID is not supported. If you attempt to create a new order with the same orderid as a previous order the request will be denied. 11