book-icon
Featured Resources
birdies-case-study-image
Case Study
Birdies
See how Birdies improved their operations with ChannelApe all in the midst of peak season.
Read Story
The Definitive Guide to 3PL’s-min
eBook
The definitive guide to 3PL
Get the information and insights you need to make better-informed decisions for your business.
Download Now
Saysh Shoes-1
Case Study
Saysh
When Saysh saw a 1000% increase in order volume for their holiday sale, they successfully fulfilled every order—without overselling.
Read Story
Login
Book a Tour
iPaaS Integration Guide

How to successfully integrate a sales channel.

With a channel, you will create Orders and read fulfillments and inventory.

Background

You'll need a few things to successfully interact with our API and these values will be unique for each ChannelApe customer.

  • Business ID
  • Channel ID
  • API Token

Please reach out to support@channelape.com if you need help with account access for a specific customer.

Our APIs are rate limited so keep an eye out for 429 errors and exponentially backoff.

Notes

  • Additional Fields are custom data in the form of "key:value" pairs that exist on order level, line item level, fulfillment level, and refund level. You can use them to pass in any custom metadata not supported as named fields.

 

Setup

How to find your Business ID

  1. Login at https://app.channelape.io/
  2. Once logged in, in the main URL you'll see a path like this:
    https://app.channelape.io/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/orders
  3. The UUID in the URL is your businessId

 

How to generate an API Account/Token

  1. Login at https://app.channelape.io/
  2. Generate an API account (and token) for the business you are going to test with.
    1. You can find this in the left sidebar nav, under Business. 

      If you don't see Business in the left sidebar, email support@channelape.com and ask them to make your email address a Business Admin.

 

How to generate a Channel ID

  1. In the left sidebar nav, under Integrations, click Available tab and install a "Webhook Channel".
  2. Give it a name ie. "Shopify", use 300 for "Health Check Interval" and for the purpose of this guide put in any URL (ie. "https://www.google.com") for "Payload URL". This won't matter for this guide and is intended for another purpose.
  3. Click install once, and wait for page to refresh.


  4. Once installed, go to Integrations again in the sidebar and under installed, you'll see your new webhook channel. If you right click the icon and copy link address, you'll see the UUID ID in the URL: "https://app.channelape.com/channel/webhook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/update". This is the ChannelId you'll need to test with the whole time.

 

 

Orders

Create

  1. You'll want to create orders (POST Create order) in ChannelApe with an "OPEN" status.
    1. We'll then pick up the order and process and if successfully processed for fulfillment, status will change to IN_PROGRESS.

Close orders

  1. Please change the order status to CLOSED when Sales Channel closes the order. 
    1. PATCH on the order status will work here.

Cancel / Refund

  1. If Sales Channel cancels or refunds the order, please change the order status to CANCELED.

 

 

{
    "channelId": "1ebdea44-9709-46cc-a5d1-78a782de1dd0",
    "channelOrderId": "e741ec6f-538f-4820-9cc2-c8ec1da36811",
    "status": "OPEN",
    "alphabeticCurrencyCode": "USD",
    "totalPrice": "30.80",
    "subtotalPrice": "30.80",
    "totalTax": "1.97",
    "totalShippingPrice": "3.00",
    "totalShippingTax": "0.18",
    "totalGrams": "226.796",
    "purchasedAt": "2015-09-11T20:52:15.000Z",
    "customer": {
        "name": "Dan Nino",
        "firstName": "Dan",
        "lastName": "Nino",
        "email": "iomalte14@yopmail.com",
        "phone": "(570)555-1234",
        "shippingAddress": {
            "name": "Dan Nino",
            "firstName": "Dan",
            "lastName": "Nino",
            "company": "ChannelApe",
            "address1": "224 Wyoming Avenue",
            "address2": "Rear of 1st Floor",
            "city": "Scranton",
            "province": "Pennsylvania",
            "provinceCode": "PA",
            "country": "United States",
            "countryCode": "US",
            "postalCode": "18503",
            "phone": "(555)555-5555",
            "additionalFields": [
                {
                    "name": "shipping_address_id",
                    "value": "3425252"
                },
                {
                    "name": "note",
                    "value": "Leave with dog."
                }
            ]
        },
        "billingAddress": {
            "name": "Dan Nino",
            "firstName": "Dan",
            "lastName": "Nino",
            "company": "ChannelApe",
            "address1": "224 Wyoming Avenue",
            "address2": "Rear of 1st Floor",
            "city": "Scranton",
            "province": "Pennsylvania",
            "provinceCode": "PA",
            "country": "United States",
            "countryCode": "US",
            "postalCode": "18503",
            "phone": "(555)555-5555",
            "additionalFields": [
                {
                    "name": "billing_address_id",
                    "value": "897987466"
                },
                {
                    "name": "note",
                    "value": "Paid with PayPal"
                }
            ]
        },
        "additionalFields": [
            {
                "name": "FirstTimeCustomer",
                "value": "false"
            },
            {
                "name": "InternationalCustomer",
                "value": "false"
            }
        ]
    },
    "lineItems": [
        {
            "id": "52365397597450",
            "sku": "0Z-DAPL-Y6NE",
            "upc": "442806190",
            "price": "30.80",
            "shippingPrice": "3.00",
            "shippingTax": "0.18",
            "shippingMethod": "2nd Day Air",
            "quantity": 1,
            "title": "Metagenics Multigenics Intensive Care without Iron 180T",
            "vendor": "Metagenics",
            "grams": "226.796"
        }
    ],
    "additionalFields": [
        { 
            "name": "EarliestShipDate", 
            "value": "2015-09-14T07:15:36Z" 
        }
    ]
}

