API Reference v1
Getting Started

FREESTYLE API Reference

The FREESTYLE API gives you programmatic access to your FREESTYLE Telecom Technologies account — campaigns, agents, activity, and more. All API access is over HTTPS and all responses are JSON.

This reference covers every endpoint, parameter, and response schema. Contact your account manager with questions.

Early Access — The API is in early access. Endpoints may change before general availability. Breaking changes will be communicated in advance.

Base URL

All endpoints are relative to:

https://api.freestyleteletech.com/v1

All requests must be made over HTTPS. Plain HTTP is not supported.

Authentication

API Keys

The FREESTYLE API authenticates requests using API keys. Your key is unique to your client account and carries full access to your data — never expose it in client-side code or version control.

Obtaining an API Key

API keys are provisioned by a FREESTYLE administrator from your client profile. Once generated, the full key is shown exactly once — store it immediately in a secure location such as an environment variable or secrets manager.

Treat your API key like a password. If you believe it has been compromised, contact your account manager to have it regenerated. The previous key is invalidated immediately upon regeneration.

Making Requests

Pass your API key in the X-API-Key header on every request:

🔑 X-API-Key: ft_a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Required headers

HeaderRequiredDescription
X-API-KeyRequiredYour 64-character hex API key.
Content-TypeConditionalRequired for POST / PATCH requests. Value: application/json
AcceptOptionalRecommended: application/json

Errors

The API uses standard HTTP status codes. All error responses include a JSON body with a machine-readable code and a human-readable message.

Error response format

{
  "error": {
    "code":    "unauthorized",
    "message": "Invalid or missing API key."
  }
}

HTTP status codes

200OK — Request succeeded.
400Bad Request — Invalid parameters. See the error message for details.
401Unauthorized — API key is missing or invalid.
403Forbidden — API key does not have permission for this resource.
404Not Found — The requested resource does not exist.
500Server Error — Something went wrong on our side. Try again or contact support.

Error codes

CodeDescription
unauthorizedAPI key is missing, malformed, or invalid.
api_disabledAPI access is disabled for this client account.
not_foundThe requested resource was not found.
invalid_parameterOne or more parameters failed validation.
server_errorAn unexpected server-side error occurred.
Dial Campaigns

List Campaigns

Returns a paginated list of dial campaigns associated with your client account.

GET https://api.freestyleteletech.com/v1/dial-campaigns

Query Parameters

ParameterTypeRequiredDescription
pageintegerOptionalPage number. Defaults to 1.
per_pageintegerOptionalResults per page. Default 25, max 100.
statusstringOptionalFilter by status: active, paused, completed, draft.

Response

Returns an object with a data array of campaign objects and a meta pagination object.

{
  "data": [
    {
      "id":           "c_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name":         "Q2 Outreach — Ontario",
      "status":       "active",
      "created_at":   "2026-03-15T14:22:00Z",
      "updated_at":   "2026-05-01T09:10:00Z",
      "total_leads":  4820,
      "dialed":       3104,
      "remaining":    1716
    }
  ],
  "meta": {
    "page":        1,
    "per_page":    25,
    "total":       8,
    "total_pages": 1
  }
}

Campaign object fields

FieldTypeDescription
idstringUnique campaign identifier.
namestringCampaign display name.
statusstringOne of active, paused, completed, draft.
created_atstringISO 8601 creation timestamp (UTC).
updated_atstringISO 8601 last-modified timestamp (UTC).
total_leadsintegerTotal leads in the campaign.
dialedintegerLeads dialed at least once.
remainingintegerLeads not yet dialed.

Response Codes

200Campaign list returned successfully.
401Invalid or missing API key.
403API access is disabled for this account.
Dial Campaigns

Update Campaign Status

Start or pause a dial campaign. Only active and paused are settable — completed and draft are computed states derived from lead progress.

PATCH https://api.freestyleteletech.com/v1/dial-campaigns/{id}

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe campaign ID (e.g. c_a1b2c3d4-...).

Request Body

