Quickstart — API v2
v2 uses token-based auth. All API requests require an Authorization: Bearer {access_token} header. The Method body field still routes to the correct endpoint.
- Call POST /api/v2/auth/token with your
api_uIdandapi_keyto receive anaccess_token(valid 6 hours) and arefresh_token. - Include
Authorization: Bearer {access_token}in every subsequent request header. - Send all API calls to POST /api/v2/request with a
Methodfield in the body to select the operation. - When the access_token expires, call POST /api/v2/auth/refresh with your
refresh_tokento get a new one. - To invalidate all tokens, call POST /api/v2/auth/revoke with the Bearer token you want to revoke.
POST https://service.hookscall.com/glu/api/v2/auth/tokenAPI endpoint:
POST https://service.hookscall.com/glu/api/v2/requestHTTP method: POST for all endpoints.
Router: the
Method body field selects the operation (same as v1).Auth change from v1: remove
api_uId and api_key from request body. Use Authorization: Bearer header instead.
Authentication NEW
Exchange your api_uId and api_key credentials for a short-lived access_token (6 hours) and a long-lived refresh_token. Store the refresh_token securely — it lets you obtain new access tokens without re-entering credentials.
api_uId + api_key in the request body. All other endpoints require Authorization: Bearer {access_token}.| Parameter | Type | Required | Description |
|---|---|---|---|
api_uId | string | Required | Your account user ID |
api_key | string | Required | Your account API key |
{
"api_uId": "YOUR_API_UID",
"api_key": "YOUR_API_KEY"
}
{
"success": true,
"message": "Token generated successfully.",
"data": {
"access_token": "a3f8c2d1e9b047...",
"refresh_token": "d7e2a1b9c3f048...",
"expires_in": 21600,
"token_type": "Bearer"
}
}
{
"success": false,
"message": "Invalid api_uId or api_key."
}
curl -X POST https://service.hookscall.com/glu/api/v2/auth/token \
-H "Content-Type: application/json" \
-d '{"api_uId": "YOUR_API_UID", "api_key": "YOUR_API_KEY"}'const res = await fetch("https://service.hookscall.com/glu/api/v2/auth/token", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ api_uId: "YOUR_API_UID", api_key: "YOUR_API_KEY" })
});
const { data } = await res.json();
const { access_token, refresh_token } = data;import requests
r = requests.post("https://service.hookscall.com/glu/api/v2/auth/token",
json={"api_uId": "YOUR_API_UID", "api_key": "YOUR_API_KEY"})
token = r.json()["data"]["access_token"]<?php
$ch = curl_init("https://service.hookscall.com/glu/api/v2/auth/token");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["api_uId" => "YOUR_API_UID", "api_key" => "YOUR_API_KEY"]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
$access_token = $data["data"]["access_token"];Use your refresh_token to obtain a new access_token without re-entering credentials. The refresh token is long-lived; the new access token is valid for 6 hours.
| Parameter | Type | Required | Description |
|---|---|---|---|
refresh_token | string | Required | The refresh token received from /auth/token |
{
"refresh_token": "abc123def456..."
}{
"success": true,
"message": "Token refreshed successfully.",
"data": {
"access_token": "b9c3d2e1f0a147...",
"refresh_token": "e8f1a2b0c4d259...",
"expires_in": 21600,
"token_type": "Bearer"
}
}{
"success": false,
"message": "Refresh token is invalid, expired, or already revoked."
}Immediately invalidates all active tokens for the authenticated account. Use this when a token may have been compromised or when logging out. Requires a valid Bearer token in the Authorization header.
Authorization: Bearer {access_token} header.No body parameters required.
{
"success": true,
"message": "All tokens for this account have been revoked."
}{
"success": false,
"message": "A valid Bearer token is required to revoke."
}curl -X POST https://service.hookscall.com/glu/api/v2/auth/revoke \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"Verify that the access token is valid and that authentication is working.
Authorization: Bearer {access_token} header.| Parameter | Type | Required | Description |
|---|---|---|---|
Method | string | Required | Must be set to LoginUser |
curl -X POST https://service.hookscall.com/glu/api/v2/request \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-d '{"Method": "LoginUser"}'{"response": "true", "message": "Successfully Authenticated"}{"response": "false", "message": "Invalid or expired token"}Tags
Authorization: Bearer {access_token} header. Method: FetchAllTags{"Method": "FetchAllTags"}{"response":"true","tag":[{"TagId":"1","TagTitle":"Sample Tag A"}],"message":"There are 1 tags"}{"response":"false","message":"No tag found"}Authorization: Bearer {access_token} header. Method: AddTag{"Method": "AddTag","TagTitle": "Sample Test Tag"}{"response":"true","Added TagId":1,"message":"Tag(Sample Test Tag) has been successfully added"}{"response":"false","message":"Invalid token"}Authorization: Bearer {access_token} header. Method: UpdateTag{"Method": "UpdateTag","TagId": "1","UpdateTagTitle": "New Name"}{"response":"true","TagId":"1","UpdateTagTitle":"New Name","message":"Tag has been successfully updated"}{"response":"false","message":"Invalid provided TagId"}Groups
Authorization: Bearer {access_token} header. Method: FetchAllGroups{"Method": "FetchAllGroups"}{"response":"true","group":[{"GroupId":"1","GroupTitle":"Sample Group A"}],"message":"There are 1 groups"}{"response":"false","message":"No group found"}Authorization: Bearer {access_token} header. Method: AddGroup{"Method": "AddGroup","GroupTitle": "My Group"}{"response":"true","Added GroupId":1,"message":"Group(My Group) has been successfully added"}{"response":"false","message":"Invalid token"}Authorization: Bearer {access_token} header. Method: UpdateGroup{"Method": "UpdateGroup","GroupId": "1","UpdateGroupTitle": "New Group Name"}{"response":"true","GroupId":"1","UpdateGroupTitle":"New Group Name","message":"Group has been successfully updated"}{"response":"false","message":"Invalid provided GroupId"}Authorization: Bearer {access_token} header. Method: DeleteGroup{"Method": "DeleteGroup","GroupId": "1"}{"response":"true","GroupId":"1","message":"Group has been successfully deleted"}{"response":"false","message":"Invalid Provided GroupId"}Custom Fields
Authorization: Bearer {access_token} header. Method: AddcustomField{"Method": "AddcustomField","FieldName": "Age","FieldType": "textbox"}{"response":"true","FieldName":"age","message":"Custom Field has been successfully added"}{"response":"false","message":"Location setting not found"}Authorization: Bearer {access_token} header. Method: UpdateCustomField{"Method": "UpdateCustomField","PreviousFieldName": "Street Address","newFieldName": "Company Address","newFieldType": "textbox"}{"response":"true","FieldName":"company_address","message":"Custom Field has been successfully updated"}{"response":"false","message":"Invalid field name"}Authorization: Bearer {access_token} header. Method: CheckCustomField{"Method": "CheckCustomField","FieldName": "Age"}{"response":"True","FieldName":"Age","message":"Provided Custom Field Exist"}{"response":"false","message":"Field not found"}Authorization: Bearer {access_token} header. Method: DeleteCustomField{"Method": "DeleteCustomField","FieldName": "Age"}{"response":"true","FieldName":"age","message":"Provided Custom Field has been successfully Deleted"}{"response":"false","message":"Invalid FieldName"}Leads
Authorization: Bearer {access_token} header. Method: SearchByUserInput{"Method": "SearchByUserInput","GroupId": "236","searchField": "first_name","searchText": "John","sortBy": "ASC"}{"response":"true","Results":[{"LeadId":"12345","GroupId":"236","Firstname":"John","Lastname":"Doe","E-Mail":"john@example.com","Phone":"5551234567","Mobile":"","Tags":"","CountryCode":"","Zipcode":"","City":"","State":"","Address":"","Company":"","Website":"","Lead_Custom_Fields":{}}]}{"response":"false","message":"No results found"}Authorization: Bearer {access_token} header. Method: SearchByCustomField{"Method": "SearchByCustomField","GroupId": "236","searchField": "Age","searchText": "30","sortBy": "ASC"}{"response":"true","Results":[{"LeadId":"12346","GroupId":"236","Firstname":"Jane","Lastname":"Smith","E-Mail":"jane@example.com","Phone":"5559876543","Mobile":"","Tags":"","CountryCode":"","Zipcode":"","City":"","State":"","Address":"","Company":"","Website":"","Lead_Custom_Fields":{"Age":"30"}}]}{"response":"false","message":"No results found"}Authorization: Bearer {access_token} header. Method: Un_SubscribeLead{"Method": "Un_SubscribeLead","unsubscribeBy": "leadId","unsubscribeValue": "12345"}{"response":"true","leadId":"12345","unsubscribeBy":"leadId","unsubscribeValue":"12345","message":"Lead has been unsubscribed"}{"response":"false","message":"Invalid unsubscribeBy value"}Authorization: Bearer {access_token} header. Method: UpdateExistingLead{"Method": "UpdateExistingLead","LeadId": "12345","LeadField": "first_name","LeadData": "John Updated"}{"response":"true","LeadId":"12345","UserField":"first_name","UserData":"John Updated","message":"Lead has been successfully updated"}{"response":"false","message":"Invalid LeadId"}Authorization: Bearer {access_token} header. Method: MoveLead{"Method": "MoveLead","LeadId": "12345","moveGroupId": "237"}{"response":"true","LeadId":"12345","moveGroupId":"237","message":"Lead has been successfully moved"}{"response":"false","message":"Invalid LeadId or moveGroupId"}Authorization: Bearer {access_token} header. Method: CopyLead{"Method": "CopyLead","LeadId": "12345","copyGroupId": "238"}{"response":"true","LeadId":"12345","copyGroupId":"238","message":"Lead has been successfully copied"}{"response":"false","message":"Invalid LeadId or copyGroupId"}Authorization: Bearer {access_token} header. Method: AddSingleLead{"Method": "AddSingleLead","groupId": "236","first_name": "Jane","last_name": "Smith","email": "jane@example.com","phone": "5551234567","mobile": "","country_code": "","website": "","company": "","zip": "","address": "","tagId": []}{"response":"true","AddedleadId":"12346","groupId":"236","message":"Lead has been successfully added"}{"response":"false","message":"Lead already exists or groupId invalid"}Authorization: Bearer {access_token} header. Method: RemoveSingleLead{"Method": "RemoveSingleLead","groupId": "236","phone": "5551234567"}{"response":"true","RemovedleadId":"12346","groupId":"236","message":"Lead has been successfully removed"}{"response":"false","message":"Lead not found in group"}Authorization: Bearer {access_token} header. Method: AddMultipleLeads{"Method": "AddMultipleLeads","groupId": "236","leads_array": [{"first_name":"Alice","phone":"5550001111"},{"first_name":"Bob","phone":"5550002222"}],"tagId": []}{"response":"true","message":"Leads are added to Queue for Processing"}{"response":"false","message":"Invalid groupId"}Lead Metadata
Authorization: Bearer {access_token} header. Method: FetchLeadFieldsName{"Method": "FetchLeadFieldsName"}{"response":"true","FieldsName":{"Default":["first_name","last_name","email","phone","mobile","country_code","website","company","zip","address"],"Custom":["Age","Gender","Notes"]}}{"response":"false","message":"No fields found"}Authorization: Bearer {access_token} header. Method: FetchLeadNotes{"Method": "FetchLeadNotes","leadId": 12345}{"response":"true","message":"2 note(s) found","notes":[{"notesId":1,"note":"Called — left voicemail","type":"manual","added_by":101,"dated":"2026-06-23 10:30:00"},{"notesId":2,"note":"SMS : Sent","type":"sms","added_by":101,"dated":"2026-06-23 11:00:00"}]}{"response":"false","message":"No notes found"}Authorization: Bearer {access_token} header. Method: AddLeadTags{"Method": "AddLeadTags","leadId": 12345,"tagId": "5,12,18"}{"response":"true","message":"Tags assigned successfully","leadId":12345,"tags_assigned":[5,12,18]}{"response":"false","message":"Invalid leadId or tagId"}Authorization: Bearer {access_token} header. Method: RemoveLeadTags{"Method": "RemoveLeadTags","leadId": 12345,"tagId": "5,12"}{"response":"true","message":"Tags removed successfully","leadId":12345,"tags_removed":[5,12]}{"response":"false","message":"Invalid leadId or tagId"}Per-Lead Logs
Authorization: Bearer {access_token} header. Method: FetchLeadCallLogs{"Method": "FetchLeadCallLogs","LeadId": "12345","type": "","from_date": "2026-06-01","to_date": "2026-06-23"}{"response":"true","Results":[{"leadId":"12345","lead_Name":"John Doe","from_number":"+15551234567","to_number":"+15559876543","call_time":"Jun 23, 2026 10:30 am","transfer":"No","state":"CA","city":"Los Angeles","duration":"90","recording":"","call_status":"completed","speed_to_lead":120}]}{"response":"false","message":"No call logs found"}Authorization: Bearer {access_token} header. Method: FetchLeadSMSLogs{"Method": "FetchLeadSMSLogs","LeadId": "12345","from_date": "2026-06-01","to_date": "2026-06-23"}{"response":"true","Results":[{"leadId":"12345","lead_Name":"John Doe","from_number":"+15551234567","to_number":"+15559876543","message":"Hi, just following up","dated":"Jun 23, 2026 10:30 am","status":"Sent","messageId":"900001"}]}{"response":"false","message":"No SMS logs found"}Authorization: Bearer {access_token} header. Method: FetchLeadRVMLogs{"Method": "FetchLeadRVMLogs","LeadId": "12345","from_date": "2026-06-01","to_date": "2026-06-23"}{"response":"true","Results":[{"leadId":"12345","lead_Name":"John Doe","from_number":"+15551234567","to_number":"+15559876543","group":"My Group","dated":"Jun 23, 2026 10:30 am","voice_file":"https://...","duration":"30","vmId":"100001"}]}{"response":"false","message":"No RVM logs found"}Account Logs
Authorization: Bearer {access_token} header. Method: FetchUserSMSLogs{"Method": "FetchUserSMSLogs","from_date": "2026-06-01","to_date": "2026-06-23","direction": "outbound","groupId": "236","leadId": "","status": "","limit": 100,"offset": 0}{"response":"true","Results":[{"leadId":"10000001","lead_Name":"John Doe","from_number":"+15550000001","to_number":"+15550000002","message":"Hi, just following up on your inquiry.","dated":"Jun 23, 2026 10:30 am","status":"Sent","direction":"outbound","groupId":"236","tags":"12,45","messageId":"900001"}],"total_records":1520,"returned_records":1,"limit":100,"offset":0,"has_more":true,"next_offset":100,"message":"There are 1520 SMS"}{"response":"false","message":"No SMS logs found"}Authorization: Bearer {access_token} header. Method: FetchUserCallLog{"Method": "FetchUserCallLog","from_date": "2026-06-01","to_date": "2026-06-23","type": "inbound","campaignId": "","groupId": "236","locationId": "","memberId": "","statusId": "","min_duration": 0,"max_duration": 0,"search_phone": "","transfer_only": "","limit": 100,"offset": 0,"sort_by": "call_time","sort_order": "DESC"}{"response":"true","Results":[{"leadId":"10000001","lead_Name":"Test Lead A","from_number":"+10000000001","to_number":"+10000000002","recording":"","group":"Group A","caller_name":"Agent One","call_time":"Jun 23, 2026 6:34 pm","duration":"84","city":"Test City","state":"TS","transfer":"Yes","recordingId":"900001","call_status":"completed","call_type":"inbound","speed_to_lead":300,"campaignId":"11111","statusId":"0"}],"total_records":30481,"returned_records":1,"limit":100,"offset":0,"has_more":true,"next_offset":100,"message":"There are 5491 inbound & 24990 outbound Call(s) (Total: 30481)","inbound_count":"5491","outbound_count":"24990"}{"response":"false","message":"No call logs found"}Members
Authorization: Bearer {access_token} header. Method: addMemberUser{"Method": "addMemberUser","first_name": "Support","last_name": "Team","email": "abcxyz@gmail.com","inbound_phone": "14087777111","password": "a-sasdasdsA3"}{"response":"true","message":"Team member added successfully."}{"response":"false","message":"Email already exists"}Authorization: Bearer {access_token} header. Method: editMemberUser{"Method": "editMemberUser","memberId": "967","first_name": "Support","last_name": "Team","email": "abcxyz@gmail.com","inbound_phone": "14087777111","member_status": "Active"}{"response":"true","message":"Member updated successfully."}{"response":"false","message":"Invalid memberId"}Authorization: Bearer {access_token} header. Method: getMemberUsers{"Method": "getMemberUsers"}{"response":"true","data":[{"memberId":"3232","first_name":"Support","last_name":"Team","email":"abc@hotmail.com","title":"","company":"","country":"USA","state":"","city":"","zip":"","street_address":"","industry":"","main_time_zone":"America","sub_time_zone":"America/Chicago","inbound_phone":"","direct_number":"+12345678900","direct_call_recording":"false","outbound_call_recording":"No","outbound_phone":"","inbound_call_option":"1","inbound_call_option_label":"Ring Browser","phone_extension":"","member_status":"Active","dated":"2025-01-21 15:28:07"}]}{"response":"false","message":"No members found"}Authorization: Bearer {access_token} header. Method: checkMemberLimit{"Method": "checkMemberLimit"}{"response":"true","message":"record","data":{"total_user":"10","active_user":"8","remaining_user":"2"}}{"response":"false","message":"Unable to fetch limit"}Authorization: Bearer {access_token} header. Method: deleteMemberUser{"Method": "deleteMemberUser","memberId": "434"}{"response":"true","message":"Member deleted successfully."}{"response":"false","message":"Invalid memberId"}Authorization: Bearer {access_token} header. Method: fetchCreditCount{"Method": "fetchCreditCount"}{"response":"true","credits":"2500"}{"response":"false","message":"Unable to fetch credits"}Authorization: Bearer {access_token} header. Method: creditDeduct{"Method": "creditDeduct","description": "Some description..."}{"response":"true","credits":"credits deduct successfully"}{"response":"false","message":"Insufficient credits"}Campaigns
Authorization: Bearer {access_token} header. Method: FetchAllCampaigns{"Method": "FetchAllCampaigns"}{"response":"true","result":[{"campaign_id":"11111","CampaignTitle":"Summer Campaign"},{"campaign_id":"22222","CampaignTitle":"Fall Outreach"}]}{"response":"false","message":"No campaigns found"}Conversation Intelligence
Authorization: Bearer {access_token} header. Method: FetchCallTranscripts{"Method": "FetchCallTranscripts","from_date": "2026-06-01","to_date": "2026-06-23","call_type": "","campaignId": "","groupId": "","memberId": "","statusId": "","min_duration": 0,"max_duration": 0,"search_keyword": "","flagged_only": 0,"recordingId": "","limit": 100,"offset": 0,"sort_by": "call_time","sort_order": "DESC","summary_only": 0,"compress_transcripts": 0,"fields": "","return_format": "","cursor": ""}{"response":"true","Results":[{"leadId":"10000001","lead_Name":"John Doe","from_number":"+15550000001","to_number":"+15550000002","recording":"","group":"Group A","caller_name":"Agent One","call_time":"Jun 23, 2026 10:30 am","duration":"90","city":"Test City","state":"TS","transfer":"No","recordingId":"900001","call_status":"completed","call_type":"outbound","speed_to_lead":0,"campaignId":"11111","statusId":"0","message_data":[{"role":"agent","content":"Hi, this is..."},{"role":"lead","content":"Hello..."}],"message_data_raw":"agent: Hi, this is...\nlead: Hello...","analytics_status":"completed","analytics_dated":"2026-06-23 10:35:00","transcript_text":"agent: Hi, this is...\nlead: Hello..."}],"total_records":500,"returned_records":1,"limit":100,"offset":0,"has_more":true,"next_offset":100}{"response":"false","message":"No transcripts found"}Dashboard
Authorization: Bearer {access_token} header. Method: getMemberDashboardData{"Method": "getMemberDashboardData","date": "2026-06-23"}{"response":"true","date":"2026-06-23","last_updated":"Jun 23, 2026 12:46 pm (PST)","message":"Today`s Member Dashboard Data","results":[{"agentId":"1","agentName":"John Doe","agentEmail":"abc@example.com","hours":"08h :15m :32s","firstCall":"09:01 AM","lastCall":"05:12 PM","gapTime":"45m :12s","acg":"01:02","outboundCall":"250","inboundCall":"20","hangups":"15","AOD":"320.000000","AID":"315.000000","talkMin":"280","avgMin":"35 m","answered_calls":"110","ansPerHour":14,"answer_rate":"44 %","convos":"18","cr":"16.36 %","Prospects":"3","ProspectsWeekly":"4","Appts":"2","ApptsWeekly":"3","ABR":"12.50","SMS":"5"}]}{"response":"false","message":"Unable to fetch dashboard data"}Authorization: Bearer {access_token} header. Method: getDashboardMemberDatabyCampaign{"Method": "getDashboardMemberDatabyCampaign","campaign_id": "11111","date": "2026-06-23"}{"response":"true","date":"2026-06-23","last_updated":"Jun 23, 2026 12:46 pm (PST)","message":"Today`s Member Dashboard Data","results":[{"agentId":"1","agentName":"John Doe","agentEmail":"abc@example.com","hours":"08h :15m :32s","firstCall":"09:01 AM","lastCall":"05:12 PM","gapTime":"45m :12s","acg":"01:02","outboundCall":"250","inboundCall":"20","hangups":"15","AOD":"320.000000","AID":"315.000000","talkMin":"280","avgMin":"35 m","answered_calls":"110","ansPerHour":14,"answer_rate":"44 %","convos":"18","cr":"16.36 %","Prospects":"3","ProspectsWeekly":"4","Appts":"2","ApptsWeekly":"3","ABR":"12.50","SMS":"5","dispositionStatus":{"Hot Lead":"3","Not Interested":"5"}}]}{"response":"false","message":"Unable to fetch dashboard data"}Number Health
Authorization: Bearer {access_token} header. Method: GetNumberHealthList{"Method": "GetNumberHealthList","filter": "spam_only","checked_since": "2026-06-23","page": 1,"per_page": 100}{"response":"true","message":"Success","pagination":{"page":1,"per_page":100,"total":2,"total_pages":1},"data":[{"phoneId":1042,"phone_number":"5551234567","is_spam_detected":true,"overall_device_spam":false,"spam_checks":{"fcc_complaint":0,"ftc_complaint":1,"youmail_spam":1,"truespam":0,"nomorobo_spam":0,"robokiller_spam":0},"carriers":{"verizon":{"title":"Verizon","android_status":"Spam Risk","iphone_status":"Spam Risk"},"tmobile":{"title":"T-Mobile","android_status":"Scam Likely","iphone_status":"Scam Likely"},"cingular":{"title":"Cingular","android_status":null,"iphone_status":null},"cricket":{"title":"Cricket","android_status":null,"iphone_status":null}},"last_checked_at":"2026-06-23 08:00:00","next_billing_at":"2026-07-23 08:00:00","business_profile":{"connected_profile":"BU39810c949c409a84a6548f506cc6d1b0","brand_status":"APPROVED","legal_business_name":"Acme Corp LLC","business_type":"Private","business_industry":"REAL_ESTATE","ein":"12-3456789","website_url":"https://acmecorp.com","street_address":"123 Main St","city":"Los Angeles","state":"CA","postal_code":"90001","contact_first_name":"John","contact_last_name":"Smith","contact_email":"john@acmecorp.com","contact_phone":"+15551234567","contact_title":"CEO","notification_email":"notify@acmecorp.com"}}]}{"response":"false","message":"No numbers found"}