Fulfillments

Check for fulfillments

  1. You'll need to enumerate orders (GET Query orders by channel) to check for fulfillments but we have a few query parameters to make this easier/reduce load:
    1. status: set this to IN_PROGRESS
    2. updatedAtStartDate: set this to the last timestamp you queried in ISO 8601 format
  2. A fulfillment with a status of PENDING, NEW, BACKORDERED, or CANCELED is not fulfilled; you'll want to make sure the status is OPEN and there is at least a trackingNumber on it

Acknowledge Fulfillment

  1. Please change the fulfillment status to SUCCESS after you successfully post it to the sales channel. 
    1. You should PATCH to update the entire fulfillments list on the order level as there is no fulfillments subresource at this time. You cannot just PATCH status and must resend the entire list.
{
"fulfillments": [
        {
            "id": "94938",
            "status": "SUCCESS",
            "shippingCompany": "UPS",
            "shippingMethod": "SecondDay",
            "trackingNumber": "AF335244",
            "shippedAt": "2015-09-11T21:52:15.000Z",
            "lineItems": [
                {
                    "id": "52365397597450",
                    "sku": "0Z-DAPL-Y6NE",
                    "upc": "442806190",
                    "price": "30.80",
                    "shippingPrice": "3.00",
                    "shippingTax": "0.18",
                    "shippingMethod": "2nd Day Air",
                    "quantity": 1,
                    "title": "Metagenics Multigenics Intensive Care without Iron 180T",
                    "vendor": "Metagenics",
                    "grams": "226.796",
                    "additionalFields": [
                        {
                            "name": "QuantityShipped",
                            "value": "1"
                        }
                    ]
                }
            ],
            "additionalFields": [
                {
                    "name": "WarehouseID",
                    "value": "CA-34"
                }
            ]
        }
    ]
}

Inventory

Get current inventory by location, status and SKU

  1. You'll need access to a business within the ChannelApe webapp that has administrator access to both settings and business intelligence.
  2. Once logged in, go to Inventory > List in the left sidebar.
  3. Once the list loads, go to the three dot menu for "Inventory List" and go to "Explore from here"

    Screen Cast 2022-03-03 at 11.41.57 AM


  4. Once the "Explore from here" loads, customize the output the way you'd like with fields and columns or to use as is, go to the cog menu and click Save and Schedule.
    Screen Cast 2022-03-03 at 11.44.02 AM

  5. Give the report a title and save it.
    Screen Shot 2022-03-03 at 11.44.33 AM


  6. Once saved, you'll now see the report. Click the gear icon in the top right to schedule to S3, FTP, or other location and pick the schedule of when you'd like this updated.

    Screen Cast 2022-03-03 at 11.45.27 AM

  7. The status that should be used for almost all Sales Channels is "Available to Promise" ie. ATP
    1. ATP accounts for all committed inventory, inbounds, reserves and on holds automatically.
    2. The location that should normally be used is the "Virtual Sales Channel". ChannelApe maintains a Virtual Sales Channel for most customers with multiple warehouse locations making it easier for you as the integrator to only have to use that location for ATP inventory.