Ruby SDK

Setup & Initialization

  1. Install:
gem install pingram

Or add to your Gemfile:

gem 'pingram'
  1. 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 result
rescue Pingram::ApiError => e
  puts "Error when calling call_send: #{e}"
end

Parameters

| 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()


```ruby
require 'pingram'

client = Pingram::Client.new(api_key: 'YOUR_API_KEY')

begin
  result = client.webhooks.webhooks_delete_events_webhook
  p result
rescue Pingram::ApiError => e
  puts "Error when calling webhooks_delete_events_webhook: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling webhooks_get_events_webhook: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling webhooks_upsert_events_webhook: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling addresses_create_address: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling addresses_delete_address: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling addresses_list_addresses: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling addresses_update_address: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling domains_add_domain: #{e}"
end

Parameters

| 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&lt;GetSendersResponseInner&gt;

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 result
rescue Pingram::ApiError => e
  puts "Error when calling domains_delete_domain: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling domains_list_domains: #{e}"
end

Parameters

This endpoint does not need any parameter.

Return Type

Array&lt;GetSendersResponseInner&gt;

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 result
rescue Pingram::ApiError => e
  puts "Error when calling domains_start_domain_verification: #{e}"
end

Parameters

| Name | Type | Description | Notes | | ---- | ---- | ----------- | ----- | | sender | String | Sender domain (URL encoded) | |

Return Type

Array&lt;GetSendersResponseInner&gt;

Email

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 result
rescue Pingram::ApiError => e
  puts "Error when calling email_send: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling environments_create_environment: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling environments_list_environments: #{e}"
end

Parameters

This endpoint does not need any parameter.

Return Type

Array&lt;GetEnvironmentsResponseInner&gt;

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 result
rescue Pingram::ApiError => e
  puts "Error when calling environments_update_environment: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling logs_get_log_retention: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling logs_get_logs: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling logs_get_logs_by_tracking_ids: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling logs_get_logs_query_result: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling logs_start_logs_query: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling logs_tail_logs: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling numbers_list: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling numbers_list_released: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling numbers_order_number: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling numbers_release_number: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling numbers_search_available: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling organization_create: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling organization_get_usage: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling organization_get_usage_history: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling profile_accept_invite: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling profile_change_email: #{e}"
end

Parameters

| 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_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 result
rescue Pingram::ApiError => e
  puts "Error when calling profile_disable_mfa: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling profile_get_mfa_status: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling profile_setup_mfa: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling profile_verify_mfa: #{e}"
end

Parameters

| 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()


```ruby
require 'pingram'

client = Pingram::Client.new(api_key: 'YOUR_API_KEY')

begin
  result = client.push_settings.push_settings_delete_push_apn_settings
  p result
rescue Pingram::ApiError => e
  puts "Error when calling push_settings_delete_push_apn_settings: #{e}"
end

Parameters

This endpoint does not need any parameter.

Return Type

nil (empty response body)

push_settings_delete_push_fcm_settings()


```ruby
require 'pingram'

client = Pingram::Client.new(api_key: 'YOUR_API_KEY')

begin
  result = client.push_settings.push_settings_delete_push_fcm_settings
  p result
rescue Pingram::ApiError => e
  puts "Error when calling push_settings_delete_push_fcm_settings: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling push_settings_get_push_apn_settings: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling push_settings_get_push_fcm_settings: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling push_settings_upsert_push_apn_settings: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling push_settings_upsert_push_fcm_settings: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling sender_delete_schedule: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling sender_update_schedule: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling sms_send: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling templates_create_template: #{e}"
end

Parameters

| 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()


```ruby
require 'pingram'

client = Pingram::Client.new(api_key: 'YOUR_API_KEY')

begin
  result = client.templates.templates_delete_template
  p result
rescue Pingram::ApiError => e
  puts "Error when calling templates_delete_template: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling templates_get_template: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling templates_list_templates: #{e}"
end

Parameters

| Name | Type | Description | Notes | | ---- | ---- | ----------- | ----- | | notification_id | String | Notification ID | | | channel | String | Channel type | |

Return Type

Array&lt;GetTemplatesListResponseInner&gt;

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 result
rescue Pingram::ApiError => e
  puts "Error when calling templates_set_default_template: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling templates_update_template: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling types_create_notification_type: #{e}"
end

Parameters

| 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()


```ruby
require 'pingram'

client = Pingram::Client.new(api_key: 'YOUR_API_KEY')

begin
  result = client.types.types_delete_notification_type
  p result
rescue Pingram::ApiError => e
  puts "Error when calling types_delete_notification_type: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling types_get_notification_type: #{e}"
end

Parameters

| Name | Type | Description | Notes | | ---- | ---- | ----------- | ----- | | notification_id | String | The notification ID | |

Return Type

Array&lt;GetNotificationsResponseInner&gt;

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 result
rescue Pingram::ApiError => e
  puts "Error when calling types_list_notification_types: #{e}"
end

Parameters

This endpoint does not need any parameter.

Return Type

Array&lt;GetNotificationsResponseInner&gt;

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 result
rescue Pingram::ApiError => e
  puts "Error when calling types_update_notification_type: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling user_get_account_metadata: #{e}"
end

Parameters

This endpoint does not need any parameter.

Return Type

GetAccountMetadataResponse

user_get_available_slack_channels()


```ruby
require 'pingram'

client = Pingram::Client.new(api_key: 'YOUR_API_KEY')

begin
  result = client.user.user_get_available_slack_channels
  p result
rescue Pingram::ApiError => e
  puts "Error when calling user_get_available_slack_channels: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling user_get_in_app_notifications: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling user_get_in_app_unread_count: #{e}"
end

Parameters

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 result
rescue Pingram::ApiError => e
  puts "Error when calling user_get_user: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling user_identify: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling user_mark_in_app_notifications_as_seen: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling user_update_in_app_notification_status: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling users_delete_user: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling users_list_users: #{e}"
end

Parameters

| 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 result
rescue Pingram::ApiError => e
  puts "Error when calling users_remove_user_from_suppression: #{e}"
end

Parameters

| 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