Custom Sidebar Sections
Overview
Custom sidebar sections let you display data from external systems directly in the ticket sidebar. When an agent opens a ticket, There There calls your HTTP endpoint with the customer's email address, and the response is rendered as a collapsible section below the ticket details.
This is useful for showing contextual information from your own systems: subscription details from your billing platform, recent orders from your e-commerce backend, or account status from your CRM.
Creating a custom sidebar section
Go to Settings > Custom Sidebar Sections and click to add a new section.
- Title: The heading shown in the ticket sidebar (e.g., "Billing Info", "Account Details").
- Endpoint URL: The URL of your HTTP endpoint that returns the data.
- Secret: A shared secret used to sign requests so your endpoint can verify they come from There There. A strong key is generated automatically, but you can set your own (minimum 8 characters).
- Channels: Select which channels this section appears in. A section only shows up on tickets from its assigned channels.
How it works
When an agent opens a ticket, There There sends a POST request to your endpoint with the customer's email address:
POST https://your-endpoint.example.com
Content-Type: application/json
{
"email": "customer@example.com"
}
Every request includes an X-There-There-Signature header containing an HMAC-SHA256 hash of the request body, signed with your shared secret. Use this to verify the request is genuine.
Your endpoint should respond with a JSON object containing a data array:
{
"data": [
{ "name": "Plan", "value": "Pro", "type": "markdown" },
{ "name": "MRR", "value": 49.99, "type": "numeric" },
{ "name": "Member since", "value": "2025-06-15T00:00:00Z", "type": "date" },
{ "name": "Active", "value": true, "type": "boolean" },
{ "name": "Dashboard", "value": "https://app.example.com/users/123", "type": "url" }
]
}
Data types
Each item in the data array has a name, value, and type. The type controls how the value is displayed:
- markdown: Text, with support for basic markdown (links, bold, italic).
- numeric: A number, formatted with locale-appropriate separators.
- date: An ISO 8601 datetime string, displayed as a formatted date.
- boolean: A true/false value, shown as a checkmark or X icon.
- url: A clickable link that opens in a new tab.
Testing
Before enabling a section in production, use the Test button in the settings page. This sends a test request to your endpoint with test@example.com as the email and shows you the raw HTTP response. You can verify the response format is correct and the data renders as expected.
Caching
Responses are cached for 5 minutes per contact per section. If the same agent opens the same ticket again within that window, There There serves the cached data instead of calling your endpoint again.
Error handling and auto-disable
If your endpoint fails (returns an error or times out), There There tracks consecutive failures. After 10 consecutive failures, the section is automatically disabled and the workspace owner receives an email notification.
You can re-enable a disabled section from the settings page. Re-enabling resets the failure counter.
Requests have a 2-second connection timeout and a 3-second total timeout to prevent slow endpoints from blocking the ticket view.
Verifying request signatures
To verify that a request genuinely comes from There There, compute the HMAC-SHA256 hash of the raw request body using your shared secret, and compare it to the X-There-There-Signature header.
$signature = hash_hmac('sha256', $request->getContent(), $secret);
$valid = hash_equals($signature, $request->header('X-There-There-Signature'));