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” | “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. |
secondaryId |
string | Optional sub-notification identifier for grouping or tracking. |
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.email.condition |
string | Conditional expression for when to send (e.g. merge tag logic). |
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_delete_events_webhook()
```rubyrequire 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.webhooks.webhooks_delete_events_webhook p resultrescue Pingram::ApiError => e puts "Error when calling webhooks_delete_events_webhook: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
nil (empty response body)
webhooks_get_events_webhook()
Get the events webhook configuration for the current account/environment.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.webhooks.webhooks_get_events_webhook p resultrescue Pingram::ApiError => e puts "Error when calling webhooks_get_events_webhook: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
EventsWebhookResponse
webhooks_upsert_events_webhook()
Create or update the events webhook configuration for the current account/environment.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::EventsWebhookUpsertRequest.new # configure as needed
begin result = client.webhooks.webhooks_upsert_events_webhook(body) p resultrescue Pingram::ApiError => e puts "Error when calling webhooks_upsert_events_webhook: #{e}"endParameters
| Name | Type | Description | Notes | | ——————————— | —————————— | ——————————— | —– | — | | events_webhook_upsert_request | EventsWebhookUpsertRequest | 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” | “VOICE_INBOUND”)[] | (required) List of event types that should be forwarded to the webhook URL. |
Return Type
EventsWebhookResponse
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_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_create_environment()
Create a new environment for the account
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::EnvironmentCreateRequest.new # configure as needed
begin result = client.environments.environments_create_environment(body) p resultrescue Pingram::ApiError => e puts "Error when calling environments_create_environment: #{e}"endParameters
| Name | Type | Description | Notes | | —————————— | –––––––––––––– | ——————————— | —– | — | | environment_create_request | EnvironmentCreateRequest | See Request Body Properties below | | |
Request Body Properties
| Name | Type | Description |
|---|---|---|
title |
string | (required) |
Return Type
Environment
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” | “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” | “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.
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
Organization
organization_create()
Create organization after SMS verification bypass
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.organization.organization_create p resultrescue Pingram::ApiError => e puts "Error when calling organization_create: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
CreateOrganizationResponse
organization_get_usage()
Get usage for the authenticated account’s organization (new billing model).
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.organization.organization_get_usage p resultrescue Pingram::ApiError => e puts "Error when calling organization_get_usage: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
OrganizationUsage
organization_get_usage_history()
Get historical usage for the authenticated account’s organization over a date range.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.organization.organization_get_usage_history p resultrescue Pingram::ApiError => e puts "Error when calling organization_get_usage_history: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| start_date | String | Start date (YYYY-MM-DD) for the range | |
| end_date | String | End date (YYYY-MM-DD) for the range |
Return Type
OrganizationUsageHistory
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
PushSettings
push_settings_delete_push_apn_settings()
```rubyrequire 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.push_settings.push_settings_delete_push_apn_settings p resultrescue Pingram::ApiError => e puts "Error when calling push_settings_delete_push_apn_settings: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
nil (empty response body)
push_settings_delete_push_fcm_settings()
```rubyrequire 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.push_settings.push_settings_delete_push_fcm_settings p resultrescue Pingram::ApiError => e puts "Error when calling push_settings_delete_push_fcm_settings: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
nil (empty response body)
push_settings_get_push_apn_settings()
Get Apple Push Notification (APN) configuration for the current account.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.push_settings.push_settings_get_push_apn_settings p resultrescue Pingram::ApiError => e puts "Error when calling push_settings_get_push_apn_settings: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
APNConfig
push_settings_get_push_fcm_settings()
Get Firebase Cloud Messaging (FCM) configuration for the current account.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.push_settings.push_settings_get_push_fcm_settings p resultrescue Pingram::ApiError => e puts "Error when calling push_settings_get_push_fcm_settings: #{e}"endParameters
This endpoint does not need any parameter.
Return Type
PushSettingsFCMResponse
push_settings_upsert_push_apn_settings()
Create or update Apple Push Notification (APN) configuration for the current account.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::APNConfig.new # configure as needed
begin result = client.push_settings.push_settings_upsert_push_apn_settings(body) p resultrescue Pingram::ApiError => e puts "Error when calling push_settings_upsert_push_apn_settings: #{e}"endParameters
| Name | Type | Description | Notes | | ––––––– | ———–– | ——————————— | —– | — | | apn_config | APNConfig | See Request Body Properties below | | |
Request Body Properties
| Name | Type | Description |
|---|---|---|
KeyId |
string | (required) |
Key |
string | (required) |
TeamId |
string | (required) |
Topic |
string | (required) |
Return Type
APNConfig
push_settings_upsert_push_fcm_settings()
Create or update Firebase Cloud Messaging (FCM) configuration for the current account.
require 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')body = Pingram::PushSettingsFCMPutRequest.new # configure as needed
begin result = client.push_settings.push_settings_upsert_push_fcm_settings(body) p resultrescue Pingram::ApiError => e puts "Error when calling push_settings_upsert_push_fcm_settings: #{e}"endParameters
| Name | Type | Description | Notes | | ——————————— | —————————– | ——————————— | —– | — | | push_settings_fcm_put_request | PushSettingsFCMPutRequest | See Request Body Properties below | | |
Request Body Properties
| Name | Type | Description |
|---|---|---|
fcmConfig |
string | (required) |
Return Type
PushSettingsFCMResponse
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” | “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. |
secondaryId |
string | Optional sub-notification identifier for grouping or tracking. |
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.email.condition |
string | Conditional expression for when to send (e.g. merge tag logic). |
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.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” | “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.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_available_slack_channels()
```rubyrequire 'pingram'
client = Pingram::Client.new(api_key: 'YOUR_API_KEY')
begin result = client.user.user_get_available_slack_channels p resultrescue Pingram::ApiError => e puts "Error when calling user_get_available_slack_channels: #{e}"endParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| user_id | String | User ID |
Return Type
nil (empty response body)
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