Send Content-Type: application/json.

FieldTypeRequiredDescription
statusstringRequiredTarget status. One of active, paused.

Response

Returns the updated campaign object under a data key.

Response Codes

200Campaign updated successfully.
400Invalid or missing status value.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
Dial Campaigns

Upload Campaign Data

Upload a batch of contact records to a dial campaign. Records are appended to the campaign's existing dataset and the campaign's total lead count is updated automatically. Up to 1,000 records per request.

POST https://api.freestyleteletech.com/v1/dial-campaigns/{id}/data

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe campaign ID (e.g. c_a1b2c3d4-...).

Request Body

Send Content-Type: application/json with a top-level records array. Each element is a contact object.

Contact Object Fields

FieldTypeRequiredDescription
phone1stringRequiredPrimary phone number. Digits only, 10-digit North American format. A leading country code 1 is stripped automatically.
phone2 – phone10stringOptionalAdditional phone numbers, same format as phone1.
account_idstringOptionalPrimary account identifier (up to 100 chars).
account_namestringOptionalContact display name (up to 50 chars).
emailstringOptionalEmail address.
streetstringOptionalStreet address.
citystringOptionalCity.
province_statestringOptionalProvince or state.
postal_zipstringOptionalPostal or ZIP code.
dobstringOptionalDate of birth.
amountnumberOptionalPrimary balance or amount.
amount_secondarynumberOptionalSecondary balance or amount.
account_id_secondarystringOptionalSecondary account identifier.
datetimestringOptionalPrimary date/time (ISO 8601 or Unix timestamp).
datetime_secondarystringOptionalSecondary date/time.
languagestringOptionalPreferred language code: en, fr, etc.
external_namestringOptionalExternal reference name.
data1 – data6stringOptionalCustom data fields (up to 120 chars each).
timezone_idintegerOptionalTimezone ID for scheduling.
client_namestringOptionalClient label for this record.

Response

Returns a summary of the operation — how many records were inserted, how many were skipped due to validation errors, and the campaign's updated total lead count.

Response Codes

200Records uploaded successfully.
400Missing or invalid fields; exceeds 1,000 record limit.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
Dial Campaigns

Get Call Results

Returns a paginated list of individual call result records for a campaign. Each record represents one call attempt, including the disposition, agent, timing, and lead details.

GET https://api.freestyleteletech.com/v1/dial-campaigns/{id}/results

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe campaign ID (e.g. c_a1b2c3d4-...).

Query Parameters

ParameterTypeRequiredDescription
fromstringOptionalStart date filter (YYYY-MM-DD). Filters by call completion time.
tostringOptionalEnd date filter (YYYY-MM-DD). Inclusive.
dispositionintegerOptionalFilter by disposition type ID.
pageintegerOptionalPage number. Defaults to 1.
per_pageintegerOptionalRecords per page, max 200. Defaults to 50.

Response

Returns a data array of result objects and a meta object for pagination. Results are ordered by call completion time descending.

Result Object Fields

FieldTypeDescription
result_idintegerUnique identifier for this call result.
campaign_data_idintegerID of the lead record that was called.
account_idstringLead's account identifier.
account_namestringLead's name.
phone_dialedstringThe phone number that was dialed for this attempt.
phone_number_indexintegerPhone slot index (0 = phone1, 1 = phone2, …).
dispositionobjectDisposition details: id, name, code, contacted (bool).
agent_idintegerID of the agent who handled the call.
dialed_atstringRFC 3339 timestamp when the call was dialed.
connected_atstringRFC 3339 timestamp when the call connected (null if no answer).
completed_atstringRFC 3339 timestamp when the call was dispositioned.
talk_secondsintegerSeconds from connection to completion. Null if not connected.
total_secondsintegerSeconds from dial to completion.
amountnumberAmount collected or recorded during the call, if applicable.
dtmfstringDTMF keypad input captured during the call.
recording_idstringCall recording reference ID, if recorded.
new_phonestringUpdated phone number captured during the call.
new_emailstringUpdated email address captured during the call.

