Go SDK
Setup & Initialization
- Install Package:
go get github.com/pingram-io/pingram-go- Import:
import ( pingram "github.com/pingram-io/pingram-go")- Initialize:
client := pingram.NewClient("pingram_sk_your_api_key")| Name | Type | Description |
|---|---|---|
apiKey* |
string | Your Pingram API key. You can get it from your dashboard under Environments. |
baseURL |
string | Optional. Use pingram.WithBaseURL("https://api.eu.pingram.io") or pingram.WithRegion(pingram.RegionEU) for EU/CA. Default is US. |
* required
Region example:
client := pingram.NewClient("pingram_sk_...", pingram.WithRegion(pingram.RegionEU))Working example
Full runnable example that sends a notification:
package main
import ( "context" "encoding/json" "fmt" "log"
pingram "github.com/pingram-io/pingram-go")
func main() { client := pingram.NewClient("pingram_sk_your_api_key") // or WithBaseURL("https://api.pingram.click") for custom host
body := pingram.SenderPostBody{ Type: pingram.PtrString("domain_verification"), User: &pingram.GetUsersResponseUsersInner{ Id: "user@example.com", Email: pingram.PtrString("user@example.com"), }, Email: &pingram.SenderPostBodyEmail{ Subject: "Domain Verification", Html: "<p>Please verify your domain by clicking the link below.</p>", }, }
resp, _, err := client.DefaultAPI.Send(context.Background()).SenderPostBody(body).Execute() if err != nil { log.Fatal(err) } out, _ := json.MarshalIndent(resp, "", " ") fmt.Println(string(out))}The sections below list every API method. For most use cases the Send method and the Domains / Users / Types APIs are the main ones.
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.
senderPostBody := *pingram.NewSenderPostBody() // SenderPostBody
resp, _, err := client.DefaultAPI.Send(ctx).SenderPostBody(senderPostBody).Execute()if err != nil { // handle error}// resp is SenderPostResponseParameters
| 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. |
to.emailSuppressionStatus.reason |
“Bounce” | “Complaint” | (required) |
to.emailSuppressionStatus.details |
object | (required) |
forceChannels |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | Override which channels to send to (e.g. [“EMAIL”, “SMS”]). Bypasses notification channel config. |
parameters |
Record<string, any> | Key-value pairs for template merge tags. Replaces placeholders like {{firstName}} in templates. |
templateId |
string | Specific template ID to use. If omitted, uses the default template for each channel. |
subNotificationId |
string | Sub-notification identifier (e.g. for grouping related notifications). |
options |
object | Per-channel overrides for send options (email, APN, FCM). |
options.email |
object | Email-specific overrides. |
options.email.replyToAddresses |
string[] | Reply-to addresses for the email. |
options.email.ccAddresses |
string[] | CC recipients. |
options.email.bccAddresses |
string[] | BCC recipients. |
options.email.fromAddress |
string | Override sender email address. |
options.email.fromName |
string | Override sender display name. |
options.email.openTracking |
boolean | When false, this send does not record opens and no open pixel is added. Delivery, bounce, and complaint events are unchanged. Defaults to true. |
options.email.clickTracking |
boolean | When false, links are left as written and clicks are not recorded. Delivery, bounce, and complaint events are unchanged. Defaults to true. |
options.email.attachments |
(object | object)[] | File attachments (by URL or inline base64 content). Inline content: ~4 MB raw per file (413 if exceeded). URL url: up to 20 MB per file. |
options.apn |
object | Apple Push Notification (APN) overrides. |
options.apn.expiry |
number | Seconds until the notification expires. |
options.apn.priority |
number | Delivery priority (10 = immediate, 5 = power-saving). |
options.apn.collapseId |
string | Group notifications with the same ID (replaces previous). |
options.apn.threadId |
string | Thread identifier for grouping notifications. |
options.apn.badge |
number | Badge count on app icon. |
options.apn.sound |
string | Sound file name. |
options.apn.contentAvailable |
boolean | Silent background notification (no alert). |
options.fcm |
object | Firebase Cloud Messaging (FCM) overrides. |
options.fcm.android |
object | Android-specific FCM options. |
options.fcm.android.collapseKey |
string | Collapse key for grouping messages. |
options.fcm.android.priority |
“high” | “normal” | Delivery priority. |
options.fcm.android.ttl |
number | Time to live in seconds. |
options.fcm.android.restrictedPackageName |
string | Restrict delivery to a specific package. |
options.push |
object | Cross-platform mobile push options (applied to both APN and FCM). |
options.push.customData |
Record<string, string> | Up to 3 custom string key-value pairs for deep linking. Included in both APN and FCM payloads. |
schedule |
string | |
email |
object | Inline email content (subject, html). Use when not using templates. |
email.subject |
string | (required) Email subject line. |
email.html |
string | (required) HTML body content. |
email.previewText |
string | Preview/snippet text shown in inbox. |
email.senderName |
string | Display name of sender. |
email.senderEmail |
string | Sender email address. |
inapp |
object | Inline in-app content (title, url, image). |
inapp.title |
string | (required) Notification title. |
inapp.url |
string | URL to open when clicked. |
inapp.image |
string | Image URL. |
sms |
object | Inline SMS content (message, 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.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. |
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.
webhookEndpointUpsertRequest := *pingram.NewWebhookEndpointUpsertRequest("Webhook_example", []string{"Events_example"}) // WebhookEndpointUpsertRequest
resp, _, err := client.WebhooksAPI.WebhooksCreateWebhook(ctx).WebhookEndpointUpsertRequest(webhookEndpointUpsertRequest).Execute()if err != nil { // handle error}// resp is WebhookEndpointParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
webhook |
string | (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. |
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” | “VOICE_INBOUND” | “VOICE_CONNECTED” | “VOICE_ENDED” | “PUSH_FAILED” | “PUSH_UNSUBSCRIBE” | “CALL_FAILED” | “CALL_UNSUBSCRIBE” | “WEB_PUSH_FAILED” | “WEB_PUSH_UNSUBSCRIBE” | “SLACK_FAILED” | “SLACK_UNSUBSCRIBE” | “ACCOUNT_USAGE”)[] | (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.
endpointId := // Id of the webhook endpoint, from list or create.
_, err := client.WebhooksAPI.WebhooksDeleteWebhook(ctx, endpointId).Execute()if err != nil { // handle error}Parameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| endpointId | string | Id of the webhook endpoint, from list or create. | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
WebhooksListWebhooks()
List webhook endpoints on the current account, including each id, URL, subscribed events, and signing secret. Use the id with update or delete.
resp, _, err := client.WebhooksAPI.WebhooksListWebhooks(ctx).Execute()if err != nil { // handle error}// resp is WebhookEndpointsResponseParameters
This endpoint does not need any parameter.
WebhooksUpdateWebhook()
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.
endpointId := // Id of the webhook endpoint, from list or create.webhookEndpointUpsertRequest := *pingram.NewWebhookEndpointUpsertRequest("Webhook_example", []string{"Events_example"}) // WebhookEndpointUpsertRequest
resp, _, err := client.WebhooksAPI.WebhooksUpdateWebhook(ctx, endpointId).WebhookEndpointUpsertRequest(webhookEndpointUpsertRequest).Execute()if err != nil { // handle error}// resp is WebhookEndpointParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| endpointId | string | Id of the webhook endpoint, from list or create. | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
webhook |
string | (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. |
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” | “VOICE_INBOUND” | “VOICE_CONNECTED” | “VOICE_ENDED” | “PUSH_FAILED” | “PUSH_UNSUBSCRIBE” | “CALL_FAILED” | “CALL_UNSUBSCRIBE” | “WEB_PUSH_FAILED” | “WEB_PUSH_UNSUBSCRIBE” | “SLACK_FAILED” | “SLACK_UNSUBSCRIBE” | “ACCOUNT_USAGE”)[] | (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.
createAccountRequest := *pingram.NewCreateAccountRequest("Name_example") // CreateAccountRequest
resp, _, err := client.AccountsAPI.AccountsCreateAccount(ctx).CreateAccountRequest(createAccountRequest).Execute()if err != nil { // handle error}// resp is CreateAccountResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
name |
string | (required) |
plan |
object | Billing to copy onto a new additional account. |
plan.tier |
“budget_20” | “budget_50” | “budget_100” | “budget_250” | “budget_500” | “budget_1000” | (required) |
plan.sourceBillingAccountId |
string | (required) Account whose saved payment method is copied onto the new account. The caller must be an owner of this account. |
memberEmails |
string[] | Emails to add or invite to the new account. Existing members of any account the caller belongs to are added directly; everyone else is invited. |
AccountsListAccounts()
List accounts the authenticated user can access
resp, _, err := client.AccountsAPI.AccountsListAccounts(ctx).Execute()if err != nil { // handle error}// resp is ListAccountsResponseParameters
This endpoint does not need any parameter.
Addresses
AddressesCreateAddress()
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.
createAddressRequest := *pingram.NewCreateAddressRequest("Prefix_example") // CreateAddressRequest
resp, _, err := client.AddressesAPI.AddressesCreateAddress(ctx).CreateAddressRequest(createAddressRequest).Execute()if err != nil { // handle error}// resp is AddressResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
prefix |
string | (required) |
domain |
string | |
displayName |
string |
AddressesDeleteAddress()
Delete a custom inbound address. Builtin addresses cannot be deleted.
fullAddress := // Full address to delete (e.g. hello@example.com)
resp, _, err := client.AddressesAPI.AddressesDeleteAddress(ctx, fullAddress).Execute()if err != nil { // handle error}// resp is SuccessResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| fullAddress | string | Full address to delete (e.g. hello@example.com) | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
AddressesListAddresses()
List email inboxes (addresses) configured for receiving. Custom addresses must use a verified domain.
resp, _, err := client.AddressesAPI.AddressesListAddresses(ctx).Execute()if err != nil { // handle error}// resp is AccountAddressesResponseParameters
This endpoint does not need any parameter.
AddressesUpdateAddress()
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.
updateAddressRequest := *pingram.NewUpdateAddressRequest("FullAddress_example") // UpdateAddressRequest
resp, _, err := client.AddressesAPI.AddressesUpdateAddress(ctx).UpdateAddressRequest(updateAddressRequest).Execute()if err != nil { // handle error}// resp is AddressResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
fullAddress |
string | (required) |
prefix |
string | |
displayName |
string |
Broadcasts
BroadcastsArchive()
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.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsArchive(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsCancel()
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.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsCancel(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsCreate()
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.
createBroadcastRequest := *pingram.NewCreateBroadcastRequest("Name_example", *pingram.NewBroadcastResponseAudience(), "FromName_example", "FromAddress_example", "Subject_example", "Html_example") // CreateBroadcastRequest
resp, _, err := client.BroadcastsAPI.BroadcastsCreate(ctx).CreateBroadcastRequest(createBroadcastRequest).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
name |
string | (required) |
type |
string | 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.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsDelete(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is MessageResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsGet()
Get one email broadcast by ID, including the send-ready html body, optional internalTemplate (visual-editor source), and audience definition.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsGet(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsGetMetrics()
Poll live email broadcast metrics: status, optional pausedReason or scheduleAt, and aggregate counters (total, sent, delivered, opened, clicked, bounced, complained, unsubscribed, skipped, failed).
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsGetMetrics(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastMetricsResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsList()
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.
limit := float32(8.14) // float32 (optional)nextToken := "nextToken_example" // string (optional)
resp, _, err := client.BroadcastsAPI.BroadcastsList(ctx).Limit(limit).NextToken(nextToken).Execute()if err != nil { // handle error}// resp is ListBroadcastsResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| limit | float32 | Max broadcasts to return (default 50) | |
| nextToken | string | Pagination token |
BroadcastsListRecipients()
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.
broadcastId := // Broadcast IDstatus := "status_example" // string (optional)limit := float32(8.14) // float32 (optional)nextToken := "nextToken_example" // string (optional)
resp, _, err := client.BroadcastsAPI.BroadcastsListRecipients(ctx, broadcastId).Status(status).Limit(limit).NextToken(nextToken).Execute()if err != nil { // handle error}// resp is ListBroadcastRecipientsResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
status | string | Filter | limit | float32 | Max recipients to return (default 50) | nextToken | string | Pagination token |
BroadcastsPause()
Pause an actively sending email broadcast. Status becomes paused with pausedReason PAUSED_BY_USER.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsPause(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsResume()
Resume a paused email broadcast. Continues sending remaining recipients. Broadcasts paused for spam content cannot be resumed.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsResume(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsSchedule()
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.
broadcastId := // Broadcast IDscheduleBroadcastRequest := *pingram.NewScheduleBroadcastRequest("SendAt_example") // ScheduleBroadcastRequest
resp, _, err := client.BroadcastsAPI.BroadcastsSchedule(ctx, broadcastId).ScheduleBroadcastRequest(scheduleBroadcastRequest).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
sendAt |
string | (required) ISO datetime in the future. |
BroadcastsSend()
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.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsSend(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsUnarchive()
Restore an archived email broadcast to the default broadcast list.
broadcastId := // Broadcast ID
resp, _, err := client.BroadcastsAPI.BroadcastsUnarchive(ctx, broadcastId).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
BroadcastsUpdate()
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.
broadcastId := // Broadcast IDupdateBroadcastRequest := *pingram.NewUpdateBroadcastRequest() // UpdateBroadcastRequest
resp, _, err := client.BroadcastsAPI.BroadcastsUpdate(ctx, broadcastId).UpdateBroadcastRequest(updateBroadcastRequest).Execute()if err != nil { // handle error}// resp is BroadcastResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| broadcastId | string | Broadcast ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
name |
string | |
type |
string | |
channel |
“email” | |
audience |
object | 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.
postSendersRequestBody := *pingram.NewPostSendersRequestBody("Sender_example") // PostSendersRequestBody
resp, _, err := client.DomainsAPI.DomainsAddDomain(ctx).PostSendersRequestBody(postSendersRequestBody).Execute()if err != nil { // handle error}// resp is []GetSendersResponseInnerParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
sender |
string | (required) |
DomainsDeleteDomain()
Remove a sender domain from the account.
sender := // Sender domain (URL encoded)
resp, _, err := client.DomainsAPI.DomainsDeleteDomain(ctx, sender).Execute()if err != nil { // handle error}// resp is SuccessResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| sender | string | Sender domain (URL encoded) | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
DomainsListDomains()
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.
resp, _, err := client.DomainsAPI.DomainsListDomains(ctx).Execute()if err != nil { // handle error}// resp is []GetSendersResponseInnerParameters
This endpoint does not need any parameter.
DomainsStartDomainVerification()
Start SES domain verification (DNS readiness is checked client-side via checkDomainDns)
sender := // Sender domain (URL encoded)
resp, _, err := client.DomainsAPI.DomainsStartDomainVerification(ctx, sender).Execute()if err != nil { // handle error}// resp is []GetSendersResponseInnerParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| sender | string | Sender domain (URL encoded) | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
EmailDeleteSuppressions()
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.
reason := // Suppression reason to clear (retryable | bounces)
resp, _, err := client.EmailAPI.EmailDeleteSuppressions(ctx, reason).Execute()if err != nil { // handle error}// resp is MessageResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| reason | string | Suppression reason to clear (retryable | bounces) |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
EmailSend()
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.
sendEmailRequest := *pingram.NewSendEmailRequest("Type_example", "To_example", "Subject_example", "Html_example") // SendEmailRequest
resp, _, err := client.EmailAPI.EmailSend(ctx).SendEmailRequest(sendEmailRequest).Execute()if err != nil { // handle error}// resp is SendEmailApiResponseParameters
| Name | Type | Description | Notes |
|---|
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. |
openTracking |
boolean | When false, this send does not record opens and no open pixel is added. Delivery, bounce, and complaint events are unchanged. Defaults to true. |
clickTracking |
boolean | When false, links are left as written and clicks are not recorded. Delivery, bounce, and complaint events are unchanged. Defaults to true. |
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. |
Environments
EnvironmentsListEnvironments()
Get all environments for the authenticated account
resp, _, err := client.EnvironmentsAPI.EnvironmentsListEnvironments(ctx).Execute()if err != nil { // handle error}// resp is []GetEnvironmentsResponseInnerParameters
This endpoint does not need any parameter.
EnvironmentsUpdateEnvironment()
Update environment settings (title, secret, disable sending, secure mode)
clientId := // Environment client IDenvironmentPatchRequest := *pingram.NewEnvironmentPatchRequest() // EnvironmentPatchRequest
resp, _, err := client.EnvironmentsAPI.EnvironmentsUpdateEnvironment(ctx, clientId).EnvironmentPatchRequest(environmentPatchRequest).Execute()if err != nil { // handle error}// resp is EnvironmentParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| clientId | string | Environment client ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
resetSecret |
boolean | |
disableSending |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | |
title |
string | |
secureMode |
boolean |
Library
LibraryCreate()
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.
useCase := // Library use-casecreateLibraryRequest := *pingram.NewCreateLibraryRequest("Filename_example", "ContentType_example") // CreateLibraryRequest
resp, _, err := client.LibraryAPI.LibraryCreate(ctx, useCase).CreateLibraryRequest(createLibraryRequest).Execute()if err != nil { // handle error}// resp is CreateLibraryResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| useCase | string | Library use-case | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
filename |
string | (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.
useCase := // Library use-caselimit := float32(8.14) // float32 (optional)nextToken := "nextToken_example" // string (optional)
resp, _, err := client.LibraryAPI.LibraryList(ctx, useCase).Limit(limit).NextToken(nextToken).Execute()if err != nil { // handle error}// resp is ListLibraryResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| useCase | string | Library use-case | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
limit | float32 | Max items to return (default 50) | nextToken | string | Pagination token |
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.
trackingIds := // Comma-separated tracking IDs (URL encoded, max 25)
resp, _, err := client.LogsAPI.LogsGetDeliveryStatus(ctx, trackingIds).Execute()if err != nil { // handle error}// resp is LogsDeliveryStatusResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| trackingIds | string | Comma-separated tracking IDs (URL encoded, max 25) | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
LogsGetLogRetention()
Get log retention period in days for the account
resp, _, err := client.LogsAPI.LogsGetLogRetention(ctx).Execute()if err != nil { // handle error}// resp is LogsRetentionResponseParameters
This endpoint does not need any parameter.
LogsGetLogs()
List recent notification logs for the authenticated account, newest first.
limit := float32(8.14) // float32 (optional)cursor := "cursor_example" // string (optional)
resp, _, err := client.LogsAPI.LogsGetLogs(ctx).Limit(limit).Cursor(cursor).Execute()if err != nil { // handle error}// resp is GetLogsResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| limit | float32 | Maximum number of logs to return (default | |
| cursor | string | Pagination cursor for next page |
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.
trackingIds := // Comma-separated tracking IDs (URL encoded)
resp, _, err := client.LogsAPI.LogsGetLogsByTrackingIds(ctx, trackingIds).Execute()if err != nil { // handle error}// resp is LogsGetResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| trackingIds | string | Comma-separated tracking IDs (URL encoded) | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
LogsGetLogsQueryResult()
Get results from a log query started with Start Log Query. Poll until status is Complete.
queryId := // Query ID returned by Start Log Query
resp, _, err := client.LogsAPI.LogsGetLogsQueryResult(ctx, queryId).Execute()if err != nil { // handle error}// resp is LogsQueryResultResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| queryId | string | Query ID returned by Start Log Query | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
LogsRetryInbound()
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.
trackingId := // Tracking ID of the inbound email
resp, _, err := client.LogsAPI.LogsRetryInbound(ctx, trackingId).Execute()if err != nil { // handle error}// resp is MessageResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| trackingId | string | Tracking ID of the inbound email | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
LogsStartLogsQuery()
Start an asynchronous log search over a date range. Returns a queryId; poll with Get Log Query Results until status is Complete.
logQueryPostBody := *pingram.NewLogQueryPostBody() // LogQueryPostBody
resp, _, err := client.LogsAPI.LogsStartLogsQuery(ctx).LogQueryPostBody(logQueryPostBody).Execute()if err != nil { // handle error}// resp is LogsQueryResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
dateRangeFilter |
number[] | A tuple of [startTime, endTime] for the date range filter, each representing a unix timestamp. |
userFilter |
string | |
envIdFilter |
string[] | |
statusFilter |
string | |
channelFilter |
(“email” | “inapp” | “sms” | “call” | “voice” | “web_push” | “mobile_push” | “slack”)[] | |
notificationFilter |
string[] |
LogsTailLogs()
Get last 100 logs from the stream
resp, _, err := client.LogsAPI.LogsTailLogs(ctx).Execute()if err != nil { // handle error}// resp is LogsTailResponseParameters
This endpoint does not need any parameter.
Numbers
NumbersList()
List active phone numbers registered for the account, including voice agent binding state.
resp, _, err := client.NumbersAPI.NumbersList(ctx).Execute()if err != nil { // handle error}// resp is ListPhoneNumbersResponseParameters
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.
resp, _, err := client.NumbersAPI.NumbersListReleased(ctx).Execute()if err != nil { // handle error}// resp is ListReleasedPhoneNumbersResponseParameters
This endpoint does not need any parameter.
NumbersOrderNumber()
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).
orderPhoneNumberRequest := *pingram.NewOrderPhoneNumberRequest("PhoneNumber_example") // OrderPhoneNumberRequest
resp, _, err := client.NumbersAPI.NumbersOrderNumber(ctx).OrderPhoneNumberRequest(orderPhoneNumberRequest).Execute()if err != nil { // handle error}// resp is OrderPhoneNumberResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
phoneNumber |
string | (required) E.164 from search results |
NumbersReleaseNumber()
Release a phone number from the account. No refund for the current billing month.
phoneNumber := // E.164 phone number to release
resp, _, err := client.NumbersAPI.NumbersReleaseNumber(ctx, phoneNumber).Execute()if err != nil { // handle error}// resp is ReleasePhoneNumberResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| phoneNumber | string | E.164 phone number to release | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
NumbersSearchAvailable()
Search for available phone numbers to purchase. Requires countryCode (e.g. US, CA). Use before ordering a number.
countryCode := "countryCode_example" // stringfeatures := "features_example" // string (optional)areaCode := "areaCode_example" // string (optional)limit := float32(8.14) // float32 (optional)
resp, _, err := client.NumbersAPI.NumbersSearchAvailable(ctx).CountryCode(countryCode).Features(features).AreaCode(areaCode).Limit(limit).Execute()if err != nil { // handle error}// resp is SearchAvailablePhoneNumbersResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| countryCode | string | ISO 3166-1 alpha-2 country code (e.g., US, CA) | |
| features | string | Comma-separated | |
| areaCode | string | National destination / area code filter | |
| limit | float32 | Max results (default 10, max 50) |
Profile
ProfileAcceptInvite()
Accept a team invitation using a token
acceptInviteRequest := *pingram.NewAcceptInviteRequest("Token_example") // AcceptInviteRequest
resp, _, err := client.ProfileAPI.ProfileAcceptInvite(ctx).AcceptInviteRequest(acceptInviteRequest).Execute()if err != nil { // handle error}// resp is AcceptInviteResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
token |
string | (required) |
ProfileDeleteAccount()
Permanently delete the authenticated user’s account
deleteAccountRequest := *pingram.NewDeleteAccountRequest() // DeleteAccountRequest
resp, _, err := client.ProfileAPI.ProfileDeleteAccount(ctx).DeleteAccountRequest(deleteAccountRequest).Execute()if err != nil { // handle error}// resp is SuccessResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
reason |
string |
ProfileDisableMfa()
Disable MFA for the authenticated user
type_ := // MFA type (e.g. SOFTWARE_TOKEN_MFA)
resp, _, err := client.ProfileAPI.ProfileDisableMfa(ctx, type_).Execute()if err != nil { // handle error}// resp is SuccessResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| type_ | string | MFA type (e.g. SOFTWARE_TOKEN_MFA) | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
ProfileGetMfaStatus()
Get MFA status for the authenticated user
resp, _, err := client.ProfileAPI.ProfileGetMfaStatus(ctx).Execute()if err != nil { // handle error}// resp is MFAStatusResponseParameters
This endpoint does not need any parameter.
ProfileSetupMfa()
Start TOTP MFA setup and return QR code data
mFASetupRequest := *pingram.NewMFASetupRequest("Type_example") // MFASetupRequest
resp, _, err := client.ProfileAPI.ProfileSetupMfa(ctx).MFASetupRequest(mFASetupRequest).Execute()if err != nil { // handle error}// resp is MFASetupResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
type |
“SOFTWARE_TOKEN_MFA” | (required) MFA methods supported by the profile MFA API. |
ProfileVerifyMfa()
Verify TOTP code and enable MFA
mFAVerifyRequest := *pingram.NewMFAVerifyRequest("Type_example", "Code_example", "Session_example") // MFAVerifyRequest
resp, _, err := client.ProfileAPI.ProfileVerifyMfa(ctx).MFAVerifyRequest(mFAVerifyRequest).Execute()if err != nil { // handle error}// resp is SuccessResponseParameters
| Name | Type | Description | Notes |
|---|
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) |
Registrations
RegistrationsCreateUs10dlcBrand()
Create a new 10DLC brand registration. Sets brandStatus to pending_review; Pingram handles carrier submission after review.
tenDlcBrandCreateRequest := *pingram.NewTenDlcBrandCreateRequest("ScenarioId_example", "BusinessType_example", "DisplayName_example", "Website_example", "Country_example", "Street_example", "City_example", "State_example", "PostalCode_example", "ComplianceContactEmail_example", "ComplianceContactPhone_example") // TenDlcBrandCreateRequest
resp, _, err := client.RegistrationsAPI.RegistrationsCreateUs10dlcBrand(ctx).TenDlcBrandCreateRequest(tenDlcBrandCreateRequest).Execute()if err != nil { // handle error}// resp is TenDlcBrandRegistrationParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
scenarioId |
“own_brand” | “client_brand” | (required) Who the 10DLC brand is registered for. - own_brand: personal or company project - client_brand: agency or contractor |
businessType |
“PRIVATE_PROFIT” | “SOLE_PROPRIETOR” | “PUBLIC_PROFIT” | “NON_PROFIT” | “GOVERNMENT” | (required) Legal entity type for a 10DLC brand. - PRIVATE_PROFIT: private for-profit (LLC, corp, etc.) - SOLE_PROPRIETOR: sole proprietorship - PUBLIC_PROFIT: publicly traded for-profit - NON_PROFIT: non-profit - GOVERNMENT: government |
legalName |
string | Official registered legal business name. For SOLE_PROPRIETOR, optional DBA or trade name (defaults to firstName and lastName). |
displayName |
string | (required) Public brand name shown to recipients and carriers. Use the name customers recognize (your DBA or trade name). For companies with no DBA, use the same value as legalName. For SOLE_PROPRIETOR, this is the brand you send as — not the individual’s legal name (set firstName and lastName for that). If the sole proprietor has no DBA, use first and last name. |
firstName |
string | Legal first name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
lastName |
string | Legal last name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
taxId |
string | For US companies (country US): 9-digit EIN (Employer Identification Number). For Canada (country CA): 9-digit BN (Business Number). For other countries: national business tax identifier. Required except when businessType is SOLE_PROPRIETOR. |
website |
string | (required) Public website for the brand. Include a scheme (https://) or a domain; https:// is prepended when omitted. Carriers expect a working site with privacy policy and terms. |
country |
string | (required) ISO 3166-1 alpha-2 country of incorporation (for example US or CA). |
street |
string | (required) Street address that matches official tax registration. |
city |
string | (required) City that matches official tax registration. |
state |
string | (required) State (US) or province (CA) that matches official tax registration. |
postalCode |
string | (required) ZIP code (US) or postal code (CA) that matches official tax registration. |
complianceContactEmail |
string | (required) Email for the 10DLC compliance contact. Used for carrier and registration follow-up. |
complianceContactPhone |
string | (required) Phone number for the 10DLC compliance contact. E.164 preferred; national numbers are normalized using country. |
RegistrationsGetUs10dlcBrand()
Get the 10DLC brand registration for the authenticated account. Returns null when no registration exists yet.
resp, _, err := client.RegistrationsAPI.RegistrationsGetUs10dlcBrand(ctx).Execute()if err != nil { // handle error}// resp is TenDlcBrandRegistrationParameters
This endpoint does not need any parameter.
RegistrationsGetUs10dlcCampaign()
Get the 10DLC campaign registration for the authenticated account. Returns null when no brand registration exists yet.
resp, _, err := client.RegistrationsAPI.RegistrationsGetUs10dlcCampaign(ctx).Execute()if err != nil { // handle error}// resp is TenDlcCampaignRegistrationParameters
This endpoint does not need any parameter.
RegistrationsUpdateUs10dlcBrand()
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.
tenDlcBrandUpdateRequest := *pingram.NewTenDlcBrandUpdateRequest() // TenDlcBrandUpdateRequest
resp, _, err := client.RegistrationsAPI.RegistrationsUpdateUs10dlcBrand(ctx).TenDlcBrandUpdateRequest(tenDlcBrandUpdateRequest).Execute()if err != nil { // handle error}// resp is TenDlcBrandRegistrationParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
scenarioId |
“own_brand” | “client_brand” | Who the 10DLC brand is registered for. - own_brand: personal or company project - client_brand: agency or contractor |
businessType |
“PRIVATE_PROFIT” | “SOLE_PROPRIETOR” | “PUBLIC_PROFIT” | “NON_PROFIT” | “GOVERNMENT” | Legal entity type for a 10DLC brand. - PRIVATE_PROFIT: private for-profit (LLC, corp, etc.) - SOLE_PROPRIETOR: sole proprietorship - PUBLIC_PROFIT: publicly traded for-profit - NON_PROFIT: non-profit - GOVERNMENT: government |
legalName |
string | Official registered legal business name. For SOLE_PROPRIETOR, optional DBA or trade name (defaults to firstName and lastName). |
displayName |
string | Public brand name shown to recipients and carriers. Use the name customers recognize (your DBA or trade name). For SOLE_PROPRIETOR, this is the brand you send as — not the individual’s legal name. Omit to keep the existing value. If you change legalName and omit displayName, displayName is reset to the new legalName. |
firstName |
string | Legal first name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
lastName |
string | Legal last name of the sole proprietor. Required when businessType is SOLE_PROPRIETOR. |
taxId |
string | For US companies (country US): 9-digit EIN (Employer Identification Number). For Canada (country CA): 9-digit BN (Business Number). For other countries: national business tax identifier. Required except when businessType is SOLE_PROPRIETOR. |
website |
string | Public website for the brand. Include a scheme (https://) or a domain; https:// is prepended when omitted. Carriers expect a working site with privacy policy and terms. |
country |
string | ISO 3166-1 alpha-2 country of incorporation (for example US or CA). |
street |
string | Street address that matches official tax registration. |
city |
string | City that matches official tax registration. |
state |
string | State (US) or province (CA) that matches official tax registration. |
postalCode |
string | ZIP code (US) or postal code (CA) that matches official tax registration. |
complianceContactEmail |
string | Email for the 10DLC compliance contact. Used for carrier and registration follow-up. |
complianceContactPhone |
string | Phone number for the 10DLC compliance contact. E.164 preferred; national numbers are normalized using country. |
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.
tenDlcCampaignUpdateRequest := *pingram.NewTenDlcCampaignUpdateRequest() // TenDlcCampaignUpdateRequest
resp, _, err := client.RegistrationsAPI.RegistrationsUpdateUs10dlcCampaign(ctx).TenDlcCampaignUpdateRequest(tenDlcCampaignUpdateRequest).Execute()if err != nil { // handle error}// resp is TenDlcCampaignRegistrationParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
campaignDescription |
string | Summary of what this campaign sends and why, including audience and typical message content. Required before carrier submission. |
campaignSample1 |
string | Example SMS that represents actual campaign traffic. Required before carrier submission. Should match the use case and typically identify the brand and include STOP/HELP language. |
campaignSample2 |
string | Second example SMS. Required before carrier submission. Required for MARKETING and MIXED use cases. |
campaignSample3 |
string | Optional third example SMS. |
campaignSample4 |
string | Optional fourth example SMS. |
campaignMessageFlow |
string | How recipients opt in (for example website form, checkout, or keyword). Describe the call-to-action and where consent is collected. Required before carrier submission. |
campaignOptinKeywords |
string | Extra opt-in keywords as a comma-separated list. START is always included. |
campaignOptinMessage |
string | Auto-reply sent when a recipient opts in. Required before carrier submission. Should confirm the subscription, mention message frequency, and include STOP and HELP instructions. |
campaignOptoutKeywords |
string | Extra opt-out keywords as a comma-separated list. STOP is always included. |
campaignOptoutMessage |
string | Auto-reply sent when a recipient opts out. Required before carrier submission. Should confirm they will receive no further messages. |
campaignHelpKeywords |
string | Extra help keywords as a comma-separated list. HELP is always included. |
campaignHelpMessage |
string | Auto-reply sent when a recipient texts a help keyword. Required before carrier submission. Should include a support contact (email and/or phone). |
campaignEmbeddedLink |
boolean | Whether campaign messages include URLs. |
campaignEmbeddedLinkUrl |
string | Sample URL that appears in messages. Provide when campaignEmbeddedLink is true. |
campaignEmbeddedPhone |
boolean | Whether campaign messages include phone numbers. |
campaignAgeGated |
boolean | Whether campaign content is age-restricted (18+). |
campaignDirectLending |
boolean | Whether the campaign relates to direct lending or loan products. |
campaignPrivacyPolicyLink |
string | Public URL of the privacy policy that covers this SMS program. |
campaignTermsAndConditionsLink |
string | Public URL of the terms and conditions that cover this SMS program. |
campaignUsecase |
string | 10DLC campaign use case submitted to carriers. Required before carrier submission. One of 2FA, ACCOUNT_NOTIFICATION, CUSTOMER_CARE, DELIVERY_NOTIFICATION, FRAUD_ALERT, MARKETING, MIXED, POLLING_VOTING, PUBLIC_SERVICE_ANNOUNCEMENT, or SECURITY_ALERT. For MIXED, append comma-separated sub-use cases after MIXED (sub-use cases cannot include MIXED), for example MIXED,2FA,ACCOUNT_NOTIFICATION. |
Sender
SenderDeleteSchedule()
Delete (unschedule) an already scheduled notification
trackingId := // The tracking ID of the scheduled notification
resp, _, err := client.SenderAPI.SenderDeleteSchedule(ctx, trackingId).Execute()if err != nil { // handle error}// resp is MessageResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| trackingId | string | The tracking ID of the scheduled notification | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
SenderUpdateSchedule()
Update the body or schedule of an already scheduled notification.
trackingId := // The tracking ID of the scheduled notificationsenderPostBody := *pingram.NewSenderPostBody() // SenderPostBody
resp, _, err := client.SenderAPI.SenderUpdateSchedule(ctx, trackingId).SenderPostBody(senderPostBody).Execute()if err != nil { // handle error}// resp is MessageResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| trackingId | string | The tracking ID of the scheduled notification | |
| 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. |
to.emailSuppressionStatus.reason |
“Bounce” | “Complaint” | (required) |
to.emailSuppressionStatus.details |
object | (required) |
forceChannels |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | Override which channels to send to (e.g. [“EMAIL”, “SMS”]). Bypasses notification channel config. |
parameters |
Record<string, any> | Key-value pairs for template merge tags. Replaces placeholders like {{firstName}} in templates. |
templateId |
string | Specific template ID to use. If omitted, uses the default template for each channel. |
subNotificationId |
string | Sub-notification identifier (e.g. for grouping related notifications). |
options |
object | Per-channel overrides for send options (email, APN, FCM). |
options.email |
object | Email-specific overrides. |
options.email.replyToAddresses |
string[] | Reply-to addresses for the email. |
options.email.ccAddresses |
string[] | CC recipients. |
options.email.bccAddresses |
string[] | BCC recipients. |
options.email.fromAddress |
string | Override sender email address. |
options.email.fromName |
string | Override sender display name. |
options.email.openTracking |
boolean | When false, this send does not record opens and no open pixel is added. Delivery, bounce, and complaint events are unchanged. Defaults to true. |
options.email.clickTracking |
boolean | When false, links are left as written and clicks are not recorded. Delivery, bounce, and complaint events are unchanged. Defaults to true. |
options.email.attachments |
(object | object)[] | File attachments (by URL or inline base64 content). Inline content: ~4 MB raw per file (413 if exceeded). URL url: up to 20 MB per file. |
options.apn |
object | Apple Push Notification (APN) overrides. |
options.apn.expiry |
number | Seconds until the notification expires. |
options.apn.priority |
number | Delivery priority (10 = immediate, 5 = power-saving). |
options.apn.collapseId |
string | Group notifications with the same ID (replaces previous). |
options.apn.threadId |
string | Thread identifier for grouping notifications. |
options.apn.badge |
number | Badge count on app icon. |
options.apn.sound |
string | Sound file name. |
options.apn.contentAvailable |
boolean | Silent background notification (no alert). |
options.fcm |
object | Firebase Cloud Messaging (FCM) overrides. |
options.fcm.android |
object | Android-specific FCM options. |
options.fcm.android.collapseKey |
string | Collapse key for grouping messages. |
options.fcm.android.priority |
“high” | “normal” | Delivery priority. |
options.fcm.android.ttl |
number | Time to live in seconds. |
options.fcm.android.restrictedPackageName |
string | Restrict delivery to a specific package. |
options.push |
object | Cross-platform mobile push options (applied to both APN and FCM). |
options.push.customData |
Record<string, string> | Up to 3 custom string key-value pairs for deep linking. Included in both APN and FCM payloads. |
schedule |
string | |
email |
object | Inline email content (subject, html). Use when not using templates. |
email.subject |
string | (required) Email subject line. |
email.html |
string | (required) HTML body content. |
email.previewText |
string | Preview/snippet text shown in inbox. |
email.senderName |
string | Display name of sender. |
email.senderEmail |
string | Sender email address. |
inapp |
object | Inline in-app content (title, url, image). |
inapp.title |
string | (required) Notification title. |
inapp.url |
string | URL to open when clicked. |
inapp.image |
string | Image URL. |
sms |
object | Inline SMS content (message, 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.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. |
Sms
SmsSend()
Send an SMS or MMS directly without a template. Requires type and to. Pass message and/or mediaUrls. Optional: from, schedule.
sendSmsRequest := *pingram.NewSendSmsRequest("Type_example", "To_example") // SendSmsRequest
resp, _, err := client.SmsAPI.SmsSend(ctx).SendSmsRequest(sendSmsRequest).Execute()if err != nil { // handle error}// resp is SendSmsResponseParameters
| Name | Type | Description | Notes |
|---|
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. |
SubNotifications
SubNotificationsDeleteSubNotification()
This endpoint is no longer maintained and should not be used.
notificationId := // The notification IDsubNotificationId := // The sub-notification ID
_, err := client.SubNotificationsAPI.SubNotificationsDeleteSubNotification(ctx, notificationId, subNotificationId).Execute()if err != nil { // handle error}Parameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | The notification ID | |
| subNotificationId | string | The sub-notification ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
SubNotificationsPutSubNotification()
This endpoint is no longer maintained and should not be used.
notificationId := // The notification IDsubNotificationId := // The sub-notification IDsubNotificationPUTRequest := *pingram.NewSubNotificationPUTRequest("Title_example") // SubNotificationPUTRequest
resp, _, err := client.SubNotificationsAPI.SubNotificationsPutSubNotification(ctx, notificationId, subNotificationId).SubNotificationPUTRequest(subNotificationPUTRequest).Execute()if err != nil { // handle error}// resp is SubNotificationParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | The notification ID | |
| subNotificationId | string | The sub-notification ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
title |
string | (required) |
Templates
TemplatesCreateTemplate()
Create a new template for a notification
notificationId := // Notification IDchannel := // Channel typetemplatePostRequest := *pingram.NewTemplatePostRequest("TemplateId_example") // TemplatePostRequest
resp, _, err := client.TemplatesAPI.TemplatesCreateTemplate(ctx, notificationId, channel).TemplatePostRequest(templatePostRequest).Execute()if err != nil { // handle error}// resp is TemplateParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | Notification ID | |
| channel | string | Channel type | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
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. |
TemplatesDeleteTemplate()
Delete a template
notificationId := // Notification IDchannel := // Channel typetemplateId := // Template ID
_, err := client.TemplatesAPI.TemplatesDeleteTemplate(ctx, notificationId, channel, templateId).Execute()if err != nil { // handle error}Parameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | Notification ID | |
| channel | string | Channel type | |
| templateId | string | Template ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
TemplatesGetTemplate()
Get a single template by ID
notificationId := // Notification IDchannel := // Channel typetemplateId := // Template ID
resp, _, err := client.TemplatesAPI.TemplatesGetTemplate(ctx, notificationId, channel, templateId).Execute()if err != nil { // handle error}// resp is GetTemplatesResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | Notification ID | |
| channel | string | Channel type | |
| templateId | string | Template ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
TemplatesListTemplates()
List all templates for a notification and channel
notificationId := // Notification IDchannel := // Channel type
resp, _, err := client.TemplatesAPI.TemplatesListTemplates(ctx, notificationId, channel).Execute()if err != nil { // handle error}// resp is []GetTemplatesListResponseInnerParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | Notification ID | |
| channel | string | Channel type | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
TemplatesSetDefaultTemplate()
Set a template as default for specific delivery modes
notificationId := // Notification IDchannel := // Channel typesetDefaultTemplateRequest := *pingram.NewSetDefaultTemplateRequest("TemplateId_example", []string{"Modes_example"}) // SetDefaultTemplateRequest
resp, _, err := client.TemplatesAPI.TemplatesSetDefaultTemplate(ctx, notificationId, channel).SetDefaultTemplateRequest(setDefaultTemplateRequest).Execute()if err != nil { // handle error}// resp is TemplateParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | Notification ID | |
| channel | string | Channel type | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
templateId |
string | (required) |
modes |
(“instant” | “hourly” | “daily” | “weekly” | “monthly”)[] | (required) |
TemplatesUpdateTemplate()
Update a template’s properties
notificationId := // Notification IDchannel := // Channel typetemplateId := // Template IDtemplatePatchRequest := *pingram.NewTemplatePatchRequest() // TemplatePatchRequest
resp, _, err := client.TemplatesAPI.TemplatesUpdateTemplate(ctx, notificationId, channel, templateId).TemplatePatchRequest(templatePatchRequest).Execute()if err != nil { // handle error}// resp is TemplateParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | Notification ID | |
| channel | string | Channel type | |
| templateId | string | Template ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
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. |
Types
TypesCreateNotificationType()
Create a new notification
notificationCreateRequest := *pingram.NewNotificationCreateRequest("NotificationId_example", "Title_example", []string{"Channels_example"}) // NotificationCreateRequest
resp, _, err := client.TypesAPI.TypesCreateNotificationType(ctx).NotificationCreateRequest(notificationCreateRequest).Execute()if err != nil { // handle error}// resp is NotificationParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
notificationId |
string | (required) |
title |
string | (required) |
channels |
string[] | (required) |
options |
object | |
options.EMAIL |
object | |
options.EMAIL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.EMAIL.off |
object | |
options.EMAIL.off.enabled |
boolean | (required) |
options.EMAIL.instant |
object | |
options.EMAIL.instant.enabled |
boolean | (required) |
options.EMAIL.hourly |
object | |
options.EMAIL.hourly.enabled |
boolean | (required) |
options.EMAIL.daily |
object | |
options.EMAIL.daily.enabled |
boolean | (required) |
options.EMAIL.daily.hour |
string | |
options.EMAIL.weekly |
object | |
options.EMAIL.weekly.enabled |
boolean | (required) |
options.EMAIL.weekly.hour |
string | |
options.EMAIL.weekly.day |
string | |
options.EMAIL.monthly |
object | |
options.EMAIL.monthly.enabled |
boolean | (required) |
options.EMAIL.monthly.hour |
string | |
options.EMAIL.monthly.date |
“first” | “last” | |
options.INAPP_WEB |
object | |
options.INAPP_WEB.defaultDeliveryOption |
“off” | “instant” | (required) |
options.INAPP_WEB.off |
object | |
options.INAPP_WEB.off.enabled |
boolean | (required) |
options.INAPP_WEB.instant |
object | |
options.INAPP_WEB.instant.enabled |
boolean | (required) |
options.INAPP_WEB.instant.batching |
boolean | |
options.INAPP_WEB.instant.batchingKey |
string | |
options.INAPP_WEB.instant.batchingWindow |
number | |
options.SMS |
object | |
options.SMS.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SMS.off |
object | |
options.SMS.off.enabled |
boolean | (required) |
options.SMS.instant |
object | |
options.SMS.instant.enabled |
boolean | (required) |
options.SMS.hourly |
object | |
options.SMS.hourly.enabled |
boolean | (required) |
options.SMS.daily |
object | |
options.SMS.daily.enabled |
boolean | (required) |
options.SMS.daily.hour |
string | |
options.SMS.weekly |
object | |
options.SMS.weekly.enabled |
boolean | (required) |
options.SMS.weekly.hour |
string | |
options.SMS.weekly.day |
string | |
options.SMS.monthly |
object | |
options.SMS.monthly.enabled |
boolean | (required) |
options.SMS.monthly.hour |
string | |
options.SMS.monthly.date |
“first” | “last” | |
options.CALL |
object | |
options.CALL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.CALL.off |
object | |
options.CALL.off.enabled |
boolean | (required) |
options.CALL.instant |
object | |
options.CALL.instant.enabled |
boolean | (required) |
options.CALL.hourly |
object | |
options.CALL.hourly.enabled |
boolean | (required) |
options.CALL.daily |
object | |
options.CALL.daily.enabled |
boolean | (required) |
options.CALL.daily.hour |
string | |
options.CALL.weekly |
object | |
options.CALL.weekly.enabled |
boolean | (required) |
options.CALL.weekly.hour |
string | |
options.CALL.weekly.day |
string | |
options.CALL.monthly |
object | |
options.CALL.monthly.enabled |
boolean | (required) |
options.CALL.monthly.hour |
string | |
options.CALL.monthly.date |
“first” | “last” | |
options.VOICE |
object | |
options.VOICE.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.VOICE.off |
object | |
options.VOICE.off.enabled |
boolean | (required) |
options.VOICE.instant |
object | |
options.VOICE.instant.enabled |
boolean | (required) |
options.VOICE.hourly |
object | |
options.VOICE.hourly.enabled |
boolean | (required) |
options.VOICE.daily |
object | |
options.VOICE.daily.enabled |
boolean | (required) |
options.VOICE.daily.hour |
string | |
options.VOICE.weekly |
object | |
options.VOICE.weekly.enabled |
boolean | (required) |
options.VOICE.weekly.hour |
string | |
options.VOICE.weekly.day |
string | |
options.VOICE.monthly |
object | |
options.VOICE.monthly.enabled |
boolean | (required) |
options.VOICE.monthly.hour |
string | |
options.VOICE.monthly.date |
“first” | “last” | |
options.PUSH |
object | |
options.PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.PUSH.off |
object | |
options.PUSH.off.enabled |
boolean | (required) |
options.PUSH.instant |
object | |
options.PUSH.instant.enabled |
boolean | (required) |
options.PUSH.hourly |
object | |
options.PUSH.hourly.enabled |
boolean | (required) |
options.PUSH.daily |
object | |
options.PUSH.daily.enabled |
boolean | (required) |
options.PUSH.daily.hour |
string | |
options.PUSH.weekly |
object | |
options.PUSH.weekly.enabled |
boolean | (required) |
options.PUSH.weekly.hour |
string | |
options.PUSH.weekly.day |
string | |
options.PUSH.monthly |
object | |
options.PUSH.monthly.enabled |
boolean | (required) |
options.PUSH.monthly.hour |
string | |
options.PUSH.monthly.date |
“first” | “last” | |
options.WEB_PUSH |
object | |
options.WEB_PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.WEB_PUSH.off |
object | |
options.WEB_PUSH.off.enabled |
boolean | (required) |
options.WEB_PUSH.instant |
object | |
options.WEB_PUSH.instant.enabled |
boolean | (required) |
options.WEB_PUSH.hourly |
object | |
options.WEB_PUSH.hourly.enabled |
boolean | (required) |
options.WEB_PUSH.daily |
object | |
options.WEB_PUSH.daily.enabled |
boolean | (required) |
options.WEB_PUSH.daily.hour |
string | |
options.WEB_PUSH.weekly |
object | |
options.WEB_PUSH.weekly.enabled |
boolean | (required) |
options.WEB_PUSH.weekly.hour |
string | |
options.WEB_PUSH.weekly.day |
string | |
options.WEB_PUSH.monthly |
object | |
options.WEB_PUSH.monthly.enabled |
boolean | (required) |
options.WEB_PUSH.monthly.hour |
string | |
options.WEB_PUSH.monthly.date |
“first” | “last” | |
options.SLACK |
object | |
options.SLACK.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SLACK.off |
object | |
options.SLACK.off.enabled |
boolean | (required) |
options.SLACK.instant |
object | |
options.SLACK.instant.enabled |
boolean | (required) |
options.SLACK.hourly |
object | |
options.SLACK.hourly.enabled |
boolean | (required) |
options.SLACK.daily |
object | |
options.SLACK.daily.enabled |
boolean | (required) |
options.SLACK.daily.hour |
string | |
options.SLACK.weekly |
object | |
options.SLACK.weekly.enabled |
boolean | (required) |
options.SLACK.weekly.hour |
string | |
options.SLACK.weekly.day |
string | |
options.SLACK.monthly |
object | |
options.SLACK.monthly.enabled |
boolean | (required) |
options.SLACK.monthly.hour |
string | |
options.SLACK.monthly.date |
“first” | “last” |
TypesDeleteNotificationType()
Delete a notification
notificationId := // The notification ID
_, err := client.TypesAPI.TypesDeleteNotificationType(ctx, notificationId).Execute()if err != nil { // handle error}Parameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | The notification ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
TypesGetNotificationType()
Get a specific notification by ID
notificationId := // The notification ID
resp, _, err := client.TypesAPI.TypesGetNotificationType(ctx, notificationId).Execute()if err != nil { // handle error}// resp is []GetNotificationsResponseInnerParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | The notification ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
TypesListNotificationTypes()
Get all notifications for an account with their templates
resp, _, err := client.TypesAPI.TypesListNotificationTypes(ctx).Execute()if err != nil { // handle error}// resp is []GetNotificationsResponseInnerParameters
This endpoint does not need any parameter.
TypesUpdateNotificationType()
Update a notification’s settings
notificationId := // The notification IDnotificationPatchRequest := *pingram.NewNotificationPatchRequest() // NotificationPatchRequest
resp, _, err := client.TypesAPI.TypesUpdateNotificationType(ctx, notificationId).NotificationPatchRequest(notificationPatchRequest).Execute()if err != nil { // handle error}// resp is NotificationParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| notificationId | string | The notification ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
Request Body Properties
| Name | Type | Description |
|---|---|---|
title |
string | |
channels |
(“EMAIL” | “INAPP_WEB” | “SMS” | “CALL” | “VOICE” | “PUSH” | “WEB_PUSH” | “SLACK”)[] | |
enabled |
boolean | |
deduplication |
object | |
deduplication.duration |
number | (required) |
throttling |
object | |
throttling.max |
number | (required) |
throttling.period |
number | (required) |
throttling.unit |
“seconds” | “minutes” | “hours” | “days” | “months” | “years” | (required) |
throttling.forever |
boolean | (required) |
throttling.scope |
(“userId” | “notificationId”)[] | (required) |
retention |
number | null |
options |
object | |
options.EMAIL |
object | |
options.EMAIL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.EMAIL.off |
object | |
options.EMAIL.off.enabled |
boolean | (required) |
options.EMAIL.instant |
object | |
options.EMAIL.instant.enabled |
boolean | (required) |
options.EMAIL.hourly |
object | |
options.EMAIL.hourly.enabled |
boolean | (required) |
options.EMAIL.daily |
object | |
options.EMAIL.daily.enabled |
boolean | (required) |
options.EMAIL.daily.hour |
string | |
options.EMAIL.weekly |
object | |
options.EMAIL.weekly.enabled |
boolean | (required) |
options.EMAIL.weekly.hour |
string | |
options.EMAIL.weekly.day |
string | |
options.EMAIL.monthly |
object | |
options.EMAIL.monthly.enabled |
boolean | (required) |
options.EMAIL.monthly.hour |
string | |
options.EMAIL.monthly.date |
“first” | “last” | |
options.INAPP_WEB |
object | |
options.INAPP_WEB.defaultDeliveryOption |
“off” | “instant” | (required) |
options.INAPP_WEB.off |
object | |
options.INAPP_WEB.off.enabled |
boolean | (required) |
options.INAPP_WEB.instant |
object | |
options.INAPP_WEB.instant.enabled |
boolean | (required) |
options.INAPP_WEB.instant.batching |
boolean | |
options.INAPP_WEB.instant.batchingKey |
string | |
options.INAPP_WEB.instant.batchingWindow |
number | |
options.SMS |
object | |
options.SMS.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SMS.off |
object | |
options.SMS.off.enabled |
boolean | (required) |
options.SMS.instant |
object | |
options.SMS.instant.enabled |
boolean | (required) |
options.SMS.hourly |
object | |
options.SMS.hourly.enabled |
boolean | (required) |
options.SMS.daily |
object | |
options.SMS.daily.enabled |
boolean | (required) |
options.SMS.daily.hour |
string | |
options.SMS.weekly |
object | |
options.SMS.weekly.enabled |
boolean | (required) |
options.SMS.weekly.hour |
string | |
options.SMS.weekly.day |
string | |
options.SMS.monthly |
object | |
options.SMS.monthly.enabled |
boolean | (required) |
options.SMS.monthly.hour |
string | |
options.SMS.monthly.date |
“first” | “last” | |
options.CALL |
object | |
options.CALL.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.CALL.off |
object | |
options.CALL.off.enabled |
boolean | (required) |
options.CALL.instant |
object | |
options.CALL.instant.enabled |
boolean | (required) |
options.CALL.hourly |
object | |
options.CALL.hourly.enabled |
boolean | (required) |
options.CALL.daily |
object | |
options.CALL.daily.enabled |
boolean | (required) |
options.CALL.daily.hour |
string | |
options.CALL.weekly |
object | |
options.CALL.weekly.enabled |
boolean | (required) |
options.CALL.weekly.hour |
string | |
options.CALL.weekly.day |
string | |
options.CALL.monthly |
object | |
options.CALL.monthly.enabled |
boolean | (required) |
options.CALL.monthly.hour |
string | |
options.CALL.monthly.date |
“first” | “last” | |
options.VOICE |
object | |
options.VOICE.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.VOICE.off |
object | |
options.VOICE.off.enabled |
boolean | (required) |
options.VOICE.instant |
object | |
options.VOICE.instant.enabled |
boolean | (required) |
options.VOICE.hourly |
object | |
options.VOICE.hourly.enabled |
boolean | (required) |
options.VOICE.daily |
object | |
options.VOICE.daily.enabled |
boolean | (required) |
options.VOICE.daily.hour |
string | |
options.VOICE.weekly |
object | |
options.VOICE.weekly.enabled |
boolean | (required) |
options.VOICE.weekly.hour |
string | |
options.VOICE.weekly.day |
string | |
options.VOICE.monthly |
object | |
options.VOICE.monthly.enabled |
boolean | (required) |
options.VOICE.monthly.hour |
string | |
options.VOICE.monthly.date |
“first” | “last” | |
options.PUSH |
object | |
options.PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.PUSH.off |
object | |
options.PUSH.off.enabled |
boolean | (required) |
options.PUSH.instant |
object | |
options.PUSH.instant.enabled |
boolean | (required) |
options.PUSH.hourly |
object | |
options.PUSH.hourly.enabled |
boolean | (required) |
options.PUSH.daily |
object | |
options.PUSH.daily.enabled |
boolean | (required) |
options.PUSH.daily.hour |
string | |
options.PUSH.weekly |
object | |
options.PUSH.weekly.enabled |
boolean | (required) |
options.PUSH.weekly.hour |
string | |
options.PUSH.weekly.day |
string | |
options.PUSH.monthly |
object | |
options.PUSH.monthly.enabled |
boolean | (required) |
options.PUSH.monthly.hour |
string | |
options.PUSH.monthly.date |
“first” | “last” | |
options.WEB_PUSH |
object | |
options.WEB_PUSH.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.WEB_PUSH.off |
object | |
options.WEB_PUSH.off.enabled |
boolean | (required) |
options.WEB_PUSH.instant |
object | |
options.WEB_PUSH.instant.enabled |
boolean | (required) |
options.WEB_PUSH.hourly |
object | |
options.WEB_PUSH.hourly.enabled |
boolean | (required) |
options.WEB_PUSH.daily |
object | |
options.WEB_PUSH.daily.enabled |
boolean | (required) |
options.WEB_PUSH.daily.hour |
string | |
options.WEB_PUSH.weekly |
object | |
options.WEB_PUSH.weekly.enabled |
boolean | (required) |
options.WEB_PUSH.weekly.hour |
string | |
options.WEB_PUSH.weekly.day |
string | |
options.WEB_PUSH.monthly |
object | |
options.WEB_PUSH.monthly.enabled |
boolean | (required) |
options.WEB_PUSH.monthly.hour |
string | |
options.WEB_PUSH.monthly.date |
“first” | “last” | |
options.SLACK |
object | |
options.SLACK.defaultDeliveryOption |
“off” | “instant” | “hourly” | “daily” | “weekly” | “monthly” | (required) |
options.SLACK.off |
object | |
options.SLACK.off.enabled |
boolean | (required) |
options.SLACK.instant |
object | |
options.SLACK.instant.enabled |
boolean | (required) |
options.SLACK.hourly |
object | |
options.SLACK.hourly.enabled |
boolean | (required) |
options.SLACK.daily |
object | |
options.SLACK.daily.enabled |
boolean | (required) |
options.SLACK.daily.hour |
string | |
options.SLACK.weekly |
object | |
options.SLACK.weekly.enabled |
boolean | (required) |
options.SLACK.weekly.hour |
string | |
options.SLACK.weekly.day |
string | |
options.SLACK.monthly |
object | |
options.SLACK.monthly.enabled |
boolean | (required) |
options.SLACK.monthly.hour |
string | |
options.SLACK.monthly.date |
“first” | “last” |
User
UserGetAccountMetadata()
Get account-level metadata including logo, VAPID key, and web push status
resp, _, err := client.UserAPI.UserGetAccountMetadata(ctx).Execute()if err != nil { // handle error}// resp is GetAccountMetadataResponseParameters
This endpoint does not need any parameter.
UserGetUser()
Get a user by ID. All users exist implicitly, returns basic user object if not found in DB.
userId := // User ID
resp, _, err := client.UserAPI.UserGetUser(ctx, userId).Execute()if err != nil { // handle error}// resp is UserParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| userId | string | User ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
UserIdentify()
Create or update a user with the given ID. Updates lastSeenTime automatically.
userId := // User IDpostUserRequest := *pingram.NewPostUserRequest() // PostUserRequest
resp, _, err := client.UserAPI.UserIdentify(ctx, userId).PostUserRequest(postUserRequest).Execute()if err != nil { // handle error}// resp is UserParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| userId | string | User ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
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[] | |
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)
userId := // User IDenvId := "envId_example" // string (optional)
resp, _, err := client.UsersAPI.UsersDeleteUser(ctx, userId).EnvId(envId).Execute()if err != nil { // handle error}// resp is DeleteUserResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| userId | string | User ID | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
envId | string | Environment ID (required when using JWT auth) |
UsersListUsers()
Get all users for an environment with pagination support
limit := float32(8.14) // float32nextToken := "nextToken_example" // stringenvId := "envId_example" // string (optional)
resp, _, err := client.UsersAPI.UsersListUsers(ctx).Limit(limit).NextToken(nextToken).EnvId(envId).Execute()if err != nil { // handle error}// resp is GetUsersResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| limit | float32 | Maximum number of users to return (default | |
| nextToken | string | Pagination token for next page | |
| envId | string | Environment ID (required when using JWT auth) |
UsersRemoveUserFromSuppression()
Remove user suppression status for a specific channel
userId := // User IDchannel := // Channel type (EMAIL)envId := "envId_example" // string (optional)
resp, _, err := client.UsersAPI.UsersRemoveUserFromSuppression(ctx, userId, channel).EnvId(envId).Execute()if err != nil { // handle error}// resp is UserSuppressionDeleteResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| userId | string | User ID | |
| channel | string | Channel type (EMAIL) | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
envId | string | Environment ID (required when using JWT auth) |
Voice
VoiceArmInboundClaim()
Arm the shared test number so the next call from this user’s phone uses this inbound behavior
armVoiceInboundClaimRequest := *pingram.NewArmVoiceInboundClaimRequest(pingram.ArmVoiceInboundClaimRequest_inbound{Agent: pingram.NewAgent("Type_example", *pingram.NewAgentAgent("Instructions_example", pingram.Agent_agent_model{GoogleGemini31FlashLivePreview: pingram.NewGoogleGemini31FlashLivePreview("Model_example")}))}) // ArmVoiceInboundClaimRequest
resp, _, err := client.VoiceAPI.VoiceArmInboundClaim(ctx).ArmVoiceInboundClaimRequest(armVoiceInboundClaimRequest).Execute()if err != nil { // handle error}// resp is ArmVoiceInboundClaimResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
inbound |
object | object | object | object | (required) |
inbound.type |
“script” | (required) |
inbound.steps |
object[] | (required) |
inbound.steps[].verb |
“Say” | (required) |
inbound.steps[].text |
string | (required) |
inbound.privacy |
object | Omitted privacy means record and transcribe are both on. |
inbound.privacy.record |
boolean | |
inbound.privacy.transcribe |
boolean |
VoiceCall()
Place an outbound call. The config is not saved.
voiceCallRequest := *pingram.NewVoiceCallRequest("To_example", pingram.VoiceBrowserCallRequest_config_anyOf{Agent1: pingram.NewAgent1("Type_example", *pingram.NewAgentAgent("Instructions_example", pingram.Agent_agent_model{GoogleGemini31FlashLivePreview: pingram.NewGoogleGemini31FlashLivePreview("Model_example")}))}) // VoiceCallRequest
resp, _, err := client.VoiceAPI.VoiceCall(ctx).VoiceCallRequest(voiceCallRequest).Execute()if err != nil { // handle error}// resp is VoiceCallResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
to |
string | (required) E.164 number to dial. |
config |
object | object | (required) |
config.type |
“script” | (required) |
config.steps |
object[] | (required) |
config.steps[].verb |
“Say” | (required) |
config.steps[].text |
string | (required) |
config.voicemailAction |
“hangup” | “message” | “continue” | What to do when an answering machine picks up. hangup ends the call, message plays voicemailMessage, continue keeps talking. Default: continue. |
config.voicemailMessage |
string | |
config.privacy |
object | Omitted privacy means record and transcribe are both on. |
config.privacy.record |
boolean | |
config.privacy.transcribe |
boolean | |
variables |
Record<string, string> | Optional per-call {{variable}} overrides. |
VoiceClearNumberInbound()
Remove inbound call behavior from a number this account owns
phoneNumber := // E.164 phone number
resp, _, err := client.VoiceAPI.VoiceClearNumberInbound(ctx, phoneNumber).Execute()if err != nil { // handle error}// resp is MessageResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| phoneNumber | string | E.164 phone number | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
VoiceCreateBrowserCall()
Place a browser playground call. Script calls use POST /voice/call.
voiceBrowserCallRequest := *pingram.NewVoiceBrowserCallRequest(*pingram.NewVoiceBrowserCallRequestConfig("Type_example", []pingram.ScriptStepsInner{*pingram.NewScriptStepsInner("Verb_example", "Text_example")}, *pingram.NewAgentAgent("Instructions_example", pingram.Agent_agent_model{GoogleGemini31FlashLivePreview: pingram.NewGoogleGemini31FlashLivePreview("Model_example")}), "To_example")) // VoiceBrowserCallRequest
resp, _, err := client.VoiceAPI.VoiceCreateBrowserCall(ctx).VoiceBrowserCallRequest(voiceBrowserCallRequest).Execute()if err != nil { // handle error}// resp is VoiceBrowserCallResponseParameters
| Name | Type | Description | Notes |
|---|
Request Body Properties
| Name | Type | Description |
|---|---|---|
config |
object | object | object | object | object | object | (required) Agent behavior for this browser call. Script calls use POST /voice/call. |
variables |
Record<string, string> | Optional per-call {{variable}} overrides for browser playground. |
direction |
“inbound” | “outbound” | inbound speaks the greeting. outbound speaks the opener. Omitted means outbound. |
VoiceGetCall()
Get a call with transcript timeline and recording playback URL
trackingId := // Call tracking id
resp, _, err := client.VoiceAPI.VoiceGetCall(ctx, trackingId).Execute()if err != nil { // handle error}// resp is GetVoiceCallResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| trackingId | string | Call tracking id | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |
VoiceListCalls()
List recent calls newest-first (30-day retention)
limit := float32(8.14) // float32 (optional)cursor := "cursor_example" // string (optional)
resp, _, err := client.VoiceAPI.VoiceListCalls(ctx).Limit(limit).Cursor(cursor).Execute()if err != nil { // handle error}// resp is ListVoiceCallsResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| limit | float32 | Page size (default 25, max 100) | |
| cursor | string | Pagination cursor from a previous response |
VoicePutNumberInbound()
Store inbound call behavior on a number this account owns
phoneNumber := // E.164 phone numberinboundConfig := pingram.InboundConfig{Agent: pingram.NewAgent("Type_example", *pingram.NewAgentAgent("Instructions_example", pingram.Agent_agent_model{GoogleGemini31FlashLivePreview: pingram.NewGoogleGemini31FlashLivePreview("Model_example")}))} // InboundConfig
resp, _, err := client.VoiceAPI.VoicePutNumberInbound(ctx, phoneNumber).InboundConfig(inboundConfig).Execute()if err != nil { // handle error}// resp is MessageResponseParameters
| Name | Type | Description | Notes |
|---|---|---|---|
| ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
| phoneNumber | string | E.164 phone number | |
| Name | Type | Description | Notes |
| ———–– | ———–– | ———–– | ———–– |