Support Console API Skill
Environment
- Base URL provided by
environment_access.md(GDPEVO_ENV_BASE_URL). Never use localhost unless the remote URL explicitly points there. - Always consult
/api/catalogfirst when entering an unfamiliar task category to confirm available endpoints.
API Endpoint Reference
Core Endpoints
| Endpoint | Purpose |
|---|---|
/api/accounts/<id> |
Account status, auth (last_login_status, account_recovery_status), tier, service_area |
/api/tickets/<id> |
Ticket detail: account_id, service_area, service_type, subscribed_mbps, status |
/api/outages?service_area=<area> |
Active outages with outage_id, eta_hours, impact_score, service_types affected |
/api/diagnostics/<ticket_id> |
Post-hoc root causes, bandwidth/latency/jitter measurements |
/api/troubleshooting/<ticket_id> |
Remediation steps taken and post-fix metrics |
Mobile Support Endpoints
| Endpoint | Purpose |
|---|---|
/api/cases / /api/cases/<id> |
Case records with customer_id, line_id, device_id, issue_type |
/api/customers/<id> |
Customer name, status, phone_number |
/api/lines/<id> |
Line status, suspension_reason, roaming_enabled, plan_id, data_used_gb |
/api/devices/<id> |
Full device state: sim_status, airplane_mode, mobile_data_enabled, phone_roaming_enabled, data_saver_mode, network_mode_preference, vpn_connected, signal_strength, speed_test, messaging_permissions, can_send_mms, wifi_calling_enabled |
/api/plans/<id> |
data_limit_gb, data_refueling_price_per_gb, monthly_price_usd |
/api/bills |
bill_id, customer_id, amount_due_usd, status (Paid/Overdue), due_date |
Enterprise Endpoints
| Endpoint | Purpose |
|---|---|
/api/enterprise/incidents/<id> |
Incident: severity, engineering_owner, account_owner, enterprise_account_id, product, status |
/api/enterprise/export-runs?incident_id=<id> |
Export run history: run_date, status, failure_code, exported_record_count |
/api/enterprise/messages?query=<text> |
Channel messages with author, channel, body, created_at |
/api/enterprise/sla/<account_id> |
SLA contract: credit triggers, credit percentages |
/api/enterprise/accounts |
Enterprise accounts: name, tier, account_owner, finance_owner |
Business Rules by Domain
Offline Service Ticket Resolution (train_001 / train_004 pattern)
Resolution routing:
- Active outage covering the ticket's service_type →
PENDING_ACTION, routeOUTAGE_WAIT, setoutage_id - Successful auto-troubleshooting (post-fix metrics improved) →
RESOLVED, routeAUTO_TROUBLESHOOTING - Root cause requires physical/network engineering (FIBER_DROP_DAMAGE, SIGNAL_LOSS, BACKBONE_CAPACITY, PROVISIONING_STALE) →
ESCALATED, routeESCALATION - Account suspended →
FAILED, routeINELIGIBLE_ACCOUNT - Account not found →
FAILED, routeINVALID_ACCOUNT - Authentication failure →
FAILED, route teamTIER2_SUPPORT
Escalation team mapping:
- Backbone/network capacity issues →
NETWORK_ENGINEERING - Physical line/fiber damage →
NETWORK_ENGINEERING - Provisioning stale →
NETWORK_ENGINEERING - Auth failures →
TIER2_SUPPORT - Invalid account / overdue suspension →
ACCOUNTS_PAYABLE - Active outage / auto-fix / no issue →
NONE
Issue flag thresholds (internet tickets):
latency_issue: diagnostic latency > ~100msstability_issue: diagnostic jitter > ~30msbandwidth_issue: diagnostic bandwidth < subscribed_mbpsdiagnostic_needed:truewhen diagnostics are required to identify the root cause;falsewhen the blocker is obvious from account/outage state alone (active outage, invalid account, auth failure, account suspension). Diagnostics that DID run does not mean they were needed — if the cause was already obvious, setfalse.
Key blockers (train_004 queue-quality pattern):
ACTIVE_OUTAGE— ticket area has an active outageINVALID_ACCOUNT— account ID not found in the systemAUTH_FAILED— account exists but last login failedOVERDUE_SUSPENSION— account status is SuspendedNETWORK_CAPACITY— backbone capacity root causePROVISIONING_STALE— provisioning stale root causeNONE— no systemic blocker; can be auto-resolved
Mobile Support Queue (train_002 pattern)
Always check both line-level AND device-level state — they frequently differ. The line's roaming_enabled and the device's phone_roaming_enabled are independent.
Primary action selection:
sim_status: "missing"→RESEAT_SIM- Line
Suspended+OVERDUE_BILL→SEND_PAYMENT_REQUEST+RESUME_LINE_REBOOT(secondary) - Line
roaming_enabled: truebut devicephone_roaming_enabled: false→TOGGLE_ROAMING - Line
roaming_enabled: falsewhile abroad →ENABLE_LINE_ROAMING can_send_mms: false+ missingstoragepermission →GRANT_MESSAGING_PERMISSIONwithpermission: "storage"vpn_connected: true+ slow data →DISCONNECT_VPNdata_saver_mode: true+ slow data →TOGGLE_DATA_SAVERnetwork_mode_preference: "3g_only"+ slow data →SET_NETWORK_MODEmobile_data_enabled: false+ no data →TOGGLE_MOBILE_DATA
Permission field: Use the specific missing permission string (sms, storage, or sms_and_storage). Set "NONE" when no permission change is needed.
Final route mapping:
- Self-service device/line fixes →
SELF_SERVICE - Payment requests →
BILLING_RECOVERY - Carrier-side changes (roaming enable on line) →
CARRIER_UPDATE - Complex/escalated issues →
HUMAN_TRANSFER
Bill lookup: When a line is suspended for OVERDUE_BILL, query /api/bills filtered by customer_id to find the overdue bill. Use amount_due_usd from the bill record.
Mobile Data Recovery (train_005 pattern)
Same device/line diagnostic approach as train_002, with additional data-refuel logic:
data_used_gb > plan.data_limit_gb→REFUEL_DATAwith customer's accepted refuel GB- Charge = refuel_gb ×
plan.data_refueling_price_per_gb carrier_update_required: trueONLY for carrier-side changes (ENABLE_LINE_ROAMING). Device-side toggles are NOT carrier updates.- Final routes:
DATA_RECOVERY(refuel),CARRIER_UPDATE(line roaming),DEVICE_SETTING_FIX(toggles/mode changes),HUMAN_TRANSFER
Enterprise Incident Response (train_003 pattern)
Data gathering pipeline:
- Query incident → get enterprise_account_id, owners, severity
- Query export-runs by incident_id → identify failure window (first to last FAILED run dates), count failed_days
- Query messages by incident/client name → find root cause details and SLA discussions
- Query SLA contract → get credit_percent
- Query enterprise accounts → get finance_owner for share_permissions
Naming conventions (from response_requirements naming_style):
- Channel name: lowercase-hyphen, from the message's
channelfield (e.g.,export-alerts-archive) - Evidence folder:
{client-slug}-{incident-date}-investigation(e.g.,asteri-retail-2026-05-15-investigation) - Report title:
{client-slug}-{product}-failure-report(e.g.,asteri-retail-export-failure-report)
Field conventions:
contributing_alert_issue:ARCHIVED_ALERT_ROUTEwhen the relevant message channel contains "archive"sla_credit_percent: integer, not a string with%response_status:READY_TO_SENDwhen all evidence is collected and owners are identified.NEEDS_FINANCE_REVIEWonly if explicitly indicated.backfill_days: matches the number offailed_daysin the failure windowshare_permissions: ordered by user as listed in requirements; finance_owner typically getsview
Common Pitfalls
- Confusing line-level and device-level state. Roaming, mobile data, and other settings exist on BOTH the carrier/line side and the device side. Check both independently.
- Setting
diagnostic_needed: truejust because diagnostics ran. If the root cause is obvious without diagnostics (active outage, invalid account, suspended account, auth failure), setfalse. - Using the wrong endpoint for customer data.
CUST-*IDs use/api/customers, not/api/accounts(which usesACC-*ids). - Missing the catalog step. Always check
/api/catalogto confirm which endpoints exist before designing the data-gathering plan. - Using string formatting for numeric fields.
sla_credit_percent,charge_amount_usd,data_refuel_gbare numeric types, not strings. - Overlooking the
carrier_update_requiredflag. Only carrier-side provisioning changes need this set totrue. Device-side settings changes do not. - Not querying bills for suspended lines. The bill amount comes from the
/api/billslist, filtered by customer_id, not from the plan price. - Ignoring
naming_stylein response_requirements. Naming conventions for channels, folders, and report titles are specified in the task payload and must be followed exactly.
Compact SOP
For offline ticket batches:
- Read ticket CSV → extract ticket_ids and account_ids
- Query each ticket, account, diagnostics, troubleshooting, and outages for each service_area
- Classify each ticket: active outage? → OUTAGE_WAIT. Account issue? → FAILED + appropriate route. Diagnostics found fixable root cause? → RESOLVED. Diagnostics found infrastructure issue? → ESCALATED + appropriate team.
- Fill batch_summary by counting final_resolution_status values
For mobile case queues:
- Read case queue → for each case, query line, device, plan, and customer
- Check bill list for any suspended/overdue lines
- Cross-reference line state vs device state for each setting
- Map device anomalies to primary/secondary actions
- Check plan data limits vs actual usage for data refuel decisions
For enterprise incidents:
- Query incident by ID → get enterprise_account_id
- Query export-runs by incident_id → determine failure window
- Query messages by client/product name → extract root cause and SLA discussions
- Query SLA contract → get credit percent
- Query enterprise accounts → get finance_owner and account_owner
- Assemble response following naming conventions from response_requirements