Maverick Ticket Type Mappings
Overview
The Maverick ticket type mapping system allows you to manually configure how ticket categories from Maverick Payments are mapped to your Pulse ticket types. This gives you full control over ticket organization and eliminates automatic ticket type creation.
Why Use Manual Mapping?
Previous Auto-Creation Issues:
- Automatically created “Maverick: [Category]” ticket types
- Caused naming conflicts and database errors
- No user control over organization
Benefits of Manual Mapping:
- Map multiple Maverick categories to a single Pulse ticket type
- Use existing ticket types and workflows
- No duplicate ticket type creation
- Better integration with your support process
Configuration Steps
1. Access Integration Settings
Navigate to Admin → Settings → Integrations → Maverick
2. Configure Mappings
In the Ticket Type Mappings section, you’ll see a table with all Maverick categories:
| Maverick Category | Pulse Ticket Type | Category | Status | Actions |
|---|---|---|---|---|
| Chargebacks | [Dropdown] | [Dropdown] | Unmapped | [Save] |
| Account Changes | [Dropdown] | [Dropdown] | Mapped | [Delete] |
For each category:
- Select a Pulse ticket type from the dropdown
- Select the appropriate category classification
- Click the checkmark to save
- Status changes to “Mapped”
3. Sync Tickets
Once mappings are configured:
- Sync tickets from Maverick
- Tickets use your configured mappings
- Unmapped tickets use default “Unmapped Maverick Tickets” type
API Endpoints
List Mappings
GET /api/integrations/maverick/ticket-type-mappingsHeaders:
Authorization: Bearer {token}x-account-id: {accountId}
Response:
{ "data": [ { "id": 1, "maverickCategoryId": 123, "maverickCategoryName": "Chargebacks", "pulseTicketTypeId": "tt-xyz", "pulseCategoryEnum": "billing", "ticketType": { "name": "Chargeback Disputes", "category": "billing", "isActive": true } } ], "totalCount": 15}Create Mapping
POST /api/integrations/maverick/ticket-type-mappingsRequest Body:
{ "maverickCategoryId": 123, "maverickCategoryName": "Chargebacks", "pulseTicketTypeId": "tt-xyz", "pulseCategoryEnum": "billing"}Response:
{ "data": { /* Created mapping */ }, "message": "Ticket type mapping created successfully"}Update Mapping
PUT /api/integrations/maverick/ticket-type-mappingsRequest Body:
{ "id": 1, "pulseTicketTypeId": "tt-abc", "pulseCategoryEnum": "technical"}Delete Mapping
DELETE /api/integrations/maverick/ticket-type-mappings?id=1Get Categories with Status
GET /api/tickets/maverick/categoriesResponse:
{ "data": [ { "id": 123, "name": "Chargebacks", "group": "Risk", "mapping": { "id": 1, "pulseTicketTypeId": "tt-xyz", "pulseTicketTypeName": "Chargeback Disputes", "pulseCategoryEnum": "billing", "isMapped": true } } ], "mappedCount": 15, "unmappedCount": 34}System Warning Banner
When unmapped tickets are detected after a sync, a yellow warning banner appears at the top of the application:
Banner Shows:
- Number of unmapped tickets
- Message explaining the issue
- “Configure Mappings” button to open settings
- Dismiss button (X)
Behavior:
- Appears only when unmapped tickets exist
- Visible to account admins only
- Auto-dismisses when all categories are mapped
- Can be manually dismissed
Event: system_warning_maverick_unmapped_tickets
Ticket Sync Behavior
Mapped Categories
Tickets from mapped Maverick categories:
- Use the configured Pulse ticket type
- Inherit category from mapping
- Integrate with existing workflows
Unmapped Categories
Tickets from unmapped categories:
- Use default “Unmapped Maverick Tickets” type
- Category set to “technical”
- Appear at bottom of ticket type list (sort order 9999)
- Trigger system warning notification
Default Unmapped Type
The system automatically creates a default ticket type:
- Name: “Unmapped Maverick Tickets”
- Purpose: Temporary holding type for unmapped tickets
- Category: Technical
- Auto-created: First sync with unmapped categories
Best Practices
-
Map Active Categories First
- Focus on categories that receive frequent tickets
- Leave rarely-used categories unmapped initially
-
Group Similar Categories
- Map multiple related Maverick categories to the same Pulse ticket type
- Example: “Account Change” and “Bank Change” → “Account Updates” type
-
Use Descriptive Names
- Ensure Pulse ticket type names clearly indicate purpose
- Makes mapping selection easier
-
Monitor System Warnings
- Address unmapped ticket warnings promptly
- Configure mappings to remove banner
-
Review Regularly
- Maverick may add new categories over time
- Periodically check for unmapped categories
Troubleshooting
”Mapping already exists” Error
Cause: Trying to create a duplicate mapping for a Maverick category
Solution:
- Use UPDATE instead of CREATE
- Or delete existing mapping first
Tickets Not Using Mapping
Cause: Mapping created after tickets were synced
Solution:
- Re-sync tickets from Maverick
- System will update ticket types based on new mappings
Banner Won’t Dismiss
Cause: Unmapped tickets still exist
Solution:
- Check for unmapped tickets: Visit ticket list, filter by type “Unmapped Maverick Tickets”
- Map all active categories
- Re-sync tickets
- Banner auto-dismisses on successful sync
Permission Denied
Cause: User is not an account admin
Solution:
- Only account admins can manage mappings
- Contact your account administrator
Code Examples
List All Mappings
const response = await fetch( "/api/integrations/maverick/ticket-type-mappings", { headers: { Authorization: `Bearer ${token}`, "x-account-id": accountId, }, });
const { data, totalCount } = await response.json();console.log(`Found ${totalCount} mappings`);Create Mapping
const mapping = { maverickCategoryId: 123, maverickCategoryName: "Chargebacks", pulseTicketTypeId: "tt-xyz", pulseCategoryEnum: "billing",};
const response = await fetch( "/api/integrations/maverick/ticket-type-mappings", { method: "POST", headers: { Authorization: `Bearer ${token}`, "x-account-id": accountId, "Content-Type": "application/json", }, body: JSON.stringify(mapping), });
const result = await response.json();console.log(result.message); // "Ticket type mapping created successfully"Check Category Mapping Status
const response = await fetch("/api/tickets/maverick/categories", { headers: { Authorization: `Bearer ${token}`, "x-account-id": accountId, },});
const { data, mappedCount, unmappedCount } = await response.json();console.log(`Mapped: ${mappedCount}, Unmapped: ${unmappedCount}`);
// Find unmapped categoriesconst unmapped = data.filter((cat) => !cat.mapping.isMapped);console.log( "Unmapped categories:", unmapped.map((c) => c.name));