Response Codes

200Results returned successfully.
400Invalid query parameter.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
Dial Campaigns

Results Summary

Returns aggregate call statistics for a campaign, broken down by disposition type. Useful for dashboards and reporting — includes total calls, contact rate, and talk time.

GET https://api.freestyleteletech.com/v1/dial-campaigns/{id}/results/summary

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe campaign ID (e.g. c_a1b2c3d4-...).

Query Parameters

ParameterTypeRequiredDescription
fromstringOptionalStart date filter (YYYY-MM-DD).
tostringOptionalEnd date filter (YYYY-MM-DD). Inclusive.

Response

Returns a single data object with top-level totals and a dispositions array ranked by call count.

Response Fields

FieldTypeDescription
total_callsintegerTotal number of call attempts.
total_contactsintegerCalls where a live contact was reached.
contact_ratenumberContact rate as a percentage (0–100).
total_talk_secondsintegerSum of connected talk time across all calls.
total_dial_secondsintegerSum of total call duration (dial to completion) across all calls.
first_call_atstringRFC 3339 timestamp of the earliest call in the result set.
last_call_atstringRFC 3339 timestamp of the most recent call in the result set.
date_rangeobjectThe from and to filters applied (null if not provided).
dispositionsarrayBreakdown by disposition: id, name, code, contacted, count, percentage.

Response Codes

200Summary returned successfully.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
Dial Campaigns

Activity Log

Returns a paginated log of campaign-level activity events: records imported, records recycled, and campaign started/stopped events. Corresponds to the Campaign Report in the admin portal.

GET https://api.freestyleteletech.com/v1/dial-campaigns/{id}/activity

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe campaign ID (e.g. c_a1b2c3d4-...).

Query Parameters

ParameterTypeRequiredDescription
fromstringOptionalStart date filter (YYYY-MM-DD).
tostringOptionalEnd date filter (YYYY-MM-DD). Inclusive.
typeintegerOptionalFilter by activity type ID (see table below).
pageintegerOptionalPage number. Defaults to 1.
per_pageintegerOptionalRecords per page, max 200. Defaults to 50.

Activity Types

IDNameCount Fields Included
1Records Importedimported_count, recycled_count (duplicates), excluded_count, total_count
2Campaign StoppedAll counts are null
3Campaign StartedAll counts are null
4Records Recycledrecycled_count (reset back to unworked), total_count (total evaluated); other counts are null

Response

Returns a data array of activity event objects and a meta object for pagination. Events are ordered by timestamp descending.

Activity Object Fields

FieldTypeDescription
activity_idintegerUnique identifier for this activity event.
typeobjectActivity type: id and name.
imported_countintegerNumber of new records added. Null for non-import events.
recycled_countintegerDuplicate records skipped on import, or records reset to unworked on a recycle run.
excluded_countintegerRecords excluded during import (invalid or suppressed). Null for non-import events.
total_countintegerTotal records processed in this event (imported + recycled + excluded for imports; total evaluated for recycle runs).
created_atstringRFC 3339 timestamp when the event occurred.

Response Codes

200Activity log returned successfully.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
SMS Campaigns

List SMS Campaigns

Returns a paginated list of SMS campaigns on your account, including run counts and latest scheduled run timestamp.

GET https://api.freestyleteletech.com/v1/sms-campaigns

Query Parameters

ParameterTypeRequiredDescription
statusstringOptionalFilter to campaigns that have at least one run in this status: scheduled, running, completed, cancelled.
pageintegerOptionalPage number. Defaults to 1.
per_pageintegerOptionalRecords per page, max 100. Defaults to 50.

Response

Returns a data array of campaign objects and a meta object for pagination. Campaigns are ordered alphabetically by name.

Campaign Object Fields

