> For the complete documentation index, see [llms.txt](https://docs.withorbital.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.withorbital.com/basics/plays.md).

# Plays

## What are Webhooks? <a href="#what-are-webhooks-0" id="what-are-webhooks-0"></a>

Webhooks are user-defined HTTP callbacks that allow different systems to communicate with each other in real-time. When an event occurs in a source system, it sends an HTTP POST request to a predefined URL in the destination system, allowing for immediate data transfer and action.

***

## Webhooks for Inbound <a href="#webhooks-for-inbound-2" id="webhooks-for-inbound-2"></a>

Orbital webhook triggers are a way to initiate Orbital inbound workflows in real- time. When a webhook is triggered, it can activate a series of actions within Orbital, including:

* Data enrichments
* Customer engagements AI agent interactions
* Custom workflow processes

Orbital webhooks are highly scalable mechanisms designed to handle large volumes of real-time data processing. They enable synchronous operations, allowing you to process customer data and take action immediately as events occur in your other systems.

### Setting up Webhooks for Inbound <a href="#setting-up-webhooks-for-inbound-6" id="setting-up-webhooks-for-inbound-6"></a>

To configure a webhook in Orbital, follow these steps:

\
**1. Create a New Inbound Workflow**

* Log in to your Orbital account
* Navigate to the Inbound section
* Click on "Create New Inbound"
* Give your workflow a descriptive name

\
**2. Select Webhook as the Trigger Type**

* In the workflow editor, locate the trigger section
* Click on "Select Trigger"
* Choose "Webhook" from the available trigger types and edit Settings

  <figure><img src="https://assets.usepylon.com/e6cde654-d0d4-45d5-9eee-34263ece997e%2F1756836995311-Screenshot2025-09-02at11.45.31PM.png?Expires=253370764800&#x26;Signature=bnkVi19tWNOyycShfmhPZQFuXW2GYGdgCjeUMOGPWCd8VMVOIVyDoZmRbnlbbZLaZc11eZuS0LLmeMDjfN4~S0s0zvGiuAn~xq6Cvrvn7vR11gdpNf1yeHbE6y~yaAPZ6sas9BZbMZioLDIWo8D7FjimDdQN-2HdaPCIHepBbBSzBU-YkEUj-fum7Yx4RV3vTor6uRALy6YtShEN3gfuq8ljUXj0Cjj2R2VYfwd1ICe~CEwhbMeW8ks3KBEeeVOylS67yckir7i0r-lJJbnb87oSvDIyS2YNWfwNJo4Ofk33lKk19wUP598pUeORdR~QMb-egKMN3M29yxVWeG024Q__&#x26;Key-Pair-Id=K3NV4LZ47N8M46" alt=""><figcaption></figcaption></figure>
* Define your webhook schema (see below)
* Configure any additional webhook settings if required

\
**3. Defining Your Webhook Schema**

When setting up a webhook trigger, you must define the schema for the data you'll be sending:

* In the workflow trigger settings, define the expected JSON payload structure
* The schema can be nested, path to the field can be defined
* You can include as many fields as needed in your schema
* Each field should have a defined data type

<figure><img src="https://assets.usepylon.com/e6cde654-d0d4-45d5-9eee-34263ece997e%2F1756837442203-Screenshot2025-09-02at11.49.39PM.png?Expires=253370764800&#x26;Signature=SL11Uog5qavE~TI1cMtjxwXiLNboC6jR-HZIAHEzhQGz32jo59Eof29WeAnp7zGT7nL~rt6-rDG-Qi7y911gnLu0dWZP81PDoOcN5P-KIwwX8wILE30QffghzMRHAFfPRrdrpTF6BEgPcCtUMZtg-Nq6F-WvKu75uEsHP-1S1g6H-KrgMCFokyvAEfeFbkoQzuK-Q8sStcXG~Rmq6q8-ZOWw6wbWK9Yi24LuEivTMYHvteGTHo6WggNAU1AjwDM1WfkFWJmUXIO8~GACnrDlSkly~2lfC~4Z8awWuDeoCpAXnFXXWZ57p4Ic6FQU6brt51d09lEV6iDkhmgOV0tjUw__&#x26;Key-Pair-Id=K3NV4LZ47N8M46" alt="Screenshot 2025-09-02 at 11.49.39 PM.png"><figcaption></figcaption></figure>

<figure><img src="https://assets.usepylon.com/e6cde654-d0d4-45d5-9eee-34263ece997e%2F1756837546455-Screenshot2025-09-02at11.55.31PM.png?Expires=253370764800&#x26;Signature=vh~C28xAtK06Es1FcByxMk7bOkxJVsN8tZh~wdxxG~XUoVQN7Y9D-OQTwN5NRcnkuoJByPeCZDUZ-~Y3njeAyrsQfZqb-PQ~omcdkusWNFQ12Coxa-gUPpdudrsy5tVcpm0s76VFMkFRgZq6qdgKFomEM5UsNAM-j5t7jukpKIPM0oBwi6HorVBZwZ9~zzj8898X6Vd2QvvkavoHtZ0IDg-apk4anchTb5BgGh16A5ifavSR-oAECfvN0nMQLoB77wN7yMJ5GVSScR~TUZ5kIH0wbBDwuEI5eaR~7meqso-3-zEiSe1zVEijUEHYrOzzxaWqFdaBSUMGEjP3MFIYbQ__&#x26;Key-Pair-Id=K3NV4LZ47N8M46" alt=""><figcaption></figcaption></figure>

You can modify your webhook schema at any time by returning to the workflow trigger settings\
\
**4.** **Activate the Webhook and Publish the Workflow**

* Configure the subsequent steps in your workflow (enrichments, engagements, AI agents, etc.)
* Review your complete workflow
* Click "Activate" to enable the webhook
* Publish your workflow by clicking "Publish"<br>

**5.** **Obtain your Webhook URL**

After publishing the workflow, Orbital will generate a unique webhook URL for your workflow. This URL will be used to send data to Orbital and trigger your workflow.

* Locate the webhook URL in the workflow details
* Copy this URL to use in your source systems

The format will be: “app.withorbital.com/\<workspace-id>/\<webhook>ˮ

***

## Technical Implementation Details <a href="#technical-implementation-details-23" id="technical-implementation-details-23"></a>

### **Webhook URL Structure**

The webhook URL automatically identifies your:

* Orbital workspace
* Specific workflow

This means you don't need to include additional authentication parameters in your requests - the URL itself contains the necessary identification information<br>

### **Security Considerations**

* **Treat the URL as a secret**: The webhook URL contains built-in authentication identifiers and should be treated like an API key. Store it securely and never share it publicly.
* **Access control**: Only share the webhook URL with systems and personnel that need to trigger the workflow<br>

### **Protocol Requirements**

* **HTTPS only**: All webhook requests must be sent over HTTPS. HTTP requests will be rejected.
* **POST method**: Webhooks should be triggered using the HTTP POST method.
* **Content-Type header**: All requests must include the *Content-Type: application/json* header
* **JSON body**: The request body must be valid JSON format.

### **Request Format**

When triggering an Orbital webhook, send your data in the following format:

<figure><img src="https://assets.usepylon.com/e6cde654-d0d4-45d5-9eee-34263ece997e%2F1756838133386-Screenshot2025-09-03at12.05.21AM.png?Expires=253370764800&#x26;Signature=dsHKLeZ-x6OE6OE~EUgk0gYm-4d8Fq0hH8yixatzOo3yKKWto73Iq3CPYUS4mmxXg7qxSiTqIOH82ih4ExJyX2eEmnDZQzn9XanM965RSAOe0ppi0e5ggRun74RkZda51r0-p3f6fkKA1VNIAxXH4t4g1uPbuo8e~92oUzXamrtd8fSBW4XzbU2QaguUHDSE5Jd1OQToZnQDdfBndhh~Oh1wyEEVlw5coJL0eG7axYi2xBo7iNYJkPpGl7xDR7oUegJI2Ev2kTU7e3ViAEjhcH5XjD1vg9Q788aNMwkCX-aD1OQRsdFvnNf4qQ3CO9teLzAVcBo-SSQ-KoXz0cTDVQ__&#x26;Key-Pair-Id=K3NV4LZ47N8M46" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}

