Your Pingram API key. You can get it from your dashboard under Environments.
baseUrl
string
Optional. Use a different base URL for EU or CA, e.g. "https://api.eu.pingram.io" or "https://api.ca.pingram.io". Default is US.
* required
Region example:
var client =new PingramClient("your_api_key", "https://api.eu.pingram.io");
Send
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.
var client =new PingramClient("your_api_key");
var senderPostBody = new ...; // see Request Body Properties below
awaitclient.DefaultApi.SendAsync(senderPostBody);
Parameters
Name
Type
Description
Notes
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.properties
Record<string, string | number | boolean>
Custom key-value properties synced by the developer, used for audience segmentation (e.g. broadcast filters on user.properties.plan). Incremental identify calls shallow-merge keys (unset keys are preserved). Limits: max 25 keys, key length <= 64, string values <= 256 chars, serialized size <= 1KB.
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.
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.
Webhooks
WebhooksCreateWebhook()
Create a webhook endpoint on a server outside Pingram. Pingram later POSTs signed JSON to that URL when one of the subscribed events happens. This call only saves the endpoint; it does not send a webhook and does not modify the destination server. The response includes id and a signing secret starting with pingram_whsecret_. Save it and verify the X-Pingram-Signature header. Updates keep this secret. At most 10 endpoints per account. The URL must be a public HTTPS URL and should return 2xx.
var client =new PingramClient("your_api_key");
var webhookEndpointUpsertRequest = new ...; // see Request Body Properties below
(required) Public HTTPS URL that accepts POST with a JSON event body. Return 2xx to acknowledge. Private, loopback, and link-local addresses are rejected. Requests include X-Pingram-Id, X-Pingram-Signature (v1 HMAC-SHA256), and X-Pingram-Timestamp.
(required) Full set of event types to deliver to this URL. Omitting an event on update unsubscribes it. Inbound SMS to the free shared number only works when that person has already received a text from this number. Inbound SMS to a dedicated number works normally.
WebhooksDeleteWebhook()
Delete one webhook endpoint by id from list or create. That URL stops receiving its events. Other endpoints on the account are left as they are.
Replace one webhook endpoint’s URL and its full event subscription. The URL is a server outside Pingram. endpointId comes from list or create. The signing secret stays the same. events is the complete set; omitting an event unsubscribes it, and the previous URL stops receiving events. The previous URL and event list are not kept. The URL must be a public HTTPS URL.
var client =new PingramClient("your_api_key");
var webhookEndpointUpsertRequest = new ...; // see Request Body Properties below
(required) Public HTTPS URL that accepts POST with a JSON event body. Return 2xx to acknowledge. Private, loopback, and link-local addresses are rejected. Requests include X-Pingram-Id, X-Pingram-Signature (v1 HMAC-SHA256), and X-Pingram-Timestamp.
(required) Full set of event types to deliver to this URL. Omitting an event on update unsubscribes it. Inbound SMS to the free shared number only works when that person has already received a text from this number. Inbound SMS to a dedicated number works normally.
Accounts
AccountsCreateAccount()
Create one additional Pingram account (a separate workspace) for the signed-in user. The caller must already belong to an account. Requires a user session or personal access token; an account API key cannot call this. Does not create a login, and does not change, delete, or grant access to existing accounts. Omit plan and nothing is charged. The new account is ready for billing to be added later, and it cannot send until then. Setting plan charges immediately. It starts a paid subscription on the payment method already saved on sourceBillingAccountId, an account the caller must own. Optional memberEmails adds people who already share an account with the caller and invites everyone else.
var client =new PingramClient("your_api_key");
var createAccountRequest = new ...; // see Request Body Properties below
Update one inbox on this account. A new prefix deletes the old address, so mail to the previous address stops, and that address is not kept. displayName only relabels a custom inbox and does not change where mail is delivered. Does not create an inbox or change its domain.
var client =new PingramClient("your_api_key");
var updateAddressRequest = new ...; // see Request Body Properties below
Archive an email broadcast so it is hidden from the default broadcast list. Allowed for draft, paused, sent, and canceled broadcasts. Not allowed while sending or scheduled.
Cancel an email broadcast. Scheduled broadcasts revert to draft and drop their schedule (they can be scheduled again). Sending or paused broadcasts become canceled; recipients already processed stay as they are, and remaining pending recipients are skipped and will not be sent. That skip cannot be undone.
Create a draft email broadcast. html is the send-ready body. Optional internalTemplate is visual-editor source; if set it must be paired with html. A later update can add it to a draft by sending it with html. Set audience to either a Mongo-style user filter (sync users via Users API first; for large lists) or a raw email list (max 10,000). Include name, from fields, subject, and HTML. Notification type is optional on create and required before send or schedule; it is created automatically if missing.
var client =new PingramClient("your_api_key");
var createBroadcastRequest = new ...; // see Request Body Properties below
Notification type id. Optional on create; required before send/schedule. Created on the fly when missing.
channel
“email”
audience
object
(required) Broadcast audience: exactly one of filter (Mongo-style query evaluated against synced user objects) or emails (raw list, max 10,000 addresses; for larger audiences use filter after syncing users via the Users API).
audience.filter
Record<string, any>
audience.emails
string[]
fromName
string
(required)
fromAddress
string
(required)
replyToAddress
string
subject
string
(required)
html
string
(required)
internalTemplate
string
Optional visual-editor source. Pair with html. A later update can add it to a draft by sending it with html.
BroadcastsDelete()
Delete an email broadcast. Allowed for drafts, scheduled, paused, completed, and canceled broadcasts. Not allowed while status is sending.
List email broadcasts for the account, newest first. Returns metadata without html or internalTemplate bodies. A live-filter audience includes the filter. A raw email audience includes emailCount and omits the addresses. Paginate with limit (default 50, max 100) and nextToken.
List email broadcast recipients with per-recipient delivery fact timestamps (sentAt, deliveredAt, openedAt, etc.). Derive display status client-side from timestamps. Filter by status (pending, sent, delivered, opened, clicked, bounced, complained, unsubscribed, skipped, failed, problems). Paginate with limit (default 50, max 200) and nextToken.
Schedule a draft email broadcast for a future ISO datetime (sendAt). Requires a non-empty subject. fromAddress must be the platform default sender or a domain verified for this account (Settings → Domain Verification). The platform default sender is for testing only (at most 10 recipients, heavily throttled). Cancels any existing schedule when the broadcast is returned to draft via cancel.
var client =new PingramClient("your_api_key");
var scheduleBroadcastRequest = new ...; // see Request Body Properties below
Send a draft email broadcast immediately. Requires a non-empty subject. fromAddress must be the platform default sender or a domain verified for this account (Settings → Domain Verification). The platform default sender is for testing only (at most 10 recipients, heavily throttled). Transitions status to sending and starts delivery.
Update a draft email broadcast. Fields you send replace the stored values (name, type, audience, sender, subject, html) and the previous values are not kept; omitted fields stay. html is the send-ready body. Send an empty replyToAddress to clear Reply-To. internalTemplate is visual-editor source: send it with html to add it to an html-only draft or to update it. It cannot be removed. Only drafts can be edited; scheduled or active broadcasts are locked. This does not send the broadcast.
var client =new PingramClient("your_api_key");
var updateBroadcastRequest = new ...; // see Request Body Properties below
Broadcast audience: exactly one of filter (Mongo-style query evaluated against synced user objects) or emails (raw list, max 10,000 addresses; for larger audiences use filter after syncing users via the Users API).
audience.filter
Record<string, any>
audience.emails
string[]
fromName
string
fromAddress
string
replyToAddress
string
Omit to leave unchanged. Empty string clears Reply-To.
subject
string
html
string
internalTemplate
string
Visual-editor source. Send with html to add it to an html-only draft or to update it. Cannot be removed.
Domains
DomainsAddDomain()
Start verification for a domain you already own so Pingram can use it for email. Pass a bare domain (example.com) or subdomain (mail.example.com). This does not purchase, transfer, renew, or control the domain, does not edit DNS, and does not disable sending or receiving on other platforms. It saves the domain on this Pingram account and returns DNS records for you to publish. Required DKIM lets Pingram send email from addresses on this domain once verification completes. Optional inbound MX, once you publish it, routes that domain’s inbound email to Pingram. This call only begins verification. Publish the records, then start verification in the dashboard or with the start-verification API. Adding a domain that is already on the account returns the existing records.
var client =new PingramClient("your_api_key");
var postSendersRequestBody = new ...; // see Request Body Properties below
List domains already added to this Pingram account for email. Each entry includes verification status and the DNS records Pingram expects you to publish. Does not search a registrar, purchase or transfer a domain, change DNS, or include domains that have not been added to this account.
Start removing all email suppressions of the given reason (retryable or bounces) for users in the environment. Returns immediately after the job is queued — suppressions are not yet cleared when this response is received. Large removals are processed in the background in batches.
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.
var client =new PingramClient("your_api_key");
var sendEmailRequest = new ...; // see Request Body Properties below
Create an upload slot in the account library. contentType must be image/png, image/jpeg, image/gif, or image/webp. PUT the file to the returned uploadUrl with that Content-Type, then use the returned url in emails and the editor.
var client =new PingramClient("your_api_key");
var createLibraryRequest = new ...; // see Request Body Properties below
(required) Original filename, including extension (e.g. hero.png).
contentType
string
(required) Image MIME type. One of image/png, image/jpeg, image/gif, or image/webp.
LibraryList()
List files in the account library for a use-case, newest first. Paginate with limit (default 50, max 100) and nextToken.
var client =new PingramClient("your_api_key");
awaitclient.LibraryApi.LibraryListAsync(...);
Parameters
Name
Type
Description
Notes
useCase
string
Library use-case
limit
decimal
Max items to return (default 50)
[optional]
nextToken
string
Pagination token
[optional]
Logs
LogsGetDeliveryStatus()
Look up email and SMS delivery status for up to 25 tracking IDs. Each entry is the tracking id, channel (EMAIL or SMS), status, and the time that status was recorded. The result does not include recipients, phone numbers, user ids, request bodies, IP addresses, account ids, or user-agent data. Unknown tracking ids are omitted. Other channels are not included.
List recent notification logs for the authenticated account, newest first.
var client =new PingramClient("your_api_key");
awaitclient.LogsApi.LogsGetLogsAsync(...);
Parameters
Name
Type
Description
Notes
limit
decimal
Maximum number of logs to return (default
[optional]
cursor
string
Pagination cursor for next page
[optional]
LogsGetLogsByTrackingIds()
Get logs by tracking IDs (comma-separated, max 25 IDs). Returns full log objects with personally identifiable information (recipients, user ids, phone numbers, and request details). For a simple delivery check, use Get Delivery Status.
Resend the EMAIL_INBOUND webhook for one inbound email. Uses the original tracking ID and does not count another email. Refused when the message is older than 30 days.
var client =new PingramClient("your_api_key");
awaitclient.LogsApi.LogsRetryInboundAsync(...);
Parameters
Name
Type
Description
Notes
trackingId
string
Tracking ID of the inbound email
LogsStartLogsQuery()
Start an asynchronous log search over a date range. Returns a queryId; poll with Get Log Query Results until status is Complete.
var client =new PingramClient("your_api_key");
var logQueryPostBody = new ...; // see Request Body Properties below
List active phone numbers registered for the account, including voice agent binding state.
var client =new PingramClient("your_api_key");
awaitclient.NumbersApi.NumbersListAsync(...);
Parameters
This endpoint does not need any parameter.
NumbersListReleased()
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.
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).
var client =new PingramClient("your_api_key");
var orderPhoneNumberRequest = new ...; // see Request Body Properties below
(required) Legal entity type for a 10DLC brand. - PRIVATE_PROFIT: private for-profit (LLC, corp, etc.) - SOLE_PROPRIETOR: sole proprietorship - PUBLIC_PROFIT: publicly traded for-profit - NON_PROFIT: non-profit - GOVERNMENT: government
legalName
string
Official registered legal business name. For SOLE_PROPRIETOR, optional DBA or trade name (defaults to firstName and lastName).
displayName
string
(required) Public brand name shown to recipients and carriers. Use the name customers recognize (your DBA or trade name). For companies with no DBA, use the same value as legalName. For SOLE_PROPRIETOR, this is the brand you send as — not the individual’s legal name (set firstName and lastName for that). If the sole proprietor has no DBA, use first and last name.
firstName
string
Legal first name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR.
lastName
string
Legal last name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR.
taxId
string
For US companies (country US): 9-digit EIN (Employer Identification Number). For Canada (country CA): 9-digit BN (Business Number). For other countries: national business tax identifier. Required except when businessType is SOLE_PROPRIETOR.
website
string
(required) Public website for the brand. Include a scheme (https://) or a domain; https:// is prepended when omitted. Carriers expect a working site with privacy policy and terms.
country
string
(required) ISO 3166-1 alpha-2 country of incorporation (for example US or CA).
street
string
(required) Street address that matches official tax registration.
city
string
(required) City that matches official tax registration.
state
string
(required) State (US) or province (CA) that matches official tax registration.
postalCode
string
(required) ZIP code (US) or postal code (CA) that matches official tax registration.
complianceContactEmail
string
(required) Email for the 10DLC compliance contact. Used for carrier and registration follow-up.
complianceContactPhone
string
(required) Phone number for the 10DLC compliance contact. E.164 preferred; national numbers are normalized using country.
RegistrationsGetUs10dlcBrand()
Get the 10DLC brand registration for the authenticated account. Returns null when no registration exists yet.
Overwrite business fields on this account’s existing US 10DLC brand registration (legal name, address, tax ID, website, compliance contact, and related identity). Fields you omit stay; values you send replace what was stored and are not kept as history. Does not create a registration, submit it to carriers, change brandStatus, or delete it. Workflow status stays under Pingram’s control.
var client =new PingramClient("your_api_key");
var tenDlcBrandUpdateRequest = new ...; // see Request Body Properties below
Legal entity type for a 10DLC brand. - PRIVATE_PROFIT: private for-profit (LLC, corp, etc.) - SOLE_PROPRIETOR: sole proprietorship - PUBLIC_PROFIT: publicly traded for-profit - NON_PROFIT: non-profit - GOVERNMENT: government
legalName
string
Official registered legal business name. For SOLE_PROPRIETOR, optional DBA or trade name (defaults to firstName and lastName).
displayName
string
Public brand name shown to recipients and carriers. Use the name customers recognize (your DBA or trade name). For SOLE_PROPRIETOR, this is the brand you send as — not the individual’s legal name. Omit to keep the existing value. If you change legalName and omit displayName, displayName is reset to the new legalName.
firstName
string
Legal first name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR.
lastName
string
Legal last name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR.
taxId
string
For US companies (country US): 9-digit EIN (Employer Identification Number). For Canada (country CA): 9-digit BN (Business Number). For other countries: national business tax identifier. Required except when businessType is SOLE_PROPRIETOR.
website
string
Public website for the brand. Include a scheme (https://) or a domain; https:// is prepended when omitted. Carriers expect a working site with privacy policy and terms.
country
string
ISO 3166-1 alpha-2 country of incorporation (for example US or CA).
street
string
Street address that matches official tax registration.
city
string
City that matches official tax registration.
state
string
State (US) or province (CA) that matches official tax registration.
postalCode
string
ZIP code (US) or postal code (CA) that matches official tax registration.
complianceContactEmail
string
Email for the 10DLC compliance contact. Used for carrier and registration follow-up.
complianceContactPhone
string
Phone number for the 10DLC compliance contact. E.164 preferred; national numbers are normalized using country.
RegistrationsUpdateUs10dlcCampaign()
Overwrite campaign fields on this account’s existing US 10DLC campaign (description, samples, opt-in and opt-out text, use case, and related settings). Fields you send replace the stored values and the previous text is not kept; omitted fields stay. Editing is refused once the campaign is in_progress or approved. Does not submit the campaign to carriers, change campaignStatus, or delete it.
var client =new PingramClient("your_api_key");
var tenDlcCampaignUpdateRequest = new ...; // see Request Body Properties below
Summary of what this campaign sends and why, including audience and typical message content. Required before carrier submission.
campaignSample1
string
Example SMS that represents actual campaign traffic. Required before carrier submission. Should match the use case and typically identify the brand and include STOP/HELP language.
campaignSample2
string
Second example SMS. Required before carrier submission. Required for MARKETING and MIXED use cases.
campaignSample3
string
Optional third example SMS.
campaignSample4
string
Optional fourth example SMS.
campaignMessageFlow
string
How recipients opt in (for example website form, checkout, or keyword). Describe the call-to-action and where consent is collected. Required before carrier submission.
campaignOptinKeywords
string
Extra opt-in keywords as a comma-separated list. START is always included.
campaignOptinMessage
string
Auto-reply sent when a recipient opts in. Required before carrier submission. Should confirm the subscription, mention message frequency, and include STOP and HELP instructions.
campaignOptoutKeywords
string
Extra opt-out keywords as a comma-separated list. STOP is always included.
campaignOptoutMessage
string
Auto-reply sent when a recipient opts out. Required before carrier submission. Should confirm they will receive no further messages.
campaignHelpKeywords
string
Extra help keywords as a comma-separated list. HELP is always included.
campaignHelpMessage
string
Auto-reply sent when a recipient texts a help keyword. Required before carrier submission. Should include a support contact (email and/or phone).
campaignEmbeddedLink
boolean
Whether campaign messages include URLs.
campaignEmbeddedLinkUrl
string
Sample URL that appears in messages. Provide when campaignEmbeddedLink is true.
campaignEmbeddedPhone
boolean
Whether campaign messages include phone numbers.
campaignAgeGated
boolean
Whether campaign content is age-restricted (18+).
campaignDirectLending
boolean
Whether the campaign relates to direct lending or loan products.
campaignPrivacyPolicyLink
string
Public URL of the privacy policy that covers this SMS program.
campaignTermsAndConditionsLink
string
Public URL of the terms and conditions that cover this SMS program.
campaignUsecase
string
10DLC campaign use case submitted to carriers. Required before carrier submission. One of 2FA, ACCOUNT_NOTIFICATION, CUSTOMER_CARE, DELIVERY_NOTIFICATION, FRAUD_ALERT, MARKETING, MIXED, POLLING_VOTING, PUBLIC_SERVICE_ANNOUNCEMENT, or SECURITY_ALERT. For MIXED, append comma-separated sub-use cases after MIXED (sub-use cases cannot include MIXED), for example MIXED,2FA,ACCOUNT_NOTIFICATION.
Sender
SenderDeleteSchedule()
Delete (unschedule) an already scheduled notification
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.properties
Record<string, string | number | boolean>
Custom key-value properties synced by the developer, used for audience segmentation (e.g. broadcast filters on user.properties.plan). Incremental identify calls shallow-merge keys (unset keys are preserved). Limits: max 25 keys, key length <= 64, string values <= 256 chars, serialized size <= 1KB.
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.
(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.
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.
Types
TypesCreateNotificationType()
Create a new notification
var client =new PingramClient("your_api_key");
var notificationCreateRequest = new ...; // see Request Body Properties below
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[]
properties
Record<string, string | number | boolean>
Custom key-value properties synced by the developer, used for audience segmentation (e.g. broadcast filters on user.properties.plan). Incremental identify calls shallow-merge keys (unset keys are preserved). Limits: max 25 keys, key length <= 64, string values <= 256 chars, serialized size <= 1KB.
Users
UsersDeleteUser()
Delete a user and all associated data (in-app notifications, preferences, and user record)
var client =new PingramClient("your_api_key");
awaitclient.UsersApi.UsersDeleteUserAsync(...);
Parameters
Name
Type
Description
Notes
userId
string
User ID
envId
string
Environment ID (required when using JWT auth)
[optional]
UsersListUsers()
Get all users for an environment with pagination support
var client =new PingramClient("your_api_key");
awaitclient.UsersApi.UsersListUsersAsync(...);
Parameters
Name
Type
Description
Notes
limit
decimal
Maximum number of users to return (default
nextToken
string
Pagination token for next page
envId
string
Environment ID (required when using JWT auth)
[optional]
UsersRemoveUserFromSuppression()
Remove user suppression status for a specific channel