using System;
using System.Collections.Generic;
using com.ultracart.admin.v2.Api;
using com.ultracart.admin.v2.Model;
namespace SdkSample.webhook
{
public class InsertWebhook
{
public static void Execute()
{
/*
* Adds a new webhook on the account. If you add a new webhook with the authentication_type set to basic, but
* do not specify the basic_username and basic_password, UltraCart will automatically generate random ones and
* return them. This allows your application to have simpler logic on the setup of a secure webhook.
*
* Event Category Event Name Description
* auto_order auto_order_cancel Fired when an auto order is canceled
* auto_order auto_order_create Fired when an auto order is created
* auto_order auto_order_decline Fired when an auto order is declined
* auto_order auto_order_disable Fired when an auto order is disabled
* auto_order auto_order_preshipment Fired when an auto order generates a new pre-shipment notice
* auto_order auto_order_rebill Fired when an auto order is rebilled
* auto_order auto_order_update Fired when an auto order is updated
* chargeback chargeback_create Fired when a chargeback is created
* chargeback chargeback_delete Fired when a chargeback is deleted
* chargeback chargeback_update Fired when a chargeback is updated
* checkout checkout_cart_abandon Fired when a cart is abandoned
* checkout checkout_cart_send_return_email Fired when a return email should be sent to a customer
* customer customer_create Fired when a customer profile is created.
* customer customer_delete Fired when a customer profile is deleted.
* customer customer_update Fired when a customer profile is updated.
* fulfillment fulfillment_hold Fired when an order is held for review
* fulfillment fulfillment_transmit Fired to transmit an order to the fulfillment house
* item item_create Fired when a new item is created.
* item item_delete Fired when an item is deleted.
* item item_update Fired when an item is updated.
* order order_abandon_recovery Fired when a previously abandoned cart turns into an order
* order order_create Fired when an order is placed
* order order_delete Fired when an order is deleted
* order order_payment_failed Fired when a payment fails
* order order_payment_process Fired when a payment is processed
* order order_refund Fired when an order is refunded
* order order_reject Fired when an order is rejected
* order order_s3_invoice Fired when an invoice PDF is stored in S3 bucket
* order order_s3_packing_slip Fired when a packing slip PDF is stored in an S3 bucket
* order order_ship Fired when an order is shipped
* order order_ship_delivered Fired when an order has a shipment delivered
* order order_ship_expected Fired when an order has an expected delivery date
* order order_ship_out_for_delivery Fired when an order has a shipment out for delivery
* order order_stage_change Fired when an order stage changes
* order order_update Fired when an order is edited
* storefront screen_recording Fired when a screen recording is created
* user user_create Fired when a user is created
* user user_delete Fired when a user is deleted
* user user_login Fired when a user logs in
* user user_update Fired when a user is updated
* workflow_task workflow_task_create Fired when a workflow task is created
* workflow_task workflow_task_delete Fired when a workflow task is deleted
* workflow_task workflow_task_update Fired when a workflow task is updated
*
* Note: Each event uses the same expansions as the event category. To see a list of possible expansion values,
* visit www.ultracart.com/api/. Order Expansions (https://www.ultracart.com/api/#resource_order.html) are listed
* below because most webhooks are for order events.
* Order Expansion:
* affiliate auto_order billing checkout
* affiliate.ledger channel_partner coupon customer_profile
* digital_order edi fraud_score gift
* gift_certificate internal item linked_shipment
* marketing payment payment.transaction point_of_sale
* quote salesforce shipping shipping.tracking_number_details
* summary taxes utms
*
* Note: The WebhookEventSubscription.event_ruler field is processed with the AWS Event Ruler library to filter down
* events to just what you want. If you wish to employ a ruler filter, see https://github.com/aws/event-ruler
* for syntax examples. You'll need to apply the aws syntax against the UltraCart object models. Contact UltraCart
* support if you need assistance creating the proper ruler expression.
*
*
* Possible Errors:
*/
WebhookApi webhookApi = new WebhookApi(Constants.ApiKey);
Webhook webhook = new Webhook();
webhook.WebhookUrl = "https://www.mywebiste.com/page/to/call/when/this/webhook/fires.php"; // Must be HTTPS if customer related information is being delivered.
webhook.AuthenticationType = Webhook.AuthenticationTypeEnum.Basic; // "basic","none","api user","aws iam"
webhook.BasicUsername = "george";
webhook.BasicPassword = "LlamaLlamaRedPajama";
webhook.MaximumEvents = 10;
webhook.MaximumSize = 5242880; // 5 MB is pretty chunky.
webhook.ApiVersion = Webhook.ApiVersionEnum._20170301; // this is our only API version so far.
webhook.CompressEvents = true; // compress events with gzip, then base64 encode them as a string.
WebhookEventSubscription eventSub1 = new WebhookEventSubscription();
eventSub1.EventName = "order_create";
eventSub1.EventDescription = "when an order is placed";
eventSub1.Expansion = "shipping,billing,item,coupon,summary"; // whatever you need.
eventSub1.EventRuler = null; // no filtering. we want all objects.
eventSub1.Comments = "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.";
WebhookEventSubscription eventSub2 = new WebhookEventSubscription();
eventSub2.EventName = "order_update";
eventSub2.EventDescription = "when an order is modified";
eventSub2.Expansion = "shipping,billing,item,coupon,summary"; // whatever you need.
eventSub2.EventRuler = null; // no filtering. we want all objects.
eventSub2.Comments = "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.";
WebhookEventSubscription eventSub3 = new WebhookEventSubscription();
eventSub3.EventName = "order_delete";
eventSub3.EventDescription = "when an order is modified";
eventSub3.Expansion = ""; // don't need any expansion on delete. only need to know the order_id
eventSub3.EventRuler = null; // no filtering. we want all objects.
eventSub3.Comments = "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.";
WebhookEventCategory eventCategory1 = new WebhookEventCategory();
eventCategory1.EventCategory = "order";
eventCategory1.Events = new List<WebhookEventSubscription> { eventSub1, eventSub2, eventSub3 };
// apiResponse.Webhook will return the newly created webhook.
WebhookResponse apiResponse = webhookApi.InsertWebhook(webhook, false);
if (apiResponse.Error != null)
{
Console.Error.WriteLine(apiResponse.Error.DeveloperMessage);
Console.Error.WriteLine(apiResponse.Error.UserMessage);
Environment.Exit(1);
}
Webhook createdWebhook = apiResponse.Webhook;
// TODO - store the webhook oid in case you ever need to make changes.
// This should equal what you submitted, plus contain much new information
Console.WriteLine(createdWebhook.ToString());
}
}
}
package webhook;
import com.ultracart.admin.v2.WebhookApi;
import com.ultracart.admin.v2.models.Webhook;
import com.ultracart.admin.v2.models.WebhookEventCategory;
import com.ultracart.admin.v2.models.WebhookEventSubscription;
import com.ultracart.admin.v2.models.WebhookResponse;
import com.ultracart.admin.v2.util.ApiException;
import common.Constants;
import java.util.ArrayList;
import java.util.List;
public class InsertWebhook {
public static void execute() {
/*
* Adds a new webhook on the account. If you add a new webhook with the authentication_type set to basic, but
* do not specify the basic_username and basic_password, UltraCart will automatically generate random ones and
* return them. This allows your application to have simpler logic on the setup of a secure webhook.
*
* Event Category Event Name Description
* [Full event list from original comment preserved]
*
* Note: Each event uses the same expansions as the event category. To see a list of possible expansion values,
* visit www.ultracart.com/api/. Order Expansions (https://www.ultracart.com/api/#resource_order.html) are listed
* below because most webhooks are for order events.
* Order Expansion:
* [Expansion list from original comment preserved]
*
* Note: The WebhookEventSubscription.event_ruler field is processed with the AWS Event Ruler library to filter down
* events to just what you want. If you wish to employ a ruler filter, see https://github.com/aws/event-ruler
* for syntax examples. You'll need to apply the aws syntax against the UltraCart object models. Contact UltraCart
* support if you need assistance creating the proper ruler expression.
*
* Possible Errors:
*/
WebhookApi webhookApi = new WebhookApi(Constants.API_KEY);
Webhook webhook = new Webhook();
webhook.setWebhookUrl("https://www.mywebiste.com/page/to/call/when/this/webhook/fires.php"); // Must be HTTPS if customer related information is being delivered.
webhook.setAuthenticationType(Webhook.AuthenticationTypeEnum.BASIC); // "basic","none","api user","aws iam"
webhook.setBasicUsername("george");
webhook.setBasicPassword("LlamaLlamaRedPajama");
webhook.setMaximumEvents(10);
webhook.setMaximumSize(5242880); // 5 MB is pretty chunky.
webhook.setApiVersion(Webhook.ApiVersionEnum._2017_03_01); // this is our only API version so far.
webhook.setCompressEvents(true); // compress events with gzip, then base64 encode them as a string.
WebhookEventSubscription eventSub1 = new WebhookEventSubscription();
eventSub1.setEventName("order_create");
eventSub1.setEventDescription("when an order is placed");
eventSub1.setExpansion("shipping,billing,item,coupon,summary"); // whatever you need.
eventSub1.setEventRuler(null); // no filtering. we want all objects.
eventSub1.setComments("Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.");
WebhookEventSubscription eventSub2 = new WebhookEventSubscription();
eventSub2.setEventName("order_update");
eventSub2.setEventDescription("when an order is modified");
eventSub2.setExpansion("shipping,billing,item,coupon,summary"); // whatever you need.
eventSub2.setEventRuler(null); // no filtering. we want all objects.
eventSub2.setComments("Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.");
WebhookEventSubscription eventSub3 = new WebhookEventSubscription();
eventSub3.setEventName("order_delete");
eventSub3.setEventDescription("when an order is modified");
eventSub3.setExpansion(""); // don't need any expansion on delete. only need to know the order_id
eventSub3.setEventRuler(null); // no filtering. we want all objects.
eventSub3.setComments("Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.");
WebhookEventCategory eventCategory1 = new WebhookEventCategory();
eventCategory1.setEventCategory("order");
List<WebhookEventSubscription> events = new ArrayList<>();
events.add(eventSub1);
events.add(eventSub2);
events.add(eventSub3);
eventCategory1.setEvents(events);
// apiResponse.getWebhook() will return the newly created webhook.
try {
WebhookResponse apiResponse = webhookApi.insertWebhook(webhook, false);
if (apiResponse.getError() != null) {
System.err.println(apiResponse.getError().getDeveloperMessage());
System.err.println(apiResponse.getError().getUserMessage());
System.exit(1);
}
Webhook createdWebhook = apiResponse.getWebhook();
// TODO - store the webhook oid in case you ever need to make changes.
// This should equal what you submitted, plus contain much new information
System.out.println(createdWebhook.toString());
} catch (ApiException e) {
System.err.println("API Exception occurred: " + e.getMessage());
e.printStackTrace();
System.exit(1);
}
}
}
import {webhookApi} from '../api.js';
export class InsertWebhook {
/**
* Adds a new webhook on the account. If you add a new webhook with the authentication_type set to basic, but
* do not specify the basic_username and basic_password, UltraCart will automatically generate random ones and
* return them. This allows your application to have simpler logic on the setup of a secure webhook.
*
* Event Categories and Events:
*
* auto_order:
* - auto_order_cancel Fired when an auto order is canceled
* - auto_order_create Fired when an auto order is created
* - auto_order_decline Fired when an auto order is declined
* - auto_order_disable Fired when an auto order is disabled
* - auto_order_preshipment Fired when an auto order generates a new pre-shipment notice
* - auto_order_rebill Fired when an auto order is rebilled
* - auto_order_update Fired when an auto order is updated
*
* chargeback:
* - chargeback_create Fired when a chargeback is created
* - chargeback_delete Fired when a chargeback is deleted
* - chargeback_update Fired when a chargeback is updated
*
* checkout:
* - checkout_cart_abandon Fired when a cart is abandoned
* - checkout_cart_send_return_email Fired when a return email should be sent to a customer
*
* customer:
* - customer_create Fired when a customer profile is created
* - customer_delete Fired when a customer profile is deleted
* - customer_update Fired when a customer profile is updated
*
* fulfillment:
* - fulfillment_hold Fired when an order is held for review
* - fulfillment_transmit Fired to transmit an order to the fulfillment house
*
* item:
* - item_create Fired when a new item is created
* - item_delete Fired when an item is deleted
* - item_update Fired when an item is updated
*
* order:
* - order_abandon_recovery Fired when a previously abandoned cart turns into an order
* - order_create Fired when an order is placed
* - order_delete Fired when an order is deleted
* - order_payment_failed Fired when a payment fails
* - order_payment_process Fired when a payment is processed
* - order_refund Fired when an order is refunded
* - order_reject Fired when an order is rejected
* - order_s3_invoice Fired when an invoice PDF is stored in S3 bucket
* - order_s3_packing_slip Fired when a packing slip PDF is stored in an S3 bucket
* - order_ship Fired when an order is shipped
* - order_ship_delivered Fired when an order has a shipment delivered
* - order_ship_expected Fired when an order has an expected delivery date
* - order_ship_out_for_delivery Fired when an order has a shipment out for delivery
* - order_stage_change Fired when an order stage changes
* - order_update Fired when an order is edited
*
* storefront:
* - screen_recording Fired when a screen recording is created
*
* user:
* - user_create Fired when a user is created
* - user_delete Fired when a user is deleted
* - user_login Fired when a user logs in
* - user_update Fired when a user is updated
*
* workflow_task:
* - workflow_task_create Fired when a workflow task is created
* - workflow_task_delete Fired when a workflow task is deleted
* - workflow_task_update Fired when a workflow task is updated
*
* Note: Each event uses the same expansions as the event category. To see a list of possible expansion values,
* visit www.ultracart.com/api/. Order Expansions (https://www.ultracart.com/api/#resource_order.html) are listed
* below because most webhooks are for order events.
*
* Order Expansion:
* - affiliate
* - auto_order
* - billing
* - checkout
* - affiliate.ledger
* - channel_partner
* - coupon
* - customer_profile
* - digital_order
* - edi
* - fraud_score
* - gift
* - gift_certificate
* - internal
* - item
* - linked_shipment
* - marketing
* - payment
* - payment.transaction
* - point_of_sale
* - quote
* - salesforce
* - shipping
* - shipping.tracking_number_details
* - summary
* - taxes
* - utms
*
* Note: The WebhookEventSubscription.event_ruler field is processed with the AWS Event Ruler library to filter down
* events to just what you want. If you wish to employ a ruler filter, see https://github.com/aws/event-ruler
* for syntax examples. You'll need to apply the aws syntax against the UltraCart object models. Contact UltraCart
* support if you need assistance creating the proper ruler expression.
*
* Possible Errors:
* (Specific error details may vary)
*/
static async execute() {
const webhook = {
webhook_url: "https://www.mywebiste.com/page/to/call/when/this/webhook/fires.php", // Must be HTTPS if customer related information is being delivered.
authentication_type: "basic", // "basic","none","api user","aws iam"
basic_username: "george",
basic_password: "LlamaLlamaRedPajama",
maximum_events: 10,
maximum_size: 5242880, // 5 MB is pretty chunky.
api_version: "2017-03-01", // this is our only API version so far.
compress_events: true // compress events with gzip, then base64 encode them as a string.
};
const eventSub1 = {
event_name: "order_create",
event_description: "when an order is placed",
expansion: "shipping,billing,item,coupon,summary", // whatever you need.
event_ruler: undefined, // no filtering. we want all objects.
comments: "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
};
const eventSub2 = {
event_name: "order_update",
event_description: "when an order is modified",
expansion: "shipping,billing,item,coupon,summary", // whatever you need.
event_ruler: undefined, // no filtering. we want all objects.
comments: "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
};
const eventSub3 = {
event_name: "order_delete",
event_description: "when an order is modified",
expansion: "", // don't need any expansion on delete. only need to know the order_id
event_ruler: undefined, // no filtering. we want all objects.
comments: "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
};
const eventCategory1 = {
event_category: "order",
events: [eventSub1, eventSub2, eventSub3]
};
try {
// apiResponse.webhook will return the newly created webhook.
const apiResponse = await new Promise((resolve, reject) => {
webhookApi.insertWebhook(webhook, {}, function (error, data, response) {
if (error) {
reject(error);
} else {
resolve(data, response);
}
});
});
if (apiResponse.error) {
console.error(apiResponse.error.developer_message);
console.error(apiResponse.error.user_message);
process.exit(1);
}
const createdWebhook = apiResponse.webhook;
// TODO - store the webhook oid in case you ever need to make changes.
// This should equal what you submitted, plus contain much new information
console.log(createdWebhook?.toString());
} catch (error) {
console.error('Error inserting webhook:', error);
process.exit(1);
}
}
}
// Optional: If you want to run this directly
if (require.main === module) {
InsertWebhook.execute().catch(console.error);
}
<?php
ini_set('display_errors', 1);
/*
Adds a new webhook on the account. If you add a new webhook with the authentication_type set to basic, but
do not specify the basic_username and basic_password, UltraCart will automatically generate random ones and
return them. This allows your application to have simpler logic on the setup of a secure webhook.
Event Category Event Name Description
auto_order auto_order_cancel Fired when an auto order is canceled
auto_order auto_order_create Fired when an auto order is created
auto_order auto_order_decline Fired when an auto order is declined
auto_order auto_order_disable Fired when an auto order is disabled
auto_order auto_order_preshipment Fired when an auto order generates a new pre-shipment notice
auto_order auto_order_rebill Fired when an auto order is rebilled
auto_order auto_order_update Fired when an auto order is updated
chargeback chargeback_create Fired when a chargeback is created
chargeback chargeback_delete Fired when a chargeback is deleted
chargeback chargeback_update Fired when a chargeback is updated
checkout checkout_cart_abandon Fired when a cart is abandoned
checkout checkout_cart_send_return_email Fired when a return email should be sent to a customer
customer customer_create Fired when a customer profile is created.
customer customer_delete Fired when a customer profile is deleted.
customer customer_update Fired when a customer profile is updated.
fulfillment fulfillment_hold Fired when an order is held for review
fulfillment fulfillment_transmit Fired to transmit an order to the fulfillment house
item item_create Fired when a new item is created.
item item_delete Fired when an item is deleted.
item item_update Fired when an item is updated.
order order_abandon_recovery Fired when a previously abandoned cart turns into an order
order order_create Fired when an order is placed
order order_delete Fired when an order is deleted
order order_payment_failed Fired when a payment fails
order order_payment_process Fired when a payment is processed
order order_refund Fired when an order is refunded
order order_reject Fired when an order is rejected
order order_s3_invoice Fired when an invoice PDF is stored in S3 bucket
order order_s3_packing_slip Fired when a packing slip PDF is stored in an S3 bucket
order order_ship Fired when an order is shipped
order order_ship_delivered Fired when an order has a shipment delivered
order order_ship_expected Fired when an order has an expected delivery date
order order_ship_out_for_delivery Fired when an order has a shipment out for delivery
order order_stage_change Fired when an order stage changes
order order_update Fired when an order is edited
storefront screen_recording Fired when a screen recording is created
user user_create Fired when a user is created
user user_delete Fired when a user is deleted
user user_login Fired when a user logs in
user user_update Fired when a user is updated
workflow_task workflow_task_create Fired when a workflow task is created
workflow_task workflow_task_delete Fired when a workflow task is deleted
workflow_task workflow_task_update Fired when a workflow task is updated
Note: Each event uses the same expansions as the event category. To see a list of possible expansion values,
visit www.ultracart.com/api/. Order Expansions (https://www.ultracart.com/api/#resource_order.html) are listed
below because most webhooks are for order events.
Order Expansion:
affiliate auto_order billing checkout
affiliate.ledger channel_partner coupon customer_profile
digital_order edi fraud_score gift
gift_certificate internal item linked_shipment
marketing payment payment.transaction point_of_sale
quote salesforce shipping shipping.tracking_number_details
summary taxes utms
Note: The WebhookEventSubscription.event_ruler field is processed with the AWS Event Ruler library to filter down
events to just what you want. If you wish to employ a ruler filter, see https://github.com/aws/event-ruler
for syntax examples. You'll need to apply the aws syntax against the UltraCart object models. Contact UltraCart
support if you need assistance creating the proper ruler expression.
Possible Errors:
*/
use ultracart\v2\api\WebhookApi;
use ultracart\v2\models\Webhook;
use ultracart\v2\models\WebhookEventCategory;
use ultracart\v2\models\WebhookEventSubscription;
require_once '../vendor/autoload.php';
require_once '../constants.php';
$webhook_api = WebhookApi::usingApiKey(Constants::API_KEY);
$webhook = new Webhook();
$webhook->setWebhookUrl("https://www.mywebiste.com/page/to/call/when/this/webhook/fires.php"); // Must be HTTPS if customer related information is being delivered.
$webhook->setAuthenticationType("basic"); // "basic","none","api user","aws iam"
$webhook->setBasicUsername("george");
$webhook->setBasicPassword("LlamaLlamaRedPajama");
$webhook->setMaximumEvents(10);
$webhook->setMaximumSize( 5242880); // 5 MB is pretty chunky.
$webhook->setApiVersion("2017-03-01"); // this is our only API version so far.
$webhook->setCompressEvents(true); // compress events with gzip, then base64 encode them as a string.
$event_sub1 = new WebhookEventSubscription();
$event_sub1->setEventName("order_create");
$event_sub1->setEventDescription("when an order is placed");
$event_sub1->setExpansion("shipping,billing,item,coupon,summary"); // whatever you need.
$event_sub1->setEventRuler(null); // no filtering. we want all objects.
$event_sub1->setComments("Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.");
$event_sub2 = new WebhookEventSubscription();
$event_sub2->setEventName("order_update");
$event_sub2->setEventDescription("when an order is modified");
$event_sub2->setExpansion("shipping,billing,item,coupon,summary"); // whatever you need.
$event_sub2->setEventRuler(null); // no filtering. we want all objects.
$event_sub2->setComments("Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.");
$event_sub3 = new WebhookEventSubscription();
$event_sub3->setEventName("order_delete");
$event_sub3->setEventDescription("when an order is modified");
$event_sub3->setExpansion(""); // don't need any expansion on delete. only need to know the order_id
$event_sub3->setEventRuler(null); // no filtering. we want all objects.
$event_sub3->setComments("Merchant specific comment, for example: Bobby needs this webhook for the Accounting department.");
$eventCategory1 = new WebhookEventCategory();
$eventCategory1->setEventCategory("order");
$eventCategory1->setEvents([$event_sub1, $event_sub2, $event_sub3]);
// api_response->getWebhook will return the newly created webhook.
$api_response = $webhook_api->insertWebhook($webhook, false);
if ($api_response->getError() != null) {
error_log($api_response->getError()->getDeveloperMessage());
error_log($api_response->getError()->getUserMessage());
exit();
}
$created_webhook = $api_response->getWebhook();
// TODO - store the webhook oid in case you ever need to make changes.
echo '<html lang="en"><body><pre>';
// This should equal what you submitted, plus contain much new information
var_dump($created_webhook);
echo '</pre></body></html>';
"""
Adds a new webhook on the account with multiple event subscriptions.
"""
from ultracart.apis import WebhookApi
from ultracart.models import Webhook, WebhookEventCategory, WebhookEventSubscription
from samples import api_client
def create_webhook():
webhook_api = WebhookApi(api_client())
# Configure webhook
webhook = Webhook(
webhook_url="https://www.mywebiste.com/page/to/call/when/this/webhook/fires.php",
authentication_type="basic",
basic_username="george",
basic_password="LlamaLlamaRedPajama",
maximum_events=10,
maximum_size=5242880, # 5 MB
api_version="2017-03-01",
compress_events=True
)
# Define event subscriptions
event_subs = [
WebhookEventSubscription(
event_name="order_create",
event_description="when an order is placed",
expansion="shipping,billing,item,coupon,summary",
event_ruler=None,
comments="Merchant specific comment about webhook"
),
WebhookEventSubscription(
event_name="order_update",
event_description="when an order is modified",
expansion="shipping,billing,item,coupon,summary",
event_ruler=None,
comments="Merchant specific comment about webhook"
),
WebhookEventSubscription(
event_name="order_delete",
event_description="when an order is deleted",
expansion="",
event_ruler=None,
comments="Merchant specific comment about webhook"
)
]
# Create event category
event_category = WebhookEventCategory(
event_category="order",
events=event_subs
)
# Insert webhook
api_response = webhook_api.insert_webhook(webhook, False)
if api_response.error:
print(f"Developer Message: {api_response.error.developer_message}")
print(f"User Message: {api_response.error.user_message}")
return None
return api_response.webhook
# Execute webhook creation
created_webhook = create_webhook()
if created_webhook:
print(created_webhook)
require 'ultracart_api'
require_relative '../constants'
# Adds a new webhook on the account. If you add a new webhook with the authentication_type set to basic, but
# do not specify the basic_username and basic_password, UltraCart will automatically generate random ones and
# return them. This allows your application to have simpler logic on the setup of a secure webhook.
#
# Event Category Event Name Description
# auto_order auto_order_cancel Fired when an auto order is canceled
# auto_order auto_order_create Fired when an auto order is created
# auto_order auto_order_decline Fired when an auto order is declined
# auto_order auto_order_disable Fired when an auto order is disabled
# auto_order auto_order_preshipment Fired when an auto order generates a new pre-shipment notice
# auto_order auto_order_rebill Fired when an auto order is rebilled
# auto_order auto_order_update Fired when an auto order is updated
# chargeback chargeback_create Fired when a chargeback is created
# chargeback chargeback_delete Fired when a chargeback is deleted
# chargeback chargeback_update Fired when a chargeback is updated
# checkout checkout_cart_abandon Fired when a cart is abandoned
# checkout checkout_cart_send_return_email Fired when a return email should be sent to a customer
# customer customer_create Fired when a customer profile is created.
# customer customer_delete Fired when a customer profile is deleted.
# customer customer_update Fired when a customer profile is updated.
# fulfillment fulfillment_hold Fired when an order is held for review
# fulfillment fulfillment_transmit Fired to transmit an order to the fulfillment house
# item item_create Fired when a new item is created.
# item item_delete Fired when an item is deleted.
# item item_update Fired when an item is updated.
# order order_abandon_recovery Fired when a previously abandoned cart turns into an order
# order order_create Fired when an order is placed
# order order_delete Fired when an order is deleted
# order order_payment_failed Fired when a payment fails
# order order_payment_process Fired when a payment is processed
# order order_refund Fired when an order is refunded
# order order_reject Fired when an order is rejected
# order order_s3_invoice Fired when an invoice PDF is stored in S3 bucket
# order order_s3_packing_slip Fired when a packing slip PDF is stored in an S3 bucket
# order order_ship Fired when an order is shipped
# order order_ship_delivered Fired when an order has a shipment delivered
# order order_ship_expected Fired when an order has an expected delivery date
# order order_ship_out_for_delivery Fired when an order has a shipment out for delivery
# order order_stage_change Fired when an order stage changes
# order order_update Fired when an order is edited
# storefront screen_recording Fired when a screen recording is created
# user user_create Fired when a user is created
# user user_delete Fired when a user is deleted
# user user_login Fired when a user logs in
# user user_update Fired when a user is updated
# workflow_task workflow_task_create Fired when a workflow task is created
# workflow_task workflow_task_delete Fired when a workflow task is deleted
# workflow_task workflow_task_update Fired when a workflow task is updated
#
# Note: Each event uses the same expansions as the event category. To see a list of possible expansion values,
# visit www.ultracart.com/api/. Order Expansions (https://www.ultracart.com/api/#resource_order.html) are listed
# below because most webhooks are for order events.
# Order Expansion:
# affiliate auto_order billing checkout
# affiliate.ledger channel_partner coupon customer_profile
# digital_order edi fraud_score gift
# gift_certificate internal item linked_shipment
# marketing payment payment.transaction point_of_sale
# quote salesforce shipping shipping.tracking_number_details
# summary taxes utms
#
# Note: The WebhookEventSubscription.event_ruler field is processed with the AWS Event Ruler library to filter down
# events to just what you want. If you wish to employ a ruler filter, see https://github.com/aws/event-ruler
# for syntax examples. You'll need to apply the aws syntax against the UltraCart object models. Contact UltraCart
# support if you need assistance creating the proper ruler expression.
webhook_api = UltracartClient::WebhookApi.new_using_api_key(Constants::API_KEY)
webhook = UltracartClient::Webhook.new
webhook.webhook_url = "https://www.mywebiste.com/page/to/call/when/this/webhook/fires.php" # Must be HTTPS if customer related information is being delivered.
webhook.authentication_type = "basic" # "basic","none","api user","aws iam"
webhook.basic_username = "george"
webhook.basic_password = "LlamaLlamaRedPajama"
webhook.maximum_events = 10
webhook.maximum_size = 5242880 # 5 MB is pretty chunky.
webhook.api_version = "2017-03-01" # this is our only API version so far.
webhook.compress_events = true # compress events with gzip, then base64 encode them as a string.
event_sub1 = UltracartClient::WebhookEventSubscription.new
event_sub1.event_name = "order_create"
event_sub1.event_description = "when an order is placed"
event_sub1.expansion = "shipping,billing,item,coupon,summary" # whatever you need.
event_sub1.event_ruler = nil # no filtering. we want all objects.
event_sub1.comments = "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
event_sub2 = UltracartClient::WebhookEventSubscription.new
event_sub2.event_name = "order_update"
event_sub2.event_description = "when an order is modified"
event_sub2.expansion = "shipping,billing,item,coupon,summary" # whatever you need.
event_sub2.event_ruler = nil # no filtering. we want all objects.
event_sub2.comments = "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
event_sub3 = UltracartClient::WebhookEventSubscription.new
event_sub3.event_name = "order_delete"
event_sub3.event_description = "when an order is modified"
event_sub3.expansion = "" # don't need any expansion on delete. only need to know the order_id
event_sub3.event_ruler = nil # no filtering. we want all objects.
event_sub3.comments = "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
event_category1 = UltracartClient::WebhookEventCategory.new
event_category1.event_category = "order"
event_category1.events = [event_sub1, event_sub2, event_sub3]
# api_response.webhook will return the newly created webhook.
api_response = webhook_api.insert_webhook(webhook, false)
if api_response.error
puts api_response.error.developer_message
puts api_response.error.user_message
exit
end
created_webhook = api_response.webhook
# TODO - store the webhook oid in case you ever need to make changes.
# This should equal what you submitted, plus contain much new information
puts created_webhook.inspect
import { webhookApi } from '../api';
import {
Webhook,
WebhookResponse,
WebhookEventSubscription,
WebhookEventCategory
} from 'ultracart_rest_api_v2_typescript';
export class InsertWebhook {
/**
* Adds a new webhook on the account. If you add a new webhook with the authentication_type set to basic, but
* do not specify the basic_username and basic_password, UltraCart will automatically generate random ones and
* return them. This allows your application to have simpler logic on the setup of a secure webhook.
*
* Event Categories and Events:
*
* auto_order:
* - auto_order_cancel Fired when an auto order is canceled
* - auto_order_create Fired when an auto order is created
* - auto_order_decline Fired when an auto order is declined
* - auto_order_disable Fired when an auto order is disabled
* - auto_order_preshipment Fired when an auto order generates a new pre-shipment notice
* - auto_order_rebill Fired when an auto order is rebilled
* - auto_order_update Fired when an auto order is updated
*
* chargeback:
* - chargeback_create Fired when a chargeback is created
* - chargeback_delete Fired when a chargeback is deleted
* - chargeback_update Fired when a chargeback is updated
*
* checkout:
* - checkout_cart_abandon Fired when a cart is abandoned
* - checkout_cart_send_return_email Fired when a return email should be sent to a customer
*
* customer:
* - customer_create Fired when a customer profile is created
* - customer_delete Fired when a customer profile is deleted
* - customer_update Fired when a customer profile is updated
*
* fulfillment:
* - fulfillment_hold Fired when an order is held for review
* - fulfillment_transmit Fired to transmit an order to the fulfillment house
*
* item:
* - item_create Fired when a new item is created
* - item_delete Fired when an item is deleted
* - item_update Fired when an item is updated
*
* order:
* - order_abandon_recovery Fired when a previously abandoned cart turns into an order
* - order_create Fired when an order is placed
* - order_delete Fired when an order is deleted
* - order_payment_failed Fired when a payment fails
* - order_payment_process Fired when a payment is processed
* - order_refund Fired when an order is refunded
* - order_reject Fired when an order is rejected
* - order_s3_invoice Fired when an invoice PDF is stored in S3 bucket
* - order_s3_packing_slip Fired when a packing slip PDF is stored in an S3 bucket
* - order_ship Fired when an order is shipped
* - order_ship_delivered Fired when an order has a shipment delivered
* - order_ship_expected Fired when an order has an expected delivery date
* - order_ship_out_for_delivery Fired when an order has a shipment out for delivery
* - order_stage_change Fired when an order stage changes
* - order_update Fired when an order is edited
*
* storefront:
* - screen_recording Fired when a screen recording is created
*
* user:
* - user_create Fired when a user is created
* - user_delete Fired when a user is deleted
* - user_login Fired when a user logs in
* - user_update Fired when a user is updated
*
* workflow_task:
* - workflow_task_create Fired when a workflow task is created
* - workflow_task_delete Fired when a workflow task is deleted
* - workflow_task_update Fired when a workflow task is updated
*
* Note: Each event uses the same expansions as the event category. To see a list of possible expansion values,
* visit www.ultracart.com/api/. Order Expansions (https://www.ultracart.com/api/#resource_order.html) are listed
* below because most webhooks are for order events.
*
* Order Expansion:
* - affiliate
* - auto_order
* - billing
* - checkout
* - affiliate.ledger
* - channel_partner
* - coupon
* - customer_profile
* - digital_order
* - edi
* - fraud_score
* - gift
* - gift_certificate
* - internal
* - item
* - linked_shipment
* - marketing
* - payment
* - payment.transaction
* - point_of_sale
* - quote
* - salesforce
* - shipping
* - shipping.tracking_number_details
* - summary
* - taxes
* - utms
*
* Note: The WebhookEventSubscription.event_ruler field is processed with the AWS Event Ruler library to filter down
* events to just what you want. If you wish to employ a ruler filter, see https://github.com/aws/event-ruler
* for syntax examples. You'll need to apply the aws syntax against the UltraCart object models. Contact UltraCart
* support if you need assistance creating the proper ruler expression.
*
* Possible Errors:
* (Specific error details may vary)
*/
public static async execute(): Promise<void> {
const webhook: Webhook = {
webhook_url: "https://www.mywebiste.com/page/to/call/when/this/webhook/fires.php", // Must be HTTPS if customer related information is being delivered.
authentication_type: "basic", // "basic","none","api user","aws iam"
basic_username: "george",
basic_password: "LlamaLlamaRedPajama",
maximum_events: 10,
maximum_size: 5242880, // 5 MB is pretty chunky.
api_version: "2017-03-01", // this is our only API version so far.
compress_events: true // compress events with gzip, then base64 encode them as a string.
};
const eventSub1: WebhookEventSubscription = {
event_name: "order_create",
event_description: "when an order is placed",
expansion: "shipping,billing,item,coupon,summary", // whatever you need.
event_ruler: undefined, // no filtering. we want all objects.
comments: "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
};
const eventSub2: WebhookEventSubscription = {
event_name: "order_update",
event_description: "when an order is modified",
expansion: "shipping,billing,item,coupon,summary", // whatever you need.
event_ruler: undefined, // no filtering. we want all objects.
comments: "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
};
const eventSub3: WebhookEventSubscription = {
event_name: "order_delete",
event_description: "when an order is modified",
expansion: "", // don't need any expansion on delete. only need to know the order_id
event_ruler: undefined, // no filtering. we want all objects.
comments: "Merchant specific comment, for example: Bobby needs this webhook for the Accounting department."
};
const eventCategory1: WebhookEventCategory = {
event_category: "order",
events: [eventSub1, eventSub2, eventSub3]
};
try {
// apiResponse.webhook will return the newly created webhook.
const apiResponse: WebhookResponse = await webhookApi.insertWebhook({webhook: webhook, placeholders: false});
if (apiResponse.error) {
console.error(apiResponse.error.developer_message);
console.error(apiResponse.error.user_message);
process.exit(1);
}
const createdWebhook = apiResponse.webhook;
// TODO - store the webhook oid in case you ever need to make changes.
// This should equal what you submitted, plus contain much new information
console.log(createdWebhook?.toString());
} catch (error) {
console.error('Error inserting webhook:', error);
process.exit(1);
}
}
}
// Optional: If you want to run this directly
if (require.main === module) {
InsertWebhook.execute().catch(console.error);
}