### **Important Payload Requirements**

* The JSON payload **must** exactly match the schema defined in your workflow trigger settings
* Nested JSON structures are not allowed - all values must be at the top level
* No additional keys or metadata should be included beyond what is defined in your schema
* Requests with payloads that don't match the defined schema will be rejected
  {% endhint %}

### Response Handling <a href="#response-handling-37" id="response-handling-37"></a>

Orbital webhooks return standard HTTP status codes:

* **200 OK**: The webhook was successfully received and the workflow was triggered.
* **400 Bad Request**: The request was improperly formatted.
* **401 Unauthorized**: The webhook URL is invalid or has been deactivated.
* **429 Too Many Requests**: You've exceeded the rate limit for your workspace.
* **500 Internal Server Error**: An error occurred while processing the webhook.

### Parallel Processing and Workflow Execution <a href="#parallel-processing-and-workflow-execution-40" id="parallel-processing-and-workflow-execution-40"></a>

* **Parallel Processing**: Webhook requests can be triggered in parallel and will be processed asynchronously.
* **No Guaranteed Ordering**: The order of execution is not guaranteed when multiple webhooks are triggered simultaneously.
* **Monitoring Runs**: Once a workflow is triggered, you can monitor its execution in the Orbital dashboard under the "Runs" section.

### Rate Limiting <a href="#rate-limiting-42" id="rate-limiting-42"></a>

Webhook requests are subject to rate limits based on your workspace:

* Each workspace has a specific limit on the number of webhook requests allowed per minute
* Exceeding this limit will result in a 429 Too Many Requests response
* Consider implementing backoff and retry logic in your systems for rate limit handling

### Best Practices <a href="#best-practices-45" id="best-practices-45"></a>

* **Payload Structure**
  * Keep your payload data structured and consistent
  * Include only necessary data to optimize performance
  * Use descriptive field names for easier mapping in Orbital workflows
* **Error Handling**
  * Implement retry logic in your source systems
  * Monitor webhook responses to ensure successful delivery Set up alerts for failed webhook deliveries
* **Testing**\
  Before implementing a webhook in Production
  * Test your webhook with sample data
  * Verify the workflow behaves as expected
  * Check that all downstream actions are correctly triggered

### Troubleshooting <a href="#troubleshooting-47" id="troubleshooting-47"></a>

Common Issues:

* **Webhook not triggering workflow**: Verify the workflow is published and the webhook is activated
* **Receiving error responses**: Check your payload format and ensure it matches the expected structure
* **Workflow not processing data**: Examine your workflow configuration for mapping errors