FieldTypeDescription
idstringUnique campaign identifier (e.g. sc_uuid...).
namestringCampaign display name.
from_numberstringTwilio sender phone number in E.164 format.
total_runsintegerTotal number of runs ever scheduled for this campaign.
running_countintegerRuns currently in progress.
scheduled_countintegerRuns scheduled and not yet started.
completed_countintegerRuns that completed successfully.
cancelled_countintegerRuns that were cancelled.
last_run_atstringRFC 3339 timestamp of the most recently scheduled run. Null if no runs.
created_atstringRFC 3339 timestamp when the campaign was created.
updated_atstringRFC 3339 timestamp when the campaign template was last updated. Null if never updated.

Response Codes

200List returned successfully.
400Invalid query parameter.
401Invalid or missing API key.
SMS Campaigns

Get SMS Campaign

Returns a single SMS campaign by ID, including its message template and full run summary counts.

GET https://api.freestyleteletech.com/v1/sms-campaigns/{id}

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe SMS campaign ID (e.g. sc_uuid...).

Additional Response Fields

Returns all fields from the list response, plus:

FieldTypeDescription
templatestringThe SMS message template text. Supports placeholders: {Name}, {Balance}, {DueDate}, {CompanyCode}, {Account}.

Response Codes

200Campaign returned successfully.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
SMS Campaigns

Get Campaign Runs

Returns a paginated list of runs (scheduled send batches) for a given SMS campaign, ordered by scheduled time descending. Each run represents one CSV upload and its delivery progress.

GET https://api.freestyleteletech.com/v1/sms-campaigns/{id}/runs

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe SMS campaign ID (e.g. sc_uuid...).

Query Parameters

ParameterTypeRequiredDescription
statusstringOptionalFilter by run status: scheduled, running, completed, cancelled.
pageintegerOptionalPage number. Defaults to 1.
per_pageintegerOptionalRecords per page, max 100. Defaults to 50.

Run Statuses

StatusMeaning
scheduledQueued and waiting for the scheduled send time.
runningCurrently sending messages.
completedAll messages have been processed.
cancelledRun was cancelled before completion.

Run Object Fields

FieldTypeDescription
run_idintegerUnique identifier for this run.
statusstringCurrent run status (see table above).
scheduled_atstringRFC 3339 timestamp when the run was scheduled to begin.
started_atstringRFC 3339 timestamp when sending started. Null if not yet started.
completed_atstringRFC 3339 timestamp when the run completed. Null if still in progress.
totalintegerTotal number of phone numbers in this run.
processedintegerNumber of numbers processed so far.
sentintegerMessages delivered successfully.
failedintegerMessages that failed to deliver.
progress_pctnumberPercentage of messages processed (0–100).
notesstringInternal notes on this run. Null if none.
created_atstringRFC 3339 timestamp when the run was created.

Response Codes

200Runs returned successfully.
400Invalid query parameter.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
SMS Campaigns

Get Campaign Messages

Returns a paginated log of individual SMS messages sent or received for a campaign, linked through campaign runs. Includes delivery status, error details, cost per message, and the reference ID from the original upload CSV. Corresponds to the SMS Report in the admin portal.

GET https://api.freestyleteletech.com/v1/sms-campaigns/{id}/messages

Path Parameters

ParameterTypeRequiredDescription
idstringRequiredThe SMS campaign ID (e.g. sc_uuid...).

Query Parameters

ParameterTypeRequiredDescription
fromstringOptionalStart date filter (YYYY-MM-DD). Filters by message send time.
tostringOptionalEnd date filter (YYYY-MM-DD). Inclusive.
run_idintegerOptionalFilter to messages from a specific campaign run.
statusstringOptionalFilter by Twilio delivery status (e.g. delivered, failed, undelivered, sent).
directionstringOptionalFilter by message direction: sent or received.
pageintegerOptionalPage number. Defaults to 1.
per_pageintegerOptionalRecords per page, max 200. Defaults to 50.

Response

Returns a data array of message objects, a summary object with totals, and a meta object for pagination. Messages are ordered by send time descending.

Message Object Fields

