Ruby SDK
Setup & Initialization
- Install:
gem install pingramOr add to your Gemfile:
gem 'pingram'- Require and initialize:
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')| Name | Type | Description |
|---|---|---|
api_key* |
string | Your Pingram API key. You can get it from your dashboard under Environments. |
base_url |
string | Optional. Override the base URL. Use https://api.ca.pingram.io for the Canada region, and https://api.eu.pingram.io for the EU region. Default: US region. |
* required
Region specific example:
client = Pingram::Client.new(api_key: 'YOUR_API_KEY', base_url: 'https://api.eu.pingram.io')Send
call_send()
Send a notification (email, SMS, etc.) to one user. Requires a notification type which categorizes this messages for future reporting, and channel-specific payloads such as email or sms. Recipient is specified with the to parameter. Returns a trackingId for error or delivery lookup through our Logs.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::SenderPostBody.new # configure as needed
begin result = client.send(body) p resultrescue Pingram::ApiError => e puts "Error when calling call_send: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| sender_post_body | SenderPostBody | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
type |
string | ID of the notification type (e.g. “welcome_email”). Creates a new notification if it does not exist. |
to |
object | Recipient user. Provide id, email, or number to identify the user. |
to.id |
string | Unique user identifier. Required. |
to.email |
string | User’s email address for email notifications. |
to.number |
string | User’s phone number for SMS/call notifications. |
to.pushTokens |
object[] | Mobile push tokens (FCM, APN) for push notifications. |
to.pushTokens[].type |
“FCM” | “APN” | (required) |
to.pushTokens[].token |
string | (required) |
to.pushTokens[].device |
object | (required) |
to.pushTokens[].device.app_id |
string | |
to.pushTokens[].device.ad_id |
string | |
to.pushTokens[].device.device_id |
string | (required) |
to.pushTokens[].device.platform |
string | |
to.pushTokens[].device.manufacturer |
string | |
to.pushTokens[].device.model |
string | |
to.pushTokens[].environment |
string | used by APN to differentiate between sandbox and production builds (sandbox/undefined or production) |
to.webPushTokens |
object[] | Web push subscription config from the browser. |
to.webPushTokens[].sub |
object | (required) Configuration for a Push Subscription. This can be obtained on the frontend by calling serviceWorkerRegistration.pushManager.subscribe(). The expected format is the same output as JSON.stringify’ing a PushSubscription in the browser. |
to.webPushTokens[].sub.endpoint |
string | (required) |
to.webPushTokens[].sub.keys |
object | (required) |
to.webPushTokens[].sub.keys.p256dh |
string | (required) |
to.webPushTokens[].sub.keys.auth |
string | (required) |
to.timezone |
string | User’s timezone (e.g. “America/New_York”) for scheduling. |
to.slackChannel |
string | The destination channel of slack notifications sent to this user. Can be either of the following: - Channel name, e.g. “test” - Channel name with # prefix, e.g. “#test” - Channel ID, e.g. “C1234567890” - User ID for DM, e.g. “U1234567890” - Username with @ prefix, e.g. “@test” |
to.slackToken |
object | |
to.slackToken.access_token |
string | |
to.slackToken.app_id |
string | |
to.slackToken.authed_user |
object | |
to.slackToken.authed_user.access_token |
string | |
to.slackToken.authed_user.expires_in |
number | |
to.slackToken.authed_user.id |
string | |
to.slackToken.authed_user.refresh_token |
string | |
to.slackToken.authed_user.scope |
string | |
to.slackToken.authed_user.token_type |
string | |
to.slackToken.bot_user_id |
string | |
to.slackToken.enterprise |
object | |
to.slackToken.enterprise.id |
string | |
to.slackToken.enterprise.name |
string | |
to.slackToken.error |
string | |
to.slackToken.expires_in |
number | |
to.slackToken.incoming_webhook |
object | |
to.slackToken.incoming_webhook.channel |
string | |
to.slackToken.incoming_webhook.channel_id |
string | |
to.slackToken.incoming_webhook.configuration_url |
string | |
to.slackToken.incoming_webhook.url |
string | |
to.slackToken.is_enterprise_install |
boolean | |
to.slackToken.needed |
string | |
to.slackToken.ok |
boolean | (required) |
to.slackToken.provided |
string | |
to.slackToken.refresh_token |
string | |
to.slackToken.scope |
string | |
to.slackToken.team |
object | |
to.slackToken.team.id |
string | |
to.slackToken.team.name |
string | |
to.slackToken.token_type |
string | |
to.slackToken.warning |
string | |
to.slackToken.response_metadata |
object | |
to.slackToken.response_metadata.warnings |
string[] | |
to.slackToken.response_metadata.next_cursor |
string | |
to.slackToken.response_metadata.scopes |
string[] | |
to.slackToken.response_metadata.acceptedScopes |
string[] | |
to.slackToken.response_metadata.retryAfter |
number | |
to.slackToken.response_metadata.messages |
string[] | |
to.lastSeenTime |
string | Last activity timestamp. Updated automatically. Read-only. |
to.updatedAt |
string | Last update timestamp. Read-only. |
to.createdAt |
string | Creation timestamp. Read-only. |
to.emailSuppressionStatus |
object | Bounce or complaint status if email was suppressed. Read-only. |
to.emailSuppressionStatus.reason |
“Bounce” | “Complaint” | (required) |
to.emailSuppressionStatus.details |
object | (required) |
forceChannels |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | Override which channels to send to (e.g. [“EMAIL”, “SMS”]). Bypasses notification channel config. |
parameters |
Record<string, any> | Key-value pairs for template merge tags. Replaces placeholders like {{firstName}} in templates. |
templateId |
string | Specific template ID to use. If omitted, uses the default template for each channel. |
subNotificationId |
string | Sub-notification identifier (e.g. for grouping related notifications). |
options |
object | Per-channel overrides for send options (email, APN, FCM). |
options.email |
object | Email-specific overrides. |
options.email.replyToAddresses |
string[] | Reply-to addresses for the email. |
options.email.ccAddresses |
string[] | CC recipients. |
options.email.bccAddresses |
string[] | BCC recipients. |
options.email.fromAddress |
string | Override sender email address. |
options.email.fromName |
string | Override sender display name. |
options.email.attachments |
(object | object)[] | File attachments (by URL or inline base64 content). Inline content: ~4 MB raw per file (413 if exceeded). URL url: up to 20 MB per file. |
options.apn |
object | Apple Push Notification (APN) overrides. |
options.apn.expiry |
number | Seconds until the notification expires. |
options.apn.priority |
number | Delivery priority (10 = immediate, 5 = power-saving). |
options.apn.collapseId |
string | Group notifications with the same ID (replaces previous). |
options.apn.threadId |
string | Thread identifier for grouping notifications. |
options.apn.badge |
number | Badge count on app icon. |
options.apn.sound |
string | Sound file name. |
options.apn.contentAvailable |
boolean | Silent background notification (no alert). |
options.fcm |
object | Firebase Cloud Messaging (FCM) overrides. |
options.fcm.android |
object | Android-specific FCM options. |
options.fcm.android.collapseKey |
string | Collapse key for grouping messages. |
options.fcm.android.priority |
“high” | “normal” | Delivery priority. |
options.fcm.android.ttl |
number | Time to live in seconds. |
options.fcm.android.restrictedPackageName |
string | Restrict delivery to a specific package. |
options.push |
object | Cross-platform mobile push options (applied to both APN and FCM). |
options.push.customData |
Record<string, string> | Up to 3 custom string key-value pairs for deep linking. Included in both APN and FCM payloads. |
schedule |
string | |
email |
object | Inline email content (subject, html). Use when not using templates. |
email.subject |
string | (required) Email subject line. |
email.html |
string | (required) HTML body content. |
email.previewText |
string | Preview/snippet text shown in inbox. |
email.senderName |
string | Display name of sender. |
email.senderEmail |
string | Sender email address. |
inapp |
object | Inline in-app content (title, url, image). |
inapp.title |
string | (required) Notification title. |
inapp.url |
string | URL to open when clicked. |
inapp.image |
string | Image URL. |
sms |
object | Inline SMS content (message, autoReply, from, mediaUrls). |
sms.message |
string | SMS/MMS body text. |
sms.mediaUrls |
string[] | Public HTTPS URLs of media to attach (MMS). Carriers fetch these via GET. Total size limits apply per provider. |
sms.autoReply |
object | |
sms.autoReply.message |
string | (required) Auto-reply message to send when user texts in. |
sms.from |
string | Override the sender phone number. Must be a verified number on your account. |
call |
object | Inline call content (message). |
call.message |
string | (required) Text to speak (TTS). |
web_push |
object | Inline web push content (title, message, icon, url). |
web_push.title |
string | (required) Notification title. |
web_push.message |
string | (required) Body text. |
web_push.icon |
string | Icon URL. |
web_push.url |
string | URL to open when clicked. |
mobile_push |
object | Inline mobile push content (title, message). |
mobile_push.title |
string | (required) Notification title. |
mobile_push.message |
string | (required) Body text. |
slack |
object | Inline Slack content (text, blocks, etc.). |
slack.text |
string | (required) Fallback plain text (required when using blocks). |
slack.blocks |
Record<string, any>[] | Slack Block Kit blocks. |
slack.username |
string | Override bot username. |
slack.icon |
string | Icon: emoji (e.g. “:smile:”) or URL. Default: bot’s icon. |
slack.thread_ts |
string | Parent message ts to post in a thread. |
slack.reply_broadcast |
boolean | When true with thread_ts, broadcasts reply to channel. Default: false. |
slack.parse |
“full” | “none” | URL parsing: “full” (clickable links) or “none”. Default: “none”. |
slack.link_names |
boolean | Convert channel and username refs to Slack links. Default: false. |
slack.mrkdwn |
boolean | Enable Slack markup (bold, italic, code). Default: true. |
slack.unfurl_links |
boolean | Unfurl link previews. Default: true. |
slack.unfurl_media |
boolean | Unfurl media previews. Default: true. |
slack.metadata |
object | Slack message metadata with optional work object entities. Combines standard Slack message metadata fields with an array of entity objects. |
slack.metadata.entities |
object[] | An array of work object entities. |
slack.metadata.entities[].entity_type |
string | (required) Entity type (e.g., ‘slack#/entities/task’, ‘slack#/entities/file’). |
slack.metadata.entities[].entity_payload |
Record<string, any> | (required) Schema for the given entity type. |
slack.metadata.entities[].external_ref |
object | (required) Reference used to identify an entity within the developer’s system. |
slack.metadata.entities[].external_ref.id |
string | (required) |
slack.metadata.entities[].external_ref.type |
string | |
slack.metadata.entities[].url |
string | (required) URL used to identify an entity within the developer’s system. |
slack.metadata.entities[].app_unfurl_url |
string | The exact URL posted in the source message. Required in metadata passed to chat.unfurl. |
slack.metadata.event_type |
string | A human readable alphanumeric string representing your application’s metadata event. |
slack.metadata.event_payload |
Record<string, any> | A free-form object containing whatever data your application wishes to attach to messages. |
Return Type
SenderPostResponse
Webhooks
webhooks_create_webhook()
Create a webhook.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::WebhookEndpointUpsertRequest.new # configure as needed
begin result = client.webhooks.webhooks_create_webhook(body) p resultrescue Pingram::ApiError => e puts "Error when calling webhooks_create_webhook: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| webhook_endpoint_upsert_request | WebhookEndpointUpsertRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
webhook |
string | (required) Destination URL that receives webhook event payloads. Must be a valid http(s) URL. |
events |
(“EMAIL_OPEN” | “EMAIL_CLICK” | “EMAIL_FAILED” | “EMAIL_DELIVERED” | “EMAIL_UNSUBSCRIBE” | “EMAIL_INBOUND” | “INAPP_WEB_FAILED” | “INAPP_WEB_UNSUBSCRIBE” | “SMS_DELIVERED” | “SMS_FAILED” | “SMS_UNSUBSCRIBE” | “SMS_SUBSCRIBE” | “SMS_INBOUND” | “PUSH_FAILED” | “PUSH_UNSUBSCRIBE” | “CALL_FAILED” | “CALL_UNSUBSCRIBE” | “WEB_PUSH_FAILED” | “WEB_PUSH_UNSUBSCRIBE” | “SLACK_FAILED” | “SLACK_UNSUBSCRIBE”)[] | (required) List of event types that should be forwarded to the webhook URL. |
Return Type
WebhookEndpoint
webhooks_delete_webhook()
```rubyrequire 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.webhooks.webhooks_delete_webhook p resultrescue Pingram::ApiError => e puts "Error when calling webhooks_delete_webhook: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| endpoint_id | String | Webhook endpoint id |
Return Type
nil (empty response body)
webhooks_list_webhooks()
List webhooks for the current account.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.webhooks.webhooks_list_webhooks p resultrescue Pingram::ApiError => e puts "Error when calling webhooks_list_webhooks: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
WebhookEndpointsResponse
webhooks_update_webhook()
Update a webhook. The signing secret is preserved.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::WebhookEndpointUpsertRequest.new # configure as needed
begin result = client.webhooks.webhooks_update_webhook(body) p resultrescue Pingram::ApiError => e puts "Error when calling webhooks_update_webhook: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| endpoint_id | String | Webhook endpoint id | |
| webhook_endpoint_upsert_request | WebhookEndpointUpsertRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
webhook |
string | (required) Destination URL that receives webhook event payloads. Must be a valid http(s) URL. |
events |
(“EMAIL_OPEN” | “EMAIL_CLICK” | “EMAIL_FAILED” | “EMAIL_DELIVERED” | “EMAIL_UNSUBSCRIBE” | “EMAIL_INBOUND” | “INAPP_WEB_FAILED” | “INAPP_WEB_UNSUBSCRIBE” | “SMS_DELIVERED” | “SMS_FAILED” | “SMS_UNSUBSCRIBE” | “SMS_SUBSCRIBE” | “SMS_INBOUND” | “PUSH_FAILED” | “PUSH_UNSUBSCRIBE” | “CALL_FAILED” | “CALL_UNSUBSCRIBE” | “WEB_PUSH_FAILED” | “WEB_PUSH_UNSUBSCRIBE” | “SLACK_FAILED” | “SLACK_UNSUBSCRIBE”)[] | (required) List of event types that should be forwarded to the webhook URL. |
Return Type
WebhookEndpoint
Accounts
accounts_create_account()
Create an additional account for the authenticated user
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::CreateAccountRequest.new # configure as needed
begin result = client.accounts.accounts_create_account(body) p resultrescue Pingram::ApiError => e puts "Error when calling accounts_create_account: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| create_account_request | CreateAccountRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
name |
string | (required) |
plan |
object | Billing to copy onto a new additional account. |
plan.tier |
“budget_20” | “budget_50” | “budget_100” | “budget_250” | “budget_500” | “budget_1000” | “budget_2000” | “budget_5000” | (required) |
plan.sourceBillingAccountId |
string | (required) Account whose saved payment method is copied onto the new account. The caller must be an owner of this account. |
memberEmails |
string[] | Emails to add or invite to the new account. Existing members of any account the caller belongs to are added directly; everyone else is invited. |
Return Type
CreateAccountResponse
accounts_list_accounts()
List accounts the authenticated user can access
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.accounts.accounts_list_accounts p resultrescue Pingram::ApiError => e puts "Error when calling accounts_list_accounts: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
ListAccountsResponse
Addresses
addresses_create_address()
Create a new email inbox. Omit domain for a built-in @mail.pingram.io address; set domain and displayName for a custom address on a verified domain.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::CreateAddressRequest.new # configure as needed
begin result = client.addresses.addresses_create_address(body) p resultrescue Pingram::ApiError => e puts "Error when calling addresses_create_address: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| create_address_request | CreateAddressRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
prefix |
string | (required) |
domain |
string | |
displayName |
string |
Return Type
AddressResponse
addresses_delete_address()
Delete a custom inbound address. Builtin addresses cannot be deleted.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.addresses.addresses_delete_address p resultrescue Pingram::ApiError => e puts "Error when calling addresses_delete_address: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| full_address | String | Full address to delete (e.g. hello@example.com) |
Return Type
SuccessResponse
addresses_list_addresses()
List email inboxes (addresses) configured for receiving. Custom addresses must use a verified domain.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.addresses.addresses_list_addresses p resultrescue Pingram::ApiError => e puts "Error when calling addresses_list_addresses: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
AccountAddressesResponse
addresses_update_address()
Update an inbox prefix or display name.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::UpdateAddressRequest.new # configure as needed
begin result = client.addresses.addresses_update_address(body) p resultrescue Pingram::ApiError => e puts "Error when calling addresses_update_address: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| update_address_request | UpdateAddressRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
fullAddress |
string | (required) |
prefix |
string | |
displayName |
string |
Return Type
AddressResponse
Domains
domains_add_domain()
Add and start verification for a new sender domain. Pass the domain only (not a full email address).
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::PostSendersRequestBody.new # configure as needed
begin result = client.domains.domains_add_domain(body) p resultrescue Pingram::ApiError => e puts "Error when calling domains_add_domain: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| post_senders_request_body | PostSendersRequestBody | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
sender |
string | (required) |
Return Type
Array<GetSendersResponseInner>
domains_delete_domain()
Remove a sender domain from the account.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.domains.domains_delete_domain p resultrescue Pingram::ApiError => e puts "Error when calling domains_delete_domain: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| sender | String | Sender domain (URL encoded) |
Return Type
SuccessResponse
domains_list_domains()
List sender domains configured for the account (for outbound email).
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.domains.domains_list_domains p resultrescue Pingram::ApiError => e puts "Error when calling domains_list_domains: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
Array<GetSendersResponseInner>
domains_start_domain_verification()
Start SES domain verification (DNS readiness is checked client-side via checkDomainDns)
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.domains.domains_start_domain_verification p resultrescue Pingram::ApiError => e puts "Error when calling domains_start_domain_verification: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| sender | String | Sender domain (URL encoded) |
Return Type
Array<GetSendersResponseInner>
email_delete_suppressions()
Start removing all email suppressions of the given reason (retryable or bounces) for users in the environment. Returns immediately after the job is queued — suppressions are not yet cleared when this response is received. Large removals are processed in the background in batches.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.email.email_delete_suppressions p resultrescue Pingram::ApiError => e puts "Error when calling email_delete_suppressions: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| reason | String | Suppression reason to clear (retryable | bounces) |
Return Type
MessageResponse
email_send()
Send an email. Requires type, to, subject, and html. Optional: fromAddress, fromName, schedule, attachments. The fromAddress must be a verified domain; otherwise our built-in address will be used which is fine for testing purposes.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::SendEmailRequest.new # configure as needed
begin result = client.email.email_send(body) p resultrescue Pingram::ApiError => e puts "Error when calling email_send: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| send_email_request | SendEmailRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
type |
string | (required) The notification type to send. |
to |
string | (required) The email address of the recipient. |
subject |
string | (required) The subject of the email. |
html |
string | (required) The HTML body of the email. |
fromName |
string | The display name of the sender. |
fromAddress |
string | The email address of the sender. |
previewText |
string | The preview text of the email. |
replyToAddresses |
string[] | The reply-to addresses of the email. |
ccAddresses |
string[] | The CC addresses of the email. |
bccAddresses |
string[] | The BCC addresses of the email. |
attachments |
object[] | URL-based file attachments. Up to 20 MB per file. |
attachments[].filename |
string | (required) |
attachments[].url |
string | (required) |
schedule |
string | The ISO 8601 datetime to schedule the email. |
Return Type
SendEmailApiResponse
Environments
environments_list_environments()
Get all environments for the authenticated account
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.environments.environments_list_environments p resultrescue Pingram::ApiError => e puts "Error when calling environments_list_environments: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
Array<GetEnvironmentsResponseInner>
environments_update_environment()
Update environment settings (title, secret, disable sending, secure mode)
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::EnvironmentPatchRequest.new # configure as needed
begin result = client.environments.environments_update_environment(body) p resultrescue Pingram::ApiError => e puts "Error when calling environments_update_environment: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| client_id | String | Environment client ID | |
| environment_patch_request | EnvironmentPatchRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
resetSecret |
boolean | |
disableSending |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | |
title |
string | |
secureMode |
boolean |
Return Type
Environment
Logs
logs_get_log_retention()
Get log retention period in days for the account
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.logs.logs_get_log_retention p resultrescue Pingram::ApiError => e puts "Error when calling logs_get_log_retention: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
LogsRetentionResponse
logs_get_logs()
List recent notification logs for the authenticated account, newest first.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.logs.logs_get_logs p resultrescue Pingram::ApiError => e puts "Error when calling logs_get_logs: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| limit | Float | Maximum number of logs to return (default | [optional] |
| cursor | String | Pagination cursor for next page | [optional] |
Return Type
GetLogsResponse
logs_get_logs_by_tracking_ids()
Get logs by tracking IDs (comma-separated, max 25 IDs). Use after sending email or SMS to look up delivery status.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.logs.logs_get_logs_by_tracking_ids p resultrescue Pingram::ApiError => e puts "Error when calling logs_get_logs_by_tracking_ids: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| tracking_ids | String | Comma-separated tracking IDs (URL encoded) |
Return Type
LogsGetResponse
logs_get_logs_query_result()
Get results from a log query started with Start Log Query. Poll until status is Complete.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.logs.logs_get_logs_query_result p resultrescue Pingram::ApiError => e puts "Error when calling logs_get_logs_query_result: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| query_id | String | Query ID returned by Start Log Query |
Return Type
LogsQueryResultResponse
logs_start_logs_query()
Start an asynchronous log search over a date range. Returns a queryId; poll with Get Log Query Results until status is Complete.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::LogQueryPostBody.new # configure as needed
begin result = client.logs.logs_start_logs_query(body) p resultrescue Pingram::ApiError => e puts "Error when calling logs_start_logs_query: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| log_query_post_body | LogQueryPostBody | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
dateRangeFilter |
number[] | A tuple of [startTime, endTime] for the date range filter, each representing a unix timestamp. |
userFilter |
string | |
envIdFilter |
string[] | |
statusFilter |
string | |
channelFilter |
(“email” | “inapp” | “sms” | “call” | “voice” | “web_push” | “mobile_push” | “slack”)[] | |
notificationFilter |
string[] |
Return Type
LogsQueryResponse
logs_tail_logs()
Get last 100 logs from the stream
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.logs.logs_tail_logs p resultrescue Pingram::ApiError => e puts "Error when calling logs_tail_logs: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
LogsTailResponse
Numbers
numbers_list()
List active phone numbers registered for the account, including voice agent binding state.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.numbers.numbers_list p resultrescue Pingram::ApiError => e puts "Error when calling numbers_list: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
ListPhoneNumbersResponse
numbers_list_released()
List released phone numbers. Released numbers may be purchased again with 2 weeks of being released. Released numbers may be removed from released list after 2 weeks.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.numbers.numbers_list_released p resultrescue Pingram::ApiError => e puts "Error when calling numbers_list_released: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
ListReleasedPhoneNumbersResponse
numbers_order_number()
Purchase a phone number for the authenticated account, or reactivate a released number owned by the account (preserves original createdAt). Pass phoneNumber in E.164 format (e.g. +15551234567).
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::OrderPhoneNumberRequest.new # configure as needed
begin result = client.numbers.numbers_order_number(body) p resultrescue Pingram::ApiError => e puts "Error when calling numbers_order_number: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| order_phone_number_request | OrderPhoneNumberRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
phoneNumber |
string | (required) E.164 from search results |
Return Type
OrderPhoneNumberResponse
numbers_release_number()
Release a phone number from the account. No refund for the current billing month.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.numbers.numbers_release_number p resultrescue Pingram::ApiError => e puts "Error when calling numbers_release_number: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| phone_number | String | E.164 phone number to release |
Return Type
ReleasePhoneNumberResponse
numbers_search_available()
Search for available phone numbers to purchase. Requires countryCode (e.g. US, CA). Use before ordering a number.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.numbers.numbers_search_available p resultrescue Pingram::ApiError => e puts "Error when calling numbers_search_available: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| country_code | String | ISO 3166-1 alpha-2 country code (e.g., US, CA) | |
| features | String | Comma-separated | [optional] |
| area_code | String | National destination / area code filter | [optional] |
| limit | Float | Max results (default 10, max 50) | [optional] |
Return Type
SearchAvailablePhoneNumbersResponse
Profile
profile_accept_invite()
Accept a team invitation using a token
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::AcceptInviteRequest.new # configure as needed
begin result = client.profile.profile_accept_invite(body) p resultrescue Pingram::ApiError => e puts "Error when calling profile_accept_invite: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| accept_invite_request | AcceptInviteRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
token |
string | (required) |
Return Type
AcceptInviteResponse
profile_change_email()
Change the email address of the authenticated user
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::ChangeEmailRequest.new # configure as needed
begin result = client.profile.profile_change_email(body) p resultrescue Pingram::ApiError => e puts "Error when calling profile_change_email: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| change_email_request | ChangeEmailRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
newEmail |
string | (required) |
Return Type
SuccessResponse
profile_delete_account()
Permanently delete the authenticated user’s account
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::DeleteAccountRequest.new # configure as needed
begin result = client.profile.profile_delete_account(body) p resultrescue Pingram::ApiError => e puts "Error when calling profile_delete_account: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| delete_account_request | DeleteAccountRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
reason |
string |
Return Type
SuccessResponse
profile_disable_mfa()
Disable MFA for the authenticated user
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.profile.profile_disable_mfa p resultrescue Pingram::ApiError => e puts "Error when calling profile_disable_mfa: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| type | String | MFA type (e.g. SOFTWARE_TOKEN_MFA) |
Return Type
SuccessResponse
profile_get_mfa_status()
Get MFA status for the authenticated user
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.profile.profile_get_mfa_status p resultrescue Pingram::ApiError => e puts "Error when calling profile_get_mfa_status: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
MFAStatusResponse
profile_setup_mfa()
Start TOTP MFA setup and return QR code data
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::MFASetupRequest.new # configure as needed
begin result = client.profile.profile_setup_mfa(body) p resultrescue Pingram::ApiError => e puts "Error when calling profile_setup_mfa: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| mfa_setup_request | MFASetupRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
type |
“SOFTWARE_TOKEN_MFA” | (required) MFA methods supported by the profile MFA API. |
Return Type
MFASetupResponse
profile_verify_mfa()
Verify TOTP code and enable MFA
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::MFAVerifyRequest.new # configure as needed
begin result = client.profile.profile_verify_mfa(body) p resultrescue Pingram::ApiError => e puts "Error when calling profile_verify_mfa: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| mfa_verify_request | MFAVerifyRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
type |
“SOFTWARE_TOKEN_MFA” | (required) MFA methods supported by the profile MFA API. |
code |
string | (required) |
session |
string | (required) |
Return Type
SuccessResponse
Registrations
registrations_create_us10dlc_brand()
Create a new 10DLC brand registration. Sets brandStatus to pending_review; Pingram handles carrier submission after review.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::TenDlcBrandCreateRequest.new # configure as needed
begin result = client.registrations.registrations_create_us10dlc_brand(body) p resultrescue Pingram::ApiError => e puts "Error when calling registrations_create_us10dlc_brand: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ten_dlc_brand_create_request | TenDlcBrandCreateRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
scenarioId |
“own_brand” | “client_brand” | (required) Who the 10DLC brand is registered for. - own_brand: personal or company project - client_brand: agency or contractor |
businessType |
“PRIVATE_PROFIT” | “SOLE_PROPRIETOR” | “PUBLIC_PROFIT” | “NON_PROFIT” | “GOVERNMENT” | (required) Legal entity type for a 10DLC brand. - PRIVATE_PROFIT: private for-profit (LLC, corp, etc.) - SOLE_PROPRIETOR: sole proprietorship - PUBLIC_PROFIT: publicly traded for-profit - NON_PROFIT: non-profit - GOVERNMENT: government |
legalName |
string | Official registered legal business name. For SOLE_PROPRIETOR, optional DBA or trade name (defaults to firstName and lastName). |
displayName |
string | (required) Public brand name shown to recipients and carriers. Use the name customers recognize (your DBA or trade name). For companies with no DBA, use the same value as legalName. For SOLE_PROPRIETOR, this is the brand you send as — not the individual’s legal name (set firstName and lastName for that). If the sole proprietor has no DBA, use first and last name. |
firstName |
string | Legal first name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
lastName |
string | Legal last name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
taxId |
string | For US companies (country US): 9-digit EIN (Employer Identification Number). For Canada (country CA): 9-digit BN (Business Number). For other countries: national business tax identifier. Required except when businessType is SOLE_PROPRIETOR. |
website |
string | (required) Public website for the brand. Include a scheme (https://) or a domain; https:// is prepended when omitted. Carriers expect a working site with privacy policy and terms. |
country |
string | (required) ISO 3166-1 alpha-2 country of incorporation (for example US or CA). |
street |
string | (required) Street address that matches official tax registration. |
city |
string | (required) City that matches official tax registration. |
state |
string | (required) State (US) or province (CA) that matches official tax registration. |
postalCode |
string | (required) ZIP code (US) or postal code (CA) that matches official tax registration. |
complianceContactEmail |
string | (required) Email for the 10DLC compliance contact. Used for carrier and registration follow-up. |
complianceContactPhone |
string | (required) Phone number for the 10DLC compliance contact. E.164 preferred; national numbers are normalized using country. |
Return Type
TenDlcBrandRegistration
registrations_get_us10dlc_brand()
Get the 10DLC brand registration for the authenticated account. Returns null when no registration exists yet.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.registrations.registrations_get_us10dlc_brand p resultrescue Pingram::ApiError => e puts "Error when calling registrations_get_us10dlc_brand: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
TenDlcBrandRegistration
registrations_get_us10dlc_campaign()
Get the 10DLC campaign registration for the authenticated account. Returns null when no brand registration exists yet.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.registrations.registrations_get_us10dlc_campaign p resultrescue Pingram::ApiError => e puts "Error when calling registrations_get_us10dlc_campaign: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
TenDlcCampaignRegistration
registrations_update_us10dlc_brand()
Update an existing 10DLC brand registration. Business fields are editable before carrier submission; workflow status is managed by Pingram.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::TenDlcBrandUpdateRequest.new # configure as needed
begin result = client.registrations.registrations_update_us10dlc_brand(body) p resultrescue Pingram::ApiError => e puts "Error when calling registrations_update_us10dlc_brand: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ten_dlc_brand_update_request | TenDlcBrandUpdateRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
scenarioId |
“own_brand” | “client_brand” | Who the 10DLC brand is registered for. - own_brand: personal or company project - client_brand: agency or contractor |
businessType |
“PRIVATE_PROFIT” | “SOLE_PROPRIETOR” | “PUBLIC_PROFIT” | “NON_PROFIT” | “GOVERNMENT” | Legal entity type for a 10DLC brand. - PRIVATE_PROFIT: private for-profit (LLC, corp, etc.) - SOLE_PROPRIETOR: sole proprietorship - PUBLIC_PROFIT: publicly traded for-profit - NON_PROFIT: non-profit - GOVERNMENT: government |
legalName |
string | Official registered legal business name. For SOLE_PROPRIETOR, optional DBA or trade name (defaults to firstName and lastName). |
displayName |
string | Public brand name shown to recipients and carriers. Use the name customers recognize (your DBA or trade name). For SOLE_PROPRIETOR, this is the brand you send as — not the individual’s legal name. Omit to keep the existing value. If you change legalName and omit displayName, displayName is reset to the new legalName. |
firstName |
string | Legal first name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
lastName |
string | Legal last name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
taxId |
string | For US companies (country US): 9-digit EIN (Employer Identification Number). For Canada (country CA): 9-digit BN (Business Number). For other countries: national business tax identifier. Required except when businessType is SOLE_PROPRIETOR. |
website |
string | Public website for the brand. Include a scheme (https://) or a domain; https:// is prepended when omitted. Carriers expect a working site with privacy policy and terms. |
country |
string | ISO 3166-1 alpha-2 country of incorporation (for example US or CA). |
street |
string | Street address that matches official tax registration. |
city |
string | City that matches official tax registration. |
state |
string | State (US) or province (CA) that matches official tax registration. |
postalCode |
string | ZIP code (US) or postal code (CA) that matches official tax registration. |
complianceContactEmail |
string | Email for the 10DLC compliance contact. Used for carrier and registration follow-up. |
complianceContactPhone |
string | Phone number for the 10DLC compliance contact. E.164 preferred; national numbers are normalized using country. |
Return Type
TenDlcBrandRegistration
registrations_update_us10dlc_campaign()
Update an existing 10DLC campaign registration. Campaign fields are editable before carrier submission; workflow status is managed by Pingram.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::TenDlcCampaignUpdateRequest.new # configure as needed
begin result = client.registrations.registrations_update_us10dlc_campaign(body) p resultrescue Pingram::ApiError => e puts "Error when calling registrations_update_us10dlc_campaign: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ten_dlc_campaign_update_request | TenDlcCampaignUpdateRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
campaignDescription |
string | Summary of what this campaign sends and why, including audience and typical message content. Required before carrier submission. |
campaignSample1 |
string | Example SMS that represents actual campaign traffic. Required before carrier submission. Should match the use case and typically identify the brand and include STOP/HELP language. |
campaignSample2 |
string | Second example SMS. Required before carrier submission. Required for MARKETING and MIXED use cases. |
campaignSample3 |
string | Optional third example SMS. |
campaignSample4 |
string | Optional fourth example SMS. |
campaignMessageFlow |
string | How recipients opt in (for example website form, checkout, or keyword). Describe the call-to-action and where consent is collected. Required before carrier submission. |
campaignOptinKeywords |
string | Extra opt-in keywords as a comma-separated list. START is always included. |
campaignOptinMessage |
string | Auto-reply sent when a recipient opts in. Required before carrier submission. Should confirm the subscription, mention message frequency, and include STOP and HELP instructions. |
campaignOptoutKeywords |
string | Extra opt-out keywords as a comma-separated list. STOP is always included. |
campaignOptoutMessage |
string | Auto-reply sent when a recipient opts out. Required before carrier submission. Should confirm they will receive no further messages. |
campaignHelpKeywords |
string | Extra help keywords as a comma-separated list. HELP is always included. |
campaignHelpMessage |
string | Auto-reply sent when a recipient texts a help keyword. Required before carrier submission. Should include a support contact (email and/or phone). |
campaignEmbeddedLink |
boolean | Whether campaign messages include URLs. |
campaignEmbeddedLinkUrl |
string | Sample URL that appears in messages. Provide when campaignEmbeddedLink is true. |
campaignEmbeddedPhone |
boolean | Whether campaign messages include phone numbers. |
campaignAgeGated |
boolean | Whether campaign content is age-restricted (18+). |
campaignDirectLending |
boolean | Whether the campaign relates to direct lending or loan products. |
campaignPrivacyPolicyLink |
string | Public URL of the privacy policy that covers this SMS program. |
campaignTermsAndConditionsLink |
string | Public URL of the terms and conditions that cover this SMS program. |
campaignUsecase |
string | 10DLC campaign use case submitted to carriers. Required before carrier submission. One of 2FA, ACCOUNT_NOTIFICATION, CUSTOMER_CARE, DELIVERY_NOTIFICATION, FRAUD_ALERT, MARKETING, MIXED, POLLING_VOTING, PUBLIC_SERVICE_ANNOUNCEMENT, or SECURITY_ALERT. For MIXED, append comma-separated sub-use cases after MIXED (sub-use cases cannot include MIXED), for example MIXED,2FA,ACCOUNT_NOTIFICATION. |
Return Type
TenDlcCampaignRegistration
Sender
sender_delete_schedule()
Delete (unschedule) an already scheduled notification
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.sender.sender_delete_schedule p resultrescue Pingram::ApiError => e puts "Error when calling sender_delete_schedule: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| tracking_id | String | The tracking ID of the scheduled notification |
Return Type
MessageResponse
sender_update_schedule()
Update the body or schedule of an already scheduled notification.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::SenderPostBody.new # configure as needed
begin result = client.sender.sender_update_schedule(body) p resultrescue Pingram::ApiError => e puts "Error when calling sender_update_schedule: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| tracking_id | String | The tracking ID of the scheduled notification | |
| sender_post_body | SenderPostBody | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
type |
string | ID of the notification type (e.g. “welcome_email”). Creates a new notification if it does not exist. |
to |
object | Recipient user. Provide id, email, or number to identify the user. |
to.id |
string | Unique user identifier. Required. |
to.email |
string | User’s email address for email notifications. |
to.number |
string | User’s phone number for SMS/call notifications. |
to.pushTokens |
object[] | Mobile push tokens (FCM, APN) for push notifications. |
to.pushTokens[].type |
“FCM” | “APN” | (required) |
to.pushTokens[].token |
string | (required) |
to.pushTokens[].device |
object | (required) |
to.pushTokens[].device.app_id |
string | |
to.pushTokens[].device.ad_id |
string | |
to.pushTokens[].device.device_id |
string | (required) |
to.pushTokens[].device.platform |
string | |
to.pushTokens[].device.manufacturer |
string | |
to.pushTokens[].device.model |
string | |
to.pushTokens[].environment |
string | used by APN to differentiate between sandbox and production builds (sandbox/undefined or production) |
to.webPushTokens |
object[] | Web push subscription config from the browser. |
to.webPushTokens[].sub |
object | (required) Configuration for a Push Subscription. This can be obtained on the frontend by calling serviceWorkerRegistration.pushManager.subscribe(). The expected format is the same output as JSON.stringify’ing a PushSubscription in the browser. |
to.webPushTokens[].sub.endpoint |
string | (required) |
to.webPushTokens[].sub.keys |
object | (required) |
to.webPushTokens[].sub.keys.p256dh |
string | (required) |
to.webPushTokens[].sub.keys.auth |
string | (required) |
to.timezone |
string | User’s timezone (e.g. “America/New_York”) for scheduling. |
to.slackChannel |
string | The destination channel of slack notifications sent to this user. Can be either of the following: - Channel name, e.g. “test” - Channel name with # prefix, e.g. “#test” - Channel ID, e.g. “C1234567890” - User ID for DM, e.g. “U1234567890” - Username with @ prefix, e.g. “@test” |
to.slackToken |
object | |
to.slackToken.access_token |
string | |
to.slackToken.app_id |
string | |
to.slackToken.authed_user |
object | |
to.slackToken.authed_user.access_token |
string | |
to.slackToken.authed_user.expires_in |
number | |
to.slackToken.authed_user.id |
string | |
to.slackToken.authed_user.refresh_token |
string | |
to.slackToken.authed_user.scope |
string | |
to.slackToken.authed_user.token_type |
string | |
to.slackToken.bot_user_id |
string | |
to.slackToken.enterprise |
object | |
to.slackToken.enterprise.id |
string | |
to.slackToken.enterprise.name |
string | |
to.slackToken.error |
string | |
to.slackToken.expires_in |
number | |
to.slackToken.incoming_webhook |
object | |
to.slackToken.incoming_webhook.channel |
string | |
to.slackToken.incoming_webhook.channel_id |
string | |
to.slackToken.incoming_webhook.configuration_url |
string | |
to.slackToken.incoming_webhook.url |
string | |
to.slackToken.is_enterprise_install |
boolean | |
to.slackToken.needed |
string | |
to.slackToken.ok |
boolean | (required) |
to.slackToken.provided |
string | |
to.slackToken.refresh_token |
string | |
to.slackToken.scope |
string | |
to.slackToken.team |
object | |
to.slackToken.team.id |
string | |
to.slackToken.team.name |
string | |
to.slackToken.token_type |
string | |
to.slackToken.warning |
string | |
to.slackToken.response_metadata |
object | |
to.slackToken.response_metadata.warnings |
string[] | |
to.slackToken.response_metadata.next_cursor |
string | |
to.slackToken.response_metadata.scopes |
string[] | |
to.slackToken.response_metadata.acceptedScopes |
string[] | |
to.slackToken.response_metadata.retryAfter |
number | |
to.slackToken.response_metadata.messages |
string[] | |
to.lastSeenTime |
string | Last activity timestamp. Updated automatically. Read-only. |
to.updatedAt |
string | Last update timestamp. Read-only. |
to.createdAt |
string | Creation timestamp. Read-only. |
to.emailSuppressionStatus |
object | Bounce or complaint status if email was suppressed. Read-only. |
to.emailSuppressionStatus.reason |
“Bounce” | “Complaint” | (required) |
to.emailSuppressionStatus.details |
object | (required) |
forceChannels |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | Override which channels to send to (e.g. [“EMAIL”, “SMS”]). Bypasses notification channel config. |
parameters |
Record<string, any> | Key-value pairs for template merge tags. Replaces placeholders like {{firstName}} in templates. |
templateId |
string | Specific template ID to use. If omitted, uses the default template for each channel. |
subNotificationId |
string | Sub-notification identifier (e.g. for grouping related notifications). |
options |
object | Per-channel overrides for send options (email, APN, FCM). |
options.email |
object | Email-specific overrides. |
options.email.replyToAddresses |
string[] | Reply-to addresses for the email. |
options.email.ccAddresses |
string[] | CC recipients. |
options.email.bccAddresses |
string[] | BCC recipients. |
options.email.fromAddress |
string | Override sender email address. |
options.email.fromName |
string | Override sender display name. |
options.email.attachments |
(object | object)[] | File attachments (by URL or inline base64 content). Inline content: ~4 MB raw per file (413 if exceeded). URL url: up to 20 MB per file. |
options.apn |
object | Apple Push Notification (APN) overrides. |
options.apn.expiry |
number | Seconds until the notification expires. |
options.apn.priority |
number | Delivery priority (10 = immediate, 5 = power-saving). |
options.apn.collapseId |
string | Group notifications with the same ID (replaces previous). |
options.apn.threadId |
string | Thread identifier for grouping notifications. |
options.apn.badge |
number | Badge count on app icon. |
options.apn.sound |
string | Sound file name. |
options.apn.contentAvailable |
boolean | Silent background notification (no alert). |
options.fcm |
object | Firebase Cloud Messaging (FCM) overrides. |
options.fcm.android |
object | Android-specific FCM options. |
options.fcm.android.collapseKey |
string | Collapse key for grouping messages. |
options.fcm.android.priority |
“high” | “normal” | Delivery priority. |
options.fcm.android.ttl |
number | Time to live in seconds. |
options.fcm.android.restrictedPackageName |
string | Restrict delivery to a specific package. |
options.push |
object | Cross-platform mobile push options (applied to both APN and FCM). |
options.push.customData |
Record<string, string> | Up to 3 custom string key-value pairs for deep linking. Included in both APN and FCM payloads. |
schedule |
string | |
email |
object | Inline email content (subject, html). Use when not using templates. |
email.subject |
string | (required) Email subject line. |
email.html |
string | (required) HTML body content. |
email.previewText |
string | Preview/snippet text shown in inbox. |
email.senderName |
string | Display name of sender. |
email.senderEmail |
string | Sender email address. |
inapp |
object | Inline in-app content (title, url, image). |
inapp.title |
string | (required) Notification title. |
inapp.url |
string | URL to open when clicked. |
inapp.image |
string | Image URL. |
sms |
object | Inline SMS content (message, autoReply, from, mediaUrls). |
sms.message |
string | SMS/MMS body text. |
sms.mediaUrls |
string[] | Public HTTPS URLs of media to attach (MMS). Carriers fetch these via GET. Total size limits apply per provider. |
sms.autoReply |
object | |
sms.autoReply.message |
string | (required) Auto-reply message to send when user texts in. |
sms.from |
string | Override the sender phone number. Must be a verified number on your account. |
call |
object | Inline call content (message). |
call.message |
string | (required) Text to speak (TTS). |
web_push |
object | Inline web push content (title, message, icon, url). |
web_push.title |
string | (required) Notification title. |
web_push.message |
string | (required) Body text. |
web_push.icon |
string | Icon URL. |
web_push.url |
string | URL to open when clicked. |
mobile_push |
object | Inline mobile push content (title, message). |
mobile_push.title |
string | (required) Notification title. |
mobile_push.message |
string | (required) Body text. |
slack |
object | Inline Slack content (text, blocks, etc.). |
slack.text |
string | (required) Fallback plain text (required when using blocks). |
slack.blocks |
Record<string, any>[] | Slack Block Kit blocks. |
slack.username |
string | Override bot username. |
slack.icon |
string | Icon: emoji (e.g. “:smile:”) or URL. Default: bot’s icon. |
slack.thread_ts |
string | Parent message ts to post in a thread. |
slack.reply_broadcast |
boolean | When true with thread_ts, broadcasts reply to channel. Default: false. |
slack.parse |
“full” | “none” | URL parsing: “full” (clickable links) or “none”. Default: “none”. |
slack.link_names |
boolean | Convert channel and username refs to Slack links. Default: false. |
slack.mrkdwn |
boolean | Enable Slack markup (bold, italic, code). Default: true. |
slack.unfurl_links |
boolean | Unfurl link previews. Default: true. |
slack.unfurl_media |
boolean | Unfurl media previews. Default: true. |
slack.metadata |
object | Slack message metadata with optional work object entities. Combines standard Slack message metadata fields with an array of entity objects. |
slack.metadata.entities |
object[] | An array of work object entities. |
slack.metadata.entities[].entity_type |
string | (required) Entity type (e.g., ‘slack#/entities/task’, ‘slack#/entities/file’). |
slack.metadata.entities[].entity_payload |
Record<string, any> | (required) Schema for the given entity type. |
slack.metadata.entities[].external_ref |
object | (required) Reference used to identify an entity within the developer’s system. |
slack.metadata.entities[].external_ref.id |
string | (required) |
slack.metadata.entities[].external_ref.type |
string | |
slack.metadata.entities[].url |
string | (required) URL used to identify an entity within the developer’s system. |
slack.metadata.entities[].app_unfurl_url |
string | The exact URL posted in the source message. Required in metadata passed to chat.unfurl. |
slack.metadata.event_type |
string | A human readable alphanumeric string representing your application’s metadata event. |
slack.metadata.event_payload |
Record<string, any> | A free-form object containing whatever data your application wishes to attach to messages. |
Return Type
MessageResponse
Sms
sms_send()
Send an SMS or MMS directly without a template. Requires type and to. Pass message and/or mediaUrls. Optional: from, schedule.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::SendSmsRequest.new # configure as needed
begin result = client.sms.sms_send(body) p resultrescue Pingram::ApiError => e puts "Error when calling sms_send: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| send_sms_request | SendSmsRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
type |
string | (required) The notification type to send. |
to |
string | (required) The phone number of the recipient. |
message |
string | The message of the SMS or MMS notification. Optional when mediaUrls is provided. |
mediaUrls |
string[] | Public HTTPS URLs of media to attach (MMS). |
schedule |
string | The ISO 8601 datetime to schedule the SMS notification. |
from |
string | Override the sender phone number. Must be a dedicated number on your Pingram account. |
Return Type
SendSmsResponse
Templates
templates_create_template()
Create a new template for a notification
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::TemplatePostRequest.new # configure as needed
begin result = client.templates.templates_create_template(body) p resultrescue Pingram::ApiError => e puts "Error when calling templates_create_template: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | Notification ID | |
| channel | String | Channel type | |
| template_post_request | TemplatePostRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
templateId |
string | (required) Unique ID for this template within the notification and channel. Required. |
html |
string | HTML body of the email. |
previewText |
string | Preview text (e.g. for inbox). |
internal |
string | Internal editor representation of the email content (e.g. Bee or Redactor JSON). Used for editing and component embedding; the actual email sent to recipients uses the html field. |
subject |
string | Email subject line. |
senderName |
string | Sender display name. |
senderEmail |
string | Sender email address. |
title |
string | Notification title (in-app). |
redirectURL |
string | URL to open when the user taps the notification. |
imageURL |
string | Image URL shown in the in-app notification. |
instant |
object | Copy for instant (real-time) delivery. |
instant.title |
string | |
instant.redirectURL |
string | |
instant.imageURL |
string | (required) |
batch |
object | Copy for batch delivery. |
batch.title |
string | (required) |
batch.redirectURL |
string | (required) |
batch.imageURL |
string | (required) |
text |
string | Message text (SMS or call). |
message |
string | Push notification body text. (title is shared with INAPP_WEB above.) |
icon |
string | Web push: icon URL. Slack: bot icon (emoji or URL). |
url |
string | Web push: URL to open when the notification is clicked. |
blocks |
Record<string, any>[] | Slack message blocks (optional). |
username |
string | Slack bot username. |
Return Type
Template
templates_delete_template()
```rubyrequire 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.templates.templates_delete_template p resultrescue Pingram::ApiError => e puts "Error when calling templates_delete_template: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | Notification ID | |
| channel | String | Channel type | |
| template_id | String | Template ID |
Return Type
nil (empty response body)
templates_get_template()
Get a single template by ID
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.templates.templates_get_template p resultrescue Pingram::ApiError => e puts "Error when calling templates_get_template: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | Notification ID | |
| channel | String | Channel type | |
| template_id | String | Template ID |
Return Type
GetTemplatesResponse
templates_list_templates()
List all templates for a notification and channel
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.templates.templates_list_templates p resultrescue Pingram::ApiError => e puts "Error when calling templates_list_templates: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | Notification ID | |
| channel | String | Channel type |
Return Type
Array<GetTemplatesListResponseInner>
templates_set_default_template()
Set a template as default for specific delivery modes
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::SetDefaultTemplateRequest.new # configure as needed
begin result = client.templates.templates_set_default_template(body) p resultrescue Pingram::ApiError => e puts "Error when calling templates_set_default_template: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | Notification ID | |
| channel | String | Channel type | |
| set_default_template_request | SetDefaultTemplateRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
templateId |
string | (required) |
modes |
(“instant” | “hourly” | “daily” | “weekly” | “monthly”)[] | (required) |
Return Type
Template
templates_update_template()
Update a template’s properties
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::TemplatePatchRequest.new # configure as needed
begin result = client.templates.templates_update_template(body) p resultrescue Pingram::ApiError => e puts "Error when calling templates_update_template: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | Notification ID | |
| channel | String | Channel type | |
| template_id | String | Template ID | |
| template_patch_request | TemplatePatchRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
html |
string | HTML body of the email. |
previewText |
string | Preview text (e.g. for inbox). |
internal |
string | Internal editor representation of the email content (e.g. Bee or Redactor JSON). Used for editing and component embedding; the actual email sent to recipients uses the html field. |
subject |
string | Email subject line. |
senderName |
string | Sender display name. |
senderEmail |
string | Sender email address. |
title |
string | Notification title (in-app). |
redirectURL |
string | URL to open when the user taps the notification. |
imageURL |
string | Image URL shown in the in-app notification. |
instant |
object | Copy for instant (real-time) delivery. |
instant.title |
string | |
instant.redirectURL |
string | |
instant.imageURL |
string | (required) |
batch |
object | Copy for batch delivery. |
batch.title |
string | (required) |
batch.redirectURL |
string | (required) |
batch.imageURL |
string | (required) |
text |
string | Message text (SMS or call). |
message |
string | Push notification body text. (title is shared with INAPP_WEB above.) |
icon |
string | Web push: icon URL. Slack: bot icon (emoji or URL). |
url |
string | Web push: URL to open when the notification is clicked. |
blocks |
Record<string, any>[] | Slack message blocks (optional). |
username |
string | Slack bot username. |
Return Type
Template
Types
types_create_notification_type()
Create a new notification
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::NotificationCreateRequest.new # configure as needed
begin result = client.types.types_create_notification_type(body) p resultrescue Pingram::ApiError => e puts "Error when calling types_create_notification_type: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_create_request | NotificationCreateRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
notificationId |
string | (required) |
title |
string | (required) |
channels |
string[] | (required) |
options |
object | |
options.EMAIL |
object | |
options.EMAIL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.EMAIL.off |
object | |
options.EMAIL.off.enabled |
boolean | (required) |
options.EMAIL.instant |
object | |
options.EMAIL.instant.enabled |
boolean | (required) |
options.EMAIL.hourly |
object | |
options.EMAIL.hourly.enabled |
boolean | (required) |
options.EMAIL.daily |
object | |
options.EMAIL.daily.enabled |
boolean | (required) |
options.EMAIL.daily.hour |
string | |
options.EMAIL.weekly |
object | |
options.EMAIL.weekly.enabled |
boolean | (required) |
options.EMAIL.weekly.hour |
string | |
options.EMAIL.weekly.day |
string | |
options.EMAIL.monthly |
object | |
options.EMAIL.monthly.enabled |
boolean | (required) |
options.EMAIL.monthly.hour |
string | |
options.EMAIL.monthly.date |
“first” | “last” | |
options.INAPP_WEB |
object | |
options.INAPP_WEB.defaultDeliveryOption |
“off” | “instant” | (required) |
options.INAPP_WEB.off |
object | |
options.INAPP_WEB.off.enabled |
boolean | (required) |
options.INAPP_WEB.instant |
object | |
options.INAPP_WEB.instant.enabled |
boolean | (required) |
options.INAPP_WEB.instant.batching |
boolean | |
options.INAPP_WEB.instant.batchingKey |
string | |
options.INAPP_WEB.instant.batchingWindow |
number | |
options.SMS |
object | |
options.SMS.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SMS.off |
object | |
options.SMS.off.enabled |
boolean | (required) |
options.SMS.instant |
object | |
options.SMS.instant.enabled |
boolean | (required) |
options.SMS.hourly |
object | |
options.SMS.hourly.enabled |
boolean | (required) |
options.SMS.daily |
object | |
options.SMS.daily.enabled |
boolean | (required) |
options.SMS.daily.hour |
string | |
options.SMS.weekly |
object | |
options.SMS.weekly.enabled |
boolean | (required) |
options.SMS.weekly.hour |
string | |
options.SMS.weekly.day |
string | |
options.SMS.monthly |
object | |
options.SMS.monthly.enabled |
boolean | (required) |
options.SMS.monthly.hour |
string | |
options.SMS.monthly.date |
“first” | “last” | |
options.CALL |
object | |
options.CALL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.CALL.off |
object | |
options.CALL.off.enabled |
boolean | (required) |
options.CALL.instant |
object | |
options.CALL.instant.enabled |
boolean | (required) |
options.CALL.hourly |
object | |
options.CALL.hourly.enabled |
boolean | (required) |
options.CALL.daily |
object | |
options.CALL.daily.enabled |
boolean | (required) |
options.CALL.daily.hour |
string | |
options.CALL.weekly |
object | |
options.CALL.weekly.enabled |
boolean | (required) |
options.CALL.weekly.hour |
string | |
options.CALL.weekly.day |
string | |
options.CALL.monthly |
object | |
options.CALL.monthly.enabled |
boolean | (required) |
options.CALL.monthly.hour |
string | |
options.CALL.monthly.date |
“first” | “last” | |
options.VOICE |
object | |
options.VOICE.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.VOICE.off |
object | |
options.VOICE.off.enabled |
boolean | (required) |
options.VOICE.instant |
object | |
options.VOICE.instant.enabled |
boolean | (required) |
options.VOICE.hourly |
object | |
options.VOICE.hourly.enabled |
boolean | (required) |
options.VOICE.daily |
object | |
options.VOICE.daily.enabled |
boolean | (required) |
options.VOICE.daily.hour |
string | |
options.VOICE.weekly |
object | |
options.VOICE.weekly.enabled |
boolean | (required) |
options.VOICE.weekly.hour |
string | |
options.VOICE.weekly.day |
string | |
options.VOICE.monthly |
object | |
options.VOICE.monthly.enabled |
boolean | (required) |
options.VOICE.monthly.hour |
string | |
options.VOICE.monthly.date |
“first” | “last” | |
options.PUSH |
object | |
options.PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.PUSH.off |
object | |
options.PUSH.off.enabled |
boolean | (required) |
options.PUSH.instant |
object | |
options.PUSH.instant.enabled |
boolean | (required) |
options.PUSH.hourly |
object | |
options.PUSH.hourly.enabled |
boolean | (required) |
options.PUSH.daily |
object | |
options.PUSH.daily.enabled |
boolean | (required) |
options.PUSH.daily.hour |
string | |
options.PUSH.weekly |
object | |
options.PUSH.weekly.enabled |
boolean | (required) |
options.PUSH.weekly.hour |
string | |
options.PUSH.weekly.day |
string | |
options.PUSH.monthly |
object | |
options.PUSH.monthly.enabled |
boolean | (required) |
options.PUSH.monthly.hour |
string | |
options.PUSH.monthly.date |
“first” | “last” | |
options.WEB_PUSH |
object | |
options.WEB_PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.WEB_PUSH.off |
object | |
options.WEB_PUSH.off.enabled |
boolean | (required) |
options.WEB_PUSH.instant |
object | |
options.WEB_PUSH.instant.enabled |
boolean | (required) |
options.WEB_PUSH.hourly |
object | |
options.WEB_PUSH.hourly.enabled |
boolean | (required) |
options.WEB_PUSH.daily |
object | |
options.WEB_PUSH.daily.enabled |
boolean | (required) |
options.WEB_PUSH.daily.hour |
string | |
options.WEB_PUSH.weekly |
object | |
options.WEB_PUSH.weekly.enabled |
boolean | (required) |
options.WEB_PUSH.weekly.hour |
string | |
options.WEB_PUSH.weekly.day |
string | |
options.WEB_PUSH.monthly |
object | |
options.WEB_PUSH.monthly.enabled |
boolean | (required) |
options.WEB_PUSH.monthly.hour |
string | |
options.WEB_PUSH.monthly.date |
“first” | “last” | |
options.SLACK |
object | |
options.SLACK.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SLACK.off |
object | |
options.SLACK.off.enabled |
boolean | (required) |
options.SLACK.instant |
object | |
options.SLACK.instant.enabled |
boolean | (required) |
options.SLACK.hourly |
object | |
options.SLACK.hourly.enabled |
boolean | (required) |
options.SLACK.daily |
object | |
options.SLACK.daily.enabled |
boolean | (required) |
options.SLACK.daily.hour |
string | |
options.SLACK.weekly |
object | |
options.SLACK.weekly.enabled |
boolean | (required) |
options.SLACK.weekly.hour |
string | |
options.SLACK.weekly.day |
string | |
options.SLACK.monthly |
object | |
options.SLACK.monthly.enabled |
boolean | (required) |
options.SLACK.monthly.hour |
string | |
options.SLACK.monthly.date |
“first” | “last” |
Return Type
Notification
types_delete_notification_type()
```rubyrequire 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.types.types_delete_notification_type p resultrescue Pingram::ApiError => e puts "Error when calling types_delete_notification_type: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | The notification ID |
Return Type
nil (empty response body)
types_get_notification_type()
Get a specific notification by ID
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.types.types_get_notification_type p resultrescue Pingram::ApiError => e puts "Error when calling types_get_notification_type: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | The notification ID |
Return Type
Array<GetNotificationsResponseInner>
types_list_notification_types()
Get all notifications for an account with their templates
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.types.types_list_notification_types p resultrescue Pingram::ApiError => e puts "Error when calling types_list_notification_types: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
Array<GetNotificationsResponseInner>
types_update_notification_type()
Update a notification’s settings
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::NotificationPatchRequest.new # configure as needed
begin result = client.types.types_update_notification_type(body) p resultrescue Pingram::ApiError => e puts "Error when calling types_update_notification_type: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| notification_id | String | The notification ID | |
| notification_patch_request | NotificationPatchRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
title |
string | |
channels |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | |
enabled |
boolean | |
deduplication |
object | |
deduplication.duration |
number | (required) |
throttling |
object | |
throttling.max |
number | (required) |
throttling.period |
number | (required) |
throttling.unit |
“seconds” | “minutes” | “hours” | “days” | “months” | “years” | (required) |
throttling.forever |
boolean | (required) |
throttling.scope |
(“userId” | “notificationId”)[] | (required) |
retention |
number | null |
options |
object | |
options.EMAIL |
object | |
options.EMAIL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.EMAIL.off |
object | |
options.EMAIL.off.enabled |
boolean | (required) |
options.EMAIL.instant |
object | |
options.EMAIL.instant.enabled |
boolean | (required) |
options.EMAIL.hourly |
object | |
options.EMAIL.hourly.enabled |
boolean | (required) |
options.EMAIL.daily |
object | |
options.EMAIL.daily.enabled |
boolean | (required) |
options.EMAIL.daily.hour |
string | |
options.EMAIL.weekly |
object | |
options.EMAIL.weekly.enabled |
boolean | (required) |
options.EMAIL.weekly.hour |
string | |
options.EMAIL.weekly.day |
string | |
options.EMAIL.monthly |
object | |
options.EMAIL.monthly.enabled |
boolean | (required) |
options.EMAIL.monthly.hour |
string | |
options.EMAIL.monthly.date |
“first” | “last” | |
options.INAPP_WEB |
object | |
options.INAPP_WEB.defaultDeliveryOption |
“off” | “instant” | (required) |
options.INAPP_WEB.off |
object | |
options.INAPP_WEB.off.enabled |
boolean | (required) |
options.INAPP_WEB.instant |
object | |
options.INAPP_WEB.instant.enabled |
boolean | (required) |
options.INAPP_WEB.instant.batching |
boolean | |
options.INAPP_WEB.instant.batchingKey |
string | |
options.INAPP_WEB.instant.batchingWindow |
number | |
options.SMS |
object | |
options.SMS.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SMS.off |
object | |
options.SMS.off.enabled |
boolean | (required) |
options.SMS.instant |
object | |
options.SMS.instant.enabled |
boolean | (required) |
options.SMS.hourly |
object | |
options.SMS.hourly.enabled |
boolean | (required) |
options.SMS.daily |
object | |
options.SMS.daily.enabled |
boolean | (required) |
options.SMS.daily.hour |
string | |
options.SMS.weekly |
object | |
options.SMS.weekly.enabled |
boolean | (required) |
options.SMS.weekly.hour |
string | |
options.SMS.weekly.day |
string | |
options.SMS.monthly |
object | |
options.SMS.monthly.enabled |
boolean | (required) |
options.SMS.monthly.hour |
string | |
options.SMS.monthly.date |
“first” | “last” | |
options.CALL |
object | |
options.CALL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.CALL.off |
object | |
options.CALL.off.enabled |
boolean | (required) |
options.CALL.instant |
object | |
options.CALL.instant.enabled |
boolean | (required) |
options.CALL.hourly |
object | |
options.CALL.hourly.enabled |
boolean | (required) |
options.CALL.daily |
object | |
options.CALL.daily.enabled |
boolean | (required) |
options.CALL.daily.hour |
string | |
options.CALL.weekly |
object | |
options.CALL.weekly.enabled |
boolean | (required) |
options.CALL.weekly.hour |
string | |
options.CALL.weekly.day |
string | |
options.CALL.monthly |
object | |
options.CALL.monthly.enabled |
boolean | (required) |
options.CALL.monthly.hour |
string | |
options.CALL.monthly.date |
“first” | “last” | |
options.VOICE |
object | |
options.VOICE.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.VOICE.off |
object | |
options.VOICE.off.enabled |
boolean | (required) |
options.VOICE.instant |
object | |
options.VOICE.instant.enabled |
boolean | (required) |
options.VOICE.hourly |
object | |
options.VOICE.hourly.enabled |
boolean | (required) |
options.VOICE.daily |
object | |
options.VOICE.daily.enabled |
boolean | (required) |
options.VOICE.daily.hour |
string | |
options.VOICE.weekly |
object | |
options.VOICE.weekly.enabled |
boolean | (required) |
options.VOICE.weekly.hour |
string | |
options.VOICE.weekly.day |
string | |
options.VOICE.monthly |
object | |
options.VOICE.monthly.enabled |
boolean | (required) |
options.VOICE.monthly.hour |
string | |
options.VOICE.monthly.date |
“first” | “last” | |
options.PUSH |
object | |
options.PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.PUSH.off |
object | |
options.PUSH.off.enabled |
boolean | (required) |
options.PUSH.instant |
object | |
options.PUSH.instant.enabled |
boolean | (required) |
options.PUSH.hourly |
object | |
options.PUSH.hourly.enabled |
boolean | (required) |
options.PUSH.daily |
object | |
options.PUSH.daily.enabled |
boolean | (required) |
options.PUSH.daily.hour |
string | |
options.PUSH.weekly |
object | |
options.PUSH.weekly.enabled |
boolean | (required) |
options.PUSH.weekly.hour |
string | |
options.PUSH.weekly.day |
string | |
options.PUSH.monthly |
object | |
options.PUSH.monthly.enabled |
boolean | (required) |
options.PUSH.monthly.hour |
string | |
options.PUSH.monthly.date |
“first” | “last” | |
options.WEB_PUSH |
object | |
options.WEB_PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.WEB_PUSH.off |
object | |
options.WEB_PUSH.off.enabled |
boolean | (required) |
options.WEB_PUSH.instant |
object | |
options.WEB_PUSH.instant.enabled |
boolean | (required) |
options.WEB_PUSH.hourly |
object | |
options.WEB_PUSH.hourly.enabled |
boolean | (required) |
options.WEB_PUSH.daily |
object | |
options.WEB_PUSH.daily.enabled |
boolean | (required) |
options.WEB_PUSH.daily.hour |
string | |
options.WEB_PUSH.weekly |
object | |
options.WEB_PUSH.weekly.enabled |
boolean | (required) |
options.WEB_PUSH.weekly.hour |
string | |
options.WEB_PUSH.weekly.day |
string | |
options.WEB_PUSH.monthly |
object | |
options.WEB_PUSH.monthly.enabled |
boolean | (required) |
options.WEB_PUSH.monthly.hour |
string | |
options.WEB_PUSH.monthly.date |
“first” | “last” | |
options.SLACK |
object | |
options.SLACK.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SLACK.off |
object | |
options.SLACK.off.enabled |
boolean | (required) |
options.SLACK.instant |
object | |
options.SLACK.instant.enabled |
boolean | (required) |
options.SLACK.hourly |
object | |
options.SLACK.hourly.enabled |
boolean | (required) |
options.SLACK.daily |
object | |
options.SLACK.daily.enabled |
boolean | (required) |
options.SLACK.daily.hour |
string | |
options.SLACK.weekly |
object | |
options.SLACK.weekly.enabled |
boolean | (required) |
options.SLACK.weekly.hour |
string | |
options.SLACK.weekly.day |
string | |
options.SLACK.monthly |
object | |
options.SLACK.monthly.enabled |
boolean | (required) |
options.SLACK.monthly.hour |
string | |
options.SLACK.monthly.date |
“first” | “last” |
Return Type
Notification
User
user_get_account_metadata()
Get account-level metadata including logo, VAPID key, and web push status
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.user.user_get_account_metadata p resultrescue Pingram::ApiError => e puts "Error when calling user_get_account_metadata: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
GetAccountMetadataResponse
user_get_in_app_notifications()
Get in-app notifications for a user
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.user.user_get_in_app_notifications p resultrescue Pingram::ApiError => e puts "Error when calling user_get_in_app_notifications: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| before | String | Timestamp or ISO date to fetch notifications before | [optional] |
| count | Float | Number of notifications to return (default 10) | [optional] |
Return Type
GetInappNotificationsResponse
user_get_in_app_unread_count()
Get the count of unread in-app notifications for a user
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.user.user_get_in_app_unread_count p resultrescue Pingram::ApiError => e puts "Error when calling user_get_in_app_unread_count: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
InappUnreadCountResponse
user_get_user()
Get a user by ID. All users exist implicitly, returns basic user object if not found in DB.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.user.user_get_user p resultrescue Pingram::ApiError => e puts "Error when calling user_get_user: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| user_id | String | User ID |
Return Type
User
user_identify()
Create or update a user with the given ID. Updates lastSeenTime automatically.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::PostUserRequest.new # configure as needed
begin result = client.user.user_identify(body) p resultrescue Pingram::ApiError => e puts "Error when calling user_identify: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| user_id | String | User ID | |
| post_user_request | PostUserRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
id |
string | Unique user identifier. Required. |
email |
string | User’s email address for email notifications. |
number |
string | User’s phone number for SMS/call notifications. |
pushTokens |
object[] | Mobile push tokens (FCM, APN) for push notifications. |
pushTokens[].type |
“FCM” | “APN” | (required) |
pushTokens[].token |
string | (required) |
pushTokens[].device |
object | (required) |
pushTokens[].device.app_id |
string | |
pushTokens[].device.ad_id |
string | |
pushTokens[].device.device_id |
string | (required) |
pushTokens[].device.platform |
string | |
pushTokens[].device.manufacturer |
string | |
pushTokens[].device.model |
string | |
pushTokens[].environment |
string | used by APN to differentiate between sandbox and production builds (sandbox/undefined or production) |
webPushTokens |
object[] | Web push subscription config from the browser. |
webPushTokens[].sub |
object | (required) Configuration for a Push Subscription. This can be obtained on the frontend by calling serviceWorkerRegistration.pushManager.subscribe(). The expected format is the same output as JSON.stringify’ing a PushSubscription in the browser. |
webPushTokens[].sub.endpoint |
string | (required) |
webPushTokens[].sub.keys |
object | (required) |
webPushTokens[].sub.keys.p256dh |
string | (required) |
webPushTokens[].sub.keys.auth |
string | (required) |
timezone |
string | User’s timezone (e.g. “America/New_York”) for scheduling. |
slackChannel |
string | The destination channel of slack notifications sent to this user. Can be either of the following: - Channel name, e.g. “test” - Channel name with # prefix, e.g. “#test” - Channel ID, e.g. “C1234567890” - User ID for DM, e.g. “U1234567890” - Username with @ prefix, e.g. “@test” |
slackToken |
object | |
slackToken.access_token |
string | |
slackToken.app_id |
string | |
slackToken.authed_user |
object | |
slackToken.authed_user.access_token |
string | |
slackToken.authed_user.expires_in |
number | |
slackToken.authed_user.id |
string | |
slackToken.authed_user.refresh_token |
string | |
slackToken.authed_user.scope |
string | |
slackToken.authed_user.token_type |
string | |
slackToken.bot_user_id |
string | |
slackToken.enterprise |
object | |
slackToken.enterprise.id |
string | |
slackToken.enterprise.name |
string | |
slackToken.error |
string | |
slackToken.expires_in |
number | |
slackToken.incoming_webhook |
object | |
slackToken.incoming_webhook.channel |
string | |
slackToken.incoming_webhook.channel_id |
string | |
slackToken.incoming_webhook.configuration_url |
string | |
slackToken.incoming_webhook.url |
string | |
slackToken.is_enterprise_install |
boolean | |
slackToken.needed |
string | |
slackToken.ok |
boolean | (required) |
slackToken.provided |
string | |
slackToken.refresh_token |
string | |
slackToken.scope |
string | |
slackToken.team |
object | |
slackToken.team.id |
string | |
slackToken.team.name |
string | |
slackToken.token_type |
string | |
slackToken.warning |
string | |
slackToken.response_metadata |
object | |
slackToken.response_metadata.warnings |
string[] | |
slackToken.response_metadata.next_cursor |
string | |
slackToken.response_metadata.scopes |
string[] | |
slackToken.response_metadata.acceptedScopes |
string[] | |
slackToken.response_metadata.retryAfter |
number | |
slackToken.response_metadata.messages |
string[] |
Return Type
User
user_mark_in_app_notifications_as_seen()
Mark in-app web notifications as seen/read for a user
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::InAppNotificationUnreadClearRequest.new # configure as needed
begin result = client.user.user_mark_in_app_notifications_as_seen(body) p resultrescue Pingram::ApiError => e puts "Error when calling user_mark_in_app_notifications_as_seen: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| in_app_notification_unread_clear_request | InAppNotificationUnreadClearRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
notificationId |
string | |
trackingId |
string |
Return Type
SuccessResponse
user_update_in_app_notification_status()
Update in-app web notification status (opened, archived, clicked, etc.)
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::InAppNotificationPatchRequest.new # configure as needed
begin result = client.user.user_update_in_app_notification_status(body) p resultrescue Pingram::ApiError => e puts "Error when calling user_update_in_app_notification_status: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| in_app_notification_patch_request | InAppNotificationPatchRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
trackingIds |
string[] | (required) |
opened |
string | |
clicked |
string | |
archived |
string | |
actioned1 |
string | |
actioned2 |
string | |
reply |
object | |
reply.date |
string | (required) |
reply.message |
string | (required) |
replies |
object[] | |
replies[].date |
string | (required) |
replies[].message |
string | (required) |
Return Type
SuccessResponse
Users
users_delete_user()
Delete a user and all associated data (in-app notifications, preferences, and user record)
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.users.users_delete_user p resultrescue Pingram::ApiError => e puts "Error when calling users_delete_user: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| user_id | String | User ID | |
| env_id | String | Environment ID (required when using JWT auth) | [optional] |
Return Type
DeleteUserResponse
users_list_users()
Get all users for an environment with pagination support
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.users.users_list_users p resultrescue Pingram::ApiError => e puts "Error when calling users_list_users: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| limit | Float | Maximum number of users to return (default | |
| next_token | String | Pagination token for next page | |
| env_id | String | Environment ID (required when using JWT auth) | [optional] |
Return Type
GetUsersResponse
users_remove_user_from_suppression()
Remove user suppression status for a specific channel
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.users.users_remove_user_from_suppression p resultrescue Pingram::ApiError => e puts "Error when calling users_remove_user_from_suppression: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| user_id | String | User ID | |
| channel | String | Channel type (EMAIL) | |
| env_id | String | Environment ID (required when using JWT auth) | [optional] |
Return Type
UserSuppressionDeleteResponse
Voice
voice_bind_number()
Bind a phone number to a deployed agent for inbound routing
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::BindNumberRequest.new # configure as needed
begin result = client.voice.voice_bind_number(body) p resultrescue Pingram::ApiError => e puts "Error when calling voice_bind_number: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| agent_id | String | Agent id | |
| bind_number_request | BindNumberRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
phoneNumber |
string | (required) |
Return Type
BindNumberResponse
voice_call()
Place an outbound call with an inline agent spec (ephemeral)
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::VoiceCallRequest.new # configure as needed
begin result = client.voice.voice_call(body) p resultrescue Pingram::ApiError => e puts "Error when calling voice_call: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| voice_call_request | VoiceCallRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
phoneNumber |
string | (required) |
spec |
object | (required) |
spec.name |
string | (required) |
spec.instructions |
string | (required) |
spec.inbound |
object | (required) |
spec.inbound.firstAction |
“speak” | “wait” | (required) |
spec.inbound.greeting |
string | (required) |
spec.outbound |
object | (required) |
spec.outbound.firstAction |
“speak” | “wait” | (required) |
spec.outbound.opener |
string | (required) |
spec.outbound.voicemailAction |
“hangup” | “message” | “continue” | (required) |
spec.outbound.voicemailMessage |
string | |
spec.model |
object | object | (required) Speech pipeline. Prefer s2s mode (e.g. openai:gpt-realtime with voice marin). |
spec.model.mode |
“chained” | (required) |
spec.model.llm |
string | (required) ‘provider:model’, e.g. ‘openai:gpt-4o’ |
spec.model.stt |
string | (required) ‘provider:model’, e.g. ‘deepgram:nova-3’ |
spec.model.tts |
string | (required) ‘provider:model’, e.g. ‘elevenlabs:eleven_multilingual_v2’ |
spec.model.voiceId |
string | (required) Provider-native voice id for the selected TTS provider (e.g. ElevenLabs UUID, OpenAI alloy). |
spec.model.language |
string | (required) |
spec.model.speechSpeed |
number | (required) |
spec.model.temperature |
number | (required) |
spec.model.maxTokens |
number | (required) |
spec.tools |
(object | object | object | object | object)[] | (required) |
spec.variables |
object[] | (required) |
spec.variables[].name |
string | (required) |
spec.variables[].description |
string | |
spec.variables[].defaultValue |
string | |
spec.conversation |
object | (required) |
spec.conversation.turnDetection |
“semantic” | “vad” | (required) |
spec.conversation.minEndOfTurnSilenceMs |
number | (required) |
spec.conversation.allowInterruptions |
boolean | (required) |
spec.conversation.minInterruptionDurationMs |
number | (required) |
spec.conversation.silenceTimeoutSeconds |
number | (required) |
spec.conversation.maxCallLengthSeconds |
number | (required) |
spec.conversation.agentCanEndCall |
boolean | When true (default), the agent may invoke the built-in end_call action. |
spec.compliance |
object | (required) |
spec.compliance.recordingEnabled |
boolean | (required) |
variables |
Record<string, string> | Optional per-call {{variable}} overrides. |
agentId |
string | Saved agent id when testing from the dashboard playground. |
Return Type
VoiceCallResponse
voice_create_agent()
Deploy a voice agent (persist spec for production routing)
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::CreateVoiceAgentRequest.new # configure as needed
begin result = client.voice.voice_create_agent(body) p resultrescue Pingram::ApiError => e puts "Error when calling voice_create_agent: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| create_voice_agent_request | CreateVoiceAgentRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
spec |
object | (required) |
spec.name |
string | (required) |
spec.instructions |
string | (required) |
spec.inbound |
object | (required) |
spec.inbound.firstAction |
“speak” | “wait” | (required) |
spec.inbound.greeting |
string | (required) |
spec.outbound |
object | (required) |
spec.outbound.firstAction |
“speak” | “wait” | (required) |
spec.outbound.opener |
string | (required) |
spec.outbound.voicemailAction |
“hangup” | “message” | “continue” | (required) |
spec.outbound.voicemailMessage |
string | |
spec.model |
object | object | (required) Speech pipeline. Prefer s2s mode (e.g. openai:gpt-realtime with voice marin). |
spec.model.mode |
“chained” | (required) |
spec.model.llm |
string | (required) ‘provider:model’, e.g. ‘openai:gpt-4o’ |
spec.model.stt |
string | (required) ‘provider:model’, e.g. ‘deepgram:nova-3’ |
spec.model.tts |
string | (required) ‘provider:model’, e.g. ‘elevenlabs:eleven_multilingual_v2’ |
spec.model.voiceId |
string | (required) Provider-native voice id for the selected TTS provider (e.g. ElevenLabs UUID, OpenAI alloy). |
spec.model.language |
string | (required) |
spec.model.speechSpeed |
number | (required) |
spec.model.temperature |
number | (required) |
spec.model.maxTokens |
number | (required) |
spec.tools |
(object | object | object | object | object)[] | (required) |
spec.variables |
object[] | (required) |
spec.variables[].name |
string | (required) |
spec.variables[].description |
string | |
spec.variables[].defaultValue |
string | |
spec.conversation |
object | (required) |
spec.conversation.turnDetection |
“semantic” | “vad” | (required) |
spec.conversation.minEndOfTurnSilenceMs |
number | (required) |
spec.conversation.allowInterruptions |
boolean | (required) |
spec.conversation.minInterruptionDurationMs |
number | (required) |
spec.conversation.silenceTimeoutSeconds |
number | (required) |
spec.conversation.maxCallLengthSeconds |
number | (required) |
spec.conversation.agentCanEndCall |
boolean | When true (default), the agent may invoke the built-in end_call action. |
spec.compliance |
object | (required) |
spec.compliance.recordingEnabled |
boolean | (required) |
Return Type
CreateVoiceAgentResponse
voice_create_browser_call()
Place an ephemeral browser playground call with an inline agent spec
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::VoiceBrowserCallRequest.new # configure as needed
begin result = client.voice.voice_create_browser_call(body) p resultrescue Pingram::ApiError => e puts "Error when calling voice_create_browser_call: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| voice_browser_call_request | VoiceBrowserCallRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
spec |
object | (required) |
spec.name |
string | (required) |
spec.instructions |
string | (required) |
spec.inbound |
object | (required) |
spec.inbound.firstAction |
“speak” | “wait” | (required) |
spec.inbound.greeting |
string | (required) |
spec.outbound |
object | (required) |
spec.outbound.firstAction |
“speak” | “wait” | (required) |
spec.outbound.opener |
string | (required) |
spec.outbound.voicemailAction |
“hangup” | “message” | “continue” | (required) |
spec.outbound.voicemailMessage |
string | |
spec.model |
object | object | (required) Speech pipeline. Prefer s2s mode (e.g. openai:gpt-realtime with voice marin). |
spec.model.mode |
“chained” | (required) |
spec.model.llm |
string | (required) ‘provider:model’, e.g. ‘openai:gpt-4o’ |
spec.model.stt |
string | (required) ‘provider:model’, e.g. ‘deepgram:nova-3’ |
spec.model.tts |
string | (required) ‘provider:model’, e.g. ‘elevenlabs:eleven_multilingual_v2’ |
spec.model.voiceId |
string | (required) Provider-native voice id for the selected TTS provider (e.g. ElevenLabs UUID, OpenAI alloy). |
spec.model.language |
string | (required) |
spec.model.speechSpeed |
number | (required) |
spec.model.temperature |
number | (required) |
spec.model.maxTokens |
number | (required) |
spec.tools |
(object | object | object | object | object)[] | (required) |
spec.variables |
object[] | (required) |
spec.variables[].name |
string | (required) |
spec.variables[].description |
string | |
spec.variables[].defaultValue |
string | |
spec.conversation |
object | (required) |
spec.conversation.turnDetection |
“semantic” | “vad” | (required) |
spec.conversation.minEndOfTurnSilenceMs |
number | (required) |
spec.conversation.allowInterruptions |
boolean | (required) |
spec.conversation.minInterruptionDurationMs |
number | (required) |
spec.conversation.silenceTimeoutSeconds |
number | (required) |
spec.conversation.maxCallLengthSeconds |
number | (required) |
spec.conversation.agentCanEndCall |
boolean | When true (default), the agent may invoke the built-in end_call action. |
spec.compliance |
object | (required) |
spec.compliance.recordingEnabled |
boolean | (required) |
variables |
Record<string, string> | Optional per-call {{variable}} overrides for browser playground. |
agentId |
string | Saved agent id when testing from the dashboard playground. |
Return Type
VoiceBrowserCallResponse
voice_delete_agent()
Remove a deployed voice agent and unbind its numbers
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.voice.voice_delete_agent p resultrescue Pingram::ApiError => e puts "Error when calling voice_delete_agent: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| agent_id | String | Agent id |
Return Type
DeleteVoiceAgentResponse
voice_get_agent()
Get a deployed voice agent
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.voice.voice_get_agent p resultrescue Pingram::ApiError => e puts "Error when calling voice_get_agent: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| agent_id | String | Agent id |
Return Type
GetVoiceAgentResponse
voice_get_call()
Get a call with transcript timeline and recording playback URL
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.voice.voice_get_call p resultrescue Pingram::ApiError => e puts "Error when calling voice_get_call: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| tracking_id | String | Call tracking id |
Return Type
GetVoiceCallResponse
voice_list_agents()
List deployed voice agents for the account
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.voice.voice_list_agents p resultrescue Pingram::ApiError => e puts "Error when calling voice_list_agents: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
ListVoiceAgentsResponse
voice_list_calls()
List recent calls newest-first (30-day retention)
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.voice.voice_list_calls p resultrescue Pingram::ApiError => e puts "Error when calling voice_list_calls: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| agent_id | String | Only calls handled by this agent | [optional] |
| limit | Float | Page size (default 25, max 100) | [optional] |
| cursor | String | Pagination cursor from a previous response | [optional] |
Return Type
ListVoiceCallsResponse
voice_unbind_number()
Unbind a phone number from a deployed agent
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.voice.voice_unbind_number p resultrescue Pingram::ApiError => e puts "Error when calling voice_unbind_number: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| agent_id | String | Agent id | |
| phone_number | String | E.164 phone number |
Return Type
UnbindNumberResponse
voice_update_agent()
Publish changes to a deployed voice agent
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::UpdateVoiceAgentRequest.new # configure as needed
begin result = client.voice.voice_update_agent(body) p resultrescue Pingram::ApiError => e puts "Error when calling voice_update_agent: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| agent_id | String | Agent id | |
| update_voice_agent_request | UpdateVoiceAgentRequest | See Request Body Properties below |
Request Body Properties
| Name | Type | Description |
|---|---|---|
spec |
object | (required) |
spec.name |
string | (required) |
spec.instructions |
string | (required) |
spec.inbound |
object | (required) |
spec.inbound.firstAction |
“speak” | “wait” | (required) |
spec.inbound.greeting |
string | (required) |
spec.outbound |
object | (required) |
spec.outbound.firstAction |
“speak” | “wait” | (required) |
spec.outbound.opener |
string | (required) |
spec.outbound.voicemailAction |
“hangup” | “message” | “continue” | (required) |
spec.outbound.voicemailMessage |
string | |
spec.model |
object | object | (required) Speech pipeline. Prefer s2s mode (e.g. openai:gpt-realtime with voice marin). |
spec.model.mode |
“chained” | (required) |
spec.model.llm |
string | (required) ‘provider:model’, e.g. ‘openai:gpt-4o’ |
spec.model.stt |
string | (required) ‘provider:model’, e.g. ‘deepgram:nova-3’ |
spec.model.tts |
string | (required) ‘provider:model’, e.g. ‘elevenlabs:eleven_multilingual_v2’ |
spec.model.voiceId |
string | (required) Provider-native voice id for the selected TTS provider (e.g. ElevenLabs UUID, OpenAI alloy). |
spec.model.language |
string | (required) |
spec.model.speechSpeed |
number | (required) |
spec.model.temperature |
number | (required) |
spec.model.maxTokens |
number | (required) |
spec.tools |
(object | object | object | object | object)[] | (required) |
spec.variables |
object[] | (required) |
spec.variables[].name |
string | (required) |
spec.variables[].description |
string | |
spec.variables[].defaultValue |
string | |
spec.conversation |
object | (required) |
spec.conversation.turnDetection |
“semantic” | “vad” | (required) |
spec.conversation.minEndOfTurnSilenceMs |
number | (required) |
spec.conversation.allowInterruptions |
boolean | (required) |
spec.conversation.minInterruptionDurationMs |
number | (required) |
spec.conversation.silenceTimeoutSeconds |
number | (required) |
spec.conversation.maxCallLengthSeconds |
number | (required) |
spec.conversation.agentCanEndCall |
boolean | When true (default), the agent may invoke the built-in end_call action. |
spec.compliance |
object | (required) |
spec.compliance.recordingEnabled |
boolean | (required) |
Return Type
UpdateVoiceAgentResponse