FieldTypeDescription
message_idintegerUnique message identifier.
run_idintegerThe campaign run this message belongs to.
directionstringsent or received.
phone_numberstringThe other party's phone number.
from_numberstringSender's number (Twilio E.164 format).
to_numberstringRecipient's number (Twilio E.164 format).
messagestringFull SMS message body.
statusstringTwilio delivery status: queued, sent, delivered, failed, undelivered.
error_codestringTwilio error code if delivery failed. Null on success.
error_messagestringHuman-readable error description. Null on success.
segmentsintegerNumber of SMS segments used (160 chars per segment).
costnumberBilled cost for this message.
reference_idstringReference or account ID from the original upload CSV. Null if not provided.
sent_atstringRFC 3339 timestamp when the message was sent.

Summary Object Fields

FieldTypeDescription
totalintegerTotal messages matching the current filters.
sent_countintegerOutbound messages.
received_countintegerInbound replies.
total_costnumberSum of billed cost across all matching messages.

Response Codes

200Messages returned successfully.
400Invalid query parameter.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
Billing

Usage & Cost

Returns per-campaign call duration and billing cost for a given date range. Duration is summed from all conference calls on the campaign; cost is calculated from your account's gross hourly rate (GHR). Corresponds to the Cost Report in the admin portal.

GET https://api.freestyleteletech.com/v1/billing

Query Parameters

ParameterTypeRequiredDescription
fromstringOptionalStart date filter (YYYY-MM-DD). Filters by conference start time.
tostringOptionalEnd date filter (YYYY-MM-DD). Inclusive.
campaignstringOptionalFilter to a specific campaign (e.g. c_a1b2c3d4-...). Defaults to all campaigns on your account.

Response

Returns a data array with one entry per campaign, and a summary object with account-level totals. Results are ordered by duration descending.

Campaign Object Fields

FieldTypeDescription
campaign_idstringCampaign identifier (e.g. c_a1b2c3d4-...).
campaign_namestringCampaign display name.
duration_secondsintegerTotal conference call duration in seconds for the date range.
hourly_ratenumberYour account's gross hourly rate (GHR) applied to this campaign.
costnumberCalculated cost: (duration_seconds / 3600) × hourly_rate.

Summary Object Fields

FieldTypeDescription
total_duration_secondsintegerSum of duration across all campaigns in the response.
total_costnumberSum of cost across all campaigns in the response.
date_rangeobjectThe from and to filters applied (null if not provided).

Response Codes

200Usage data returned successfully.
401Invalid or missing API key.
404Campaign not found or does not belong to your account.
Account

Get Account

Returns the account profile associated with your API key, including contact information and location.

GET https://api.freestyleteletech.com/v1/account

Response

Returns a single data object representing the authenticated client's account.

Account Object Fields

FieldTypeDescription
idstringUnique client identifier (UUID).
namestringAccount display name.
statusstringAccount status. One of: prospect, onboarded, declined, qualified_lead, commitment.
descriptionstringOptional account description. Null if not set.
contactsobjectContact details grouped by role: primary, technical, billing. Each has name, email, and phone.
locationobjectAccount location with country and province_state. Null if not set.
created_atstringISO 8601 timestamp when the account was created.

Response Codes

200Account data returned successfully.
401Invalid or missing API key.
403API access is disabled for this account.
Account

Phone Numbers

Returns all phone numbers assigned to your account, including type and Neustar Branded Call Display status.

GET https://api.freestyleteletech.com/v1/account/phone-numbers

Response

Returns a data array with one entry per phone number and a meta object with the total count.

Phone Number Object Fields

FieldTypeDescription
phone_number_idintegerUnique phone number record ID.
phone_numberstringThe phone number in E.164 format.
typeobjectPhone number type with id (integer) and name (string).
descriptionstringOptional label or description. Null if not set.
neustar_branded_call_displaybooleanWhether this number is enrolled in Neustar Branded Call Display.
created_atstringISO 8601 timestamp when this number was added to the account.

Response Codes

200Phone numbers returned successfully.
401Invalid or missing API key.
403API access is disabled for this account.