Shared types referenced by multiple services. Most are defined in pidgr/v1/common.proto; user, channel, key, and organization types that are used platform-wide are noted with their source file.
Canonical message type used across rendering, inbox, and delivery. Represents the fully rendered content delivered to a recipient.
| Field |
Type |
Description |
content_id |
string |
SHA-256 hash of the rendered content (content-addressable ID). |
campaign_id |
string |
Parent campaign ID. |
sender_name |
string |
Sender display name. Max 200 characters. |
title |
string |
User-facing message title (resolved from campaign or template). Max 200 characters. |
summary |
string |
One-line summary for notification banners. Max 500 characters. |
preview |
string |
Preview text for inbox list views. Max 500 characters. |
body |
string |
Full message body. Max 100,000 characters. |
critical |
bool |
Whether immediate attention is required. |
actions |
MessageAction[] |
Available recipient actions. |
created_at |
Timestamp |
Creation timestamp. |
An action button attached to a message.
| Field |
Type |
Description |
id |
string |
Unique action identifier within the message. |
type |
ActionType |
Action type (e.g. ACK). |
label |
string |
Display label (e.g., “Got it”). Max 50 characters. |
Cursor-based pagination parameters for list requests.
| Field |
Type |
Description |
page_size |
int32 |
Maximum items per page. |
page_token |
string |
Opaque token from a previous response for the next page. |
Pagination metadata in list responses.
| Field |
Type |
Description |
next_page_token |
string |
Token for the next page. Empty if no more pages. |
total_count |
int32 |
Total items matching the query (across all pages). |
A named role with permissions within an organization.
| Field |
Type |
Description |
id |
string |
Unique identifier. |
slug |
string |
URL-safe slug, unique within the organization (e.g. admin). |
name |
string |
Display name. |
is_default |
bool |
Seeded by the system on organization creation. |
permissions |
Permission[] |
Granted permissions. |
is_system |
bool |
System-managed and immutable (e.g. super_admin). |
A data-driven workflow represented as a directed acyclic graph (DAG) of steps. Defines the automation logic for a campaign’s lifecycle.
| Field |
Type |
Description |
steps |
WorkflowStep[] |
Steps in the workflow DAG. Max 100 steps; the graph must contain no cycles. |
A single step in a workflow DAG with typed configuration and transitions. Exactly one config field (matching type) must be set — they form a oneof.
| Field |
Type |
Description |
id |
string |
Unique step identifier within the workflow. |
type |
StepType |
Step type. |
send_notification |
SendNotificationConfig |
Config for SEND_NOTIFICATION steps. |
deadline_check |
DeadlineCheckConfig |
Config for DEADLINE_CHECK steps. |
send_reminder |
SendReminderConfig |
Config for SEND_REMINDER steps. |
call_webhook |
CallWebhookConfig |
Config for CALL_WEBHOOK steps. |
escalate_config |
EscalateConfig |
Config for ESCALATE steps. |
transitions |
map<string, string> |
Next step ID by outcome key (e.g. "completed" -> "step_3"). Max 10 entries. |
Configuration for the step that sends the initial notification.
| Field |
Type |
Description |
type |
string |
Delivery type. Accepted value: push. |
template_id |
string |
Template for this step. Empty falls back to the campaign-level template. |
template_version |
int32 |
Pinned template version. 0 falls back to the campaign-level version. |
action_label |
string |
Action button label (e.g. “Acknowledge”). Max 50 characters. |
action_type |
ActionType |
Action type for the message button. |
custom_variables |
map<string, string> |
Step-level values for custom template variables. Max 100 entries. |
Configuration for a deadline-based timer step that sleeps before proceeding. Acknowledgments happen independently at the delivery level and are evaluated by subsequent steps.
| Field |
Type |
Description |
delay |
string |
Duration string (e.g. "72h"). Valid range 1 minute to 1 year. |
Configuration for a step that sends a one-time reminder to non-responsive recipients.
| Field |
Type |
Description |
type |
string |
Delivery type. Accepted value: push. |
third_party_channels |
ChannelName[] |
Additional notification channels to dispatch the reminder through alongside push. Empty means push-only. |
notify_targets |
EscalationTarget[] |
Third parties to loop in when the reminder fires. Each resolved target receives a passive inbox delivery (no action button) that auto-dismisses when the original recipient acknowledges. Max 5 entries. |
Configuration for a step that calls an external webhook.
| Field |
Type |
Description |
name |
string |
Human-readable name for logging/display. Max 200 characters. |
url |
string |
URL to POST campaign context to. HTTPS required in production; private, loopback, and link-local addresses are rejected. Max 2048 characters. |
headers |
map<string, string> |
Additional HTTP headers. Max 20 entries. |
Who should be notified when an escalation (or reminder notify-target) fires.
| Field |
Type |
Description |
type |
EscalationTargetType |
Target type. |
target_id |
string |
ID of the target (user, group, or role). Empty for MANAGER — resolved at runtime from the recipient’s manager. |
Configuration for an escalation step in the workflow DAG.
| Field |
Type |
Description |
condition |
EscalationCondition |
Condition that triggers escalation. |
targets |
EscalationTarget[] |
Targets to notify when escalation fires. |
repeat_count |
int32 |
Times to repeat before moving to the next step. Max 5. |
repeat_interval_minutes |
int32 |
Minutes between repeat attempts. |
mode |
EscalateMode |
Behavior mode. UNSPECIFIED is normalized to DELIVER. |
third_party_channels |
ChannelName[] |
Additional notification channels to dispatch the escalation through. Empty means no third-party fan-out. |
A user within an organization. Defined in pidgr/v1/user.proto.
| Field |
Type |
Description |
id |
string |
Unique platform identifier (not the identity-provider subject ID). |
email |
string |
Email address. Max 254 characters. |
name |
string |
Display name. Max 200 characters. |
status |
UserStatus |
Account status. |
created_at |
Timestamp |
Creation timestamp. |
role |
Role |
The user’s role with its permission set. |
role_id |
string |
ID of the user’s role (for assignment operations). |
profile |
UserProfile |
Structured profile attributes. May be empty. |
processing_restricted |
bool |
Whether data processing is restricted (GDPR Art. 18). When true, the user is excluded from campaign audiences by default. |
data_governance_region |
string |
Region override (EU, LATAM, BR, APAC, US). Empty inherits the organization default. |
Structured profile attributes, populated through admin invitation, mobile onboarding, or SSO/SCIM attribute sync. Defined in pidgr/v1/user.proto. All string fields max 200 characters.
| Field |
Type |
Description |
first_name |
string |
Given name. |
last_name |
string |
Family name. |
department |
string |
Department or team. |
title |
string |
Job title. |
phone |
string |
Phone number. |
location |
string |
Office or geographic location. |
employee_id |
string |
Organization-specific employee identifier. |
manager_name |
string |
Display name of the direct manager. |
start_date |
string |
Employment start date (YYYY-MM-DD). |
custom_attributes |
map<string, string> |
Organization-defined custom attributes. Max 50 entries. |
manager_id |
string |
UUID of the direct manager within the same organization. Used to resolve MANAGER escalation targets. |
User-configurable platform settings that apply across all clients. Defined in pidgr/v1/user.proto. Zero values mean “no change” in updates.
| Field |
Type |
Description |
theme_preference |
ThemePreference |
Preferred color scheme. |
preferred_locale |
string |
Preferred language for UI and notifications (en, es, pt-BR, zh, ja). Empty means organization default / auto-detect. |
| Value |
Number |
Description |
ACTION_TYPE_UNSPECIFIED |
0 |
Unspecified |
ACTION_TYPE_ACK |
1 |
Acknowledge — recipient confirms they received the message |
| Value |
Number |
Description |
CAMPAIGN_STATUS_UNSPECIFIED |
0 |
Unspecified |
CAMPAIGN_STATUS_CREATED |
1 |
Created but not yet started |
CAMPAIGN_STATUS_RUNNING |
2 |
Actively delivering messages and processing actions |
CAMPAIGN_STATUS_COMPLETED |
3 |
All recipients processed; campaign finished |
CAMPAIGN_STATUS_FAILED |
4 |
Terminated due to an unrecoverable error |
CAMPAIGN_STATUS_CANCELLED |
5 |
Manually cancelled before completion |
| Value |
Number |
Description |
DELIVERY_STATUS_UNSPECIFIED |
0 |
Unspecified |
DELIVERY_STATUS_PENDING |
1 |
Queued, not yet sent |
DELIVERY_STATUS_SENT |
2 |
Push notification sent to the delivery provider |
DELIVERY_STATUS_DELIVERED |
3 |
Confirmed delivered to the device |
DELIVERY_STATUS_ACKNOWLEDGED |
4 |
Recipient completed the required action |
DELIVERY_STATUS_MISSED |
5 |
Recipient did not act before the deadline |
DELIVERY_STATUS_NO_DEVICE |
6 |
No registered device; delivery skipped |
DELIVERY_STATUS_FAILED |
7 |
Failed due to a provider or system error |
| Value |
Number |
Description |
STEP_TYPE_UNSPECIFIED |
0 |
Unspecified |
STEP_TYPE_SEND_NOTIFICATION |
1 |
Send the initial notification to all recipients |
STEP_TYPE_DEADLINE_CHECK |
2 |
Sleep for a configurable deadline |
STEP_TYPE_SEND_REMINDER |
3 |
Send a follow-up reminder to recipients who have not acted |
STEP_TYPE_CALL_WEBHOOK |
4 |
Call an external webhook with campaign context |
STEP_TYPE_MARK_MISSED |
5 |
Mark unacknowledged deliveries as missed |
STEP_TYPE_ESCALATE |
6 |
Escalate unacknowledged deliveries to configured targets |
| Value |
Number |
Description |
ESCALATION_CONDITION_UNSPECIFIED |
0 |
Unspecified |
ESCALATION_CONDITION_IF_NOT_ACKED |
1 |
Escalate if the delivery has not been acknowledged |
ESCALATION_CONDITION_IF_NOT_CLOSED |
2 |
Escalate while the campaign is still open |
| Value |
Number |
Description |
ESCALATION_TARGET_TYPE_UNSPECIFIED |
0 |
Unspecified |
ESCALATION_TARGET_TYPE_USER |
1 |
A specific user by ID |
ESCALATION_TARGET_TYPE_GROUP |
2 |
All members of a group |
ESCALATION_TARGET_TYPE_MANAGER |
3 |
The recipient’s direct manager (resolved at runtime) |
ESCALATION_TARGET_TYPE_ROLE |
4 |
All users with a specific role |
| Value |
Number |
Description |
ESCALATE_MODE_UNSPECIFIED |
0 |
Normalized to DELIVER |
ESCALATE_MODE_DELIVER |
1 |
Targets receive a delivery for the campaign, like primary recipients |
ESCALATE_MODE_ALERT_ONLY |
2 |
Targets receive an out-of-band alert only; no delivery is created |
Granular permission for authorization checks, granted through roles, API keys, and OAuth scopes. PERMISSION_PLATFORM_* values are reserved for platform staff and cannot be assigned within customer organizations.
| Value |
Number |
Description |
PERMISSION_UNSPECIFIED |
0 |
Unspecified |
PERMISSION_ORG_READ |
1 |
View organization settings |
PERMISSION_ORG_WRITE |
2 |
Modify organization settings |
PERMISSION_MEMBERS_READ |
3 |
View organization members |
PERMISSION_MEMBERS_INVITE |
4 |
Invite new users to the organization |
PERMISSION_MEMBERS_MANAGE |
5 |
Change user roles, deactivate users |
PERMISSION_CAMPAIGNS_READ |
6 |
View campaigns and deliveries |
PERMISSION_CAMPAIGNS_WRITE |
7 |
Create and edit campaigns |
PERMISSION_CAMPAIGNS_START |
8 |
Start campaign execution |
PERMISSION_TEMPLATES_READ |
9 |
View templates |
PERMISSION_TEMPLATES_WRITE |
10 |
Create and edit templates |
PERMISSION_INBOX_READ |
11 |
View inbox messages and deliveries |
PERMISSION_INBOX_ACT |
12 |
Submit actions on deliveries |
PERMISSION_GROUPS_ALL_READ |
13 |
View all groups in the organization |
PERMISSION_GROUPS_WRITE |
14 |
Manage groups the caller created |
PERMISSION_GROUPS_ALL_WRITE |
15 |
Manage any group in the organization |
PERMISSION_TEAMS_ALL_READ |
16 |
View all teams in the organization |
PERMISSION_TEAMS_WRITE |
17 |
Manage teams the caller created |
PERMISSION_TEAMS_ALL_WRITE |
18 |
Manage any team in the organization |
PERMISSION_PRIVACY_READ |
19 |
View privacy requests (exports, deletions) |
PERMISSION_PRIVACY_WRITE |
20 |
Schedule deletions, export user data, restrict processing |
PERMISSION_AUDIT_READ |
21 |
View audit trail events |
PERMISSION_TEMPLATES_REVIEW |
22 |
Review and approve template translations |
PERMISSION_PLATFORM_SUPPORT |
23 |
Cross-organization read access (staff only) |
PERMISSION_PLATFORM_ACCESS_CODES |
24 |
Manage platform access codes (staff only) |
PERMISSION_PLATFORM_PROVISION |
25 |
Provision and manage organizations (staff only) |
PERMISSION_PLATFORM_ABUSE_RESPONSE |
26 |
Abuse-response actions against organizations (staff only) |
PERMISSION_PLATFORM_COMPLIANCE_WRITE |
27 |
Write subprocessor and compliance records (staff only) |
PERMISSION_PLATFORM_SYNTHETIC |
28 |
Create synthetic (flagged) demo data (staff only) |
PERMISSION_CHANNELS_DISPATCH |
29 |
Dispatch notifications to third-party channels |
PERMISSION_REACHABILITY_WRITE |
30 |
Manage a member’s third-party channel reachability |
PERMISSION_PLATFORM_INCIDENTS |
31 |
Triage security incidents (staff only) |
| Value |
Number |
Description |
PLATFORM_UNSPECIFIED |
0 |
Unspecified |
PLATFORM_IOS |
1 |
iOS |
PLATFORM_ANDROID |
2 |
Android |
Third-party notification channel for reminder and escalation dispatch. Defined in pidgr/v1/channel_events.proto. Push is intentionally not in this enum — push is the primary channel and always fires; third-party channels are additive and carry only a deeplink notification, never message content. See notification channels.
| Value |
Number |
Description |
CHANNEL_NAME_UNSPECIFIED |
0 |
Unspecified |
CHANNEL_NAME_EMAIL |
1 |
Email |
CHANNEL_NAME_WEBHOOK |
2 |
Generic webhook |
CHANNEL_NAME_TELEGRAM |
3 |
Telegram |
CHANNEL_NAME_SLACK |
4 |
Slack |
CHANNEL_NAME_SMS |
5 |
SMS |
CHANNEL_NAME_WHATSAPP |
6 |
WhatsApp |
CHANNEL_NAME_MICROSOFT_TEAMS |
7 |
Microsoft Teams |
CHANNEL_NAME_LINE |
8 |
LINE |
CHANNEL_NAME_GOOGLE_CHAT |
9 |
Google Chat |
Workflow step kind that triggered a channel dispatch. Defined in pidgr/v1/channel_events.proto.
| Value |
Number |
Description |
CHANNEL_STEP_KIND_UNSPECIFIED |
0 |
Unspecified |
CHANNEL_STEP_KIND_REMINDER |
1 |
Dispatch triggered by a reminder step |
CHANNEL_STEP_KIND_ESCALATION |
2 |
Dispatch triggered by an escalation step |
Status of a channel dispatch attempt. Events are append-only — each state transition (e.g. SENT → DELIVERED via a provider webhook) is its own event. Defined in pidgr/v1/channel_events.proto.
| Value |
Number |
Description |
CHANNEL_EVENT_STATUS_UNSPECIFIED |
0 |
Unspecified |
CHANNEL_EVENT_STATUS_SENT |
1 |
Handed to the provider |
CHANNEL_EVENT_STATUS_DELIVERED |
2 |
Confirmed delivered by the provider |
CHANNEL_EVENT_STATUS_OPENED |
3 |
Recipient opened the notification |
CHANNEL_EVENT_STATUS_CLICKED |
4 |
Recipient clicked the deeplink |
CHANNEL_EVENT_STATUS_BOUNCED |
5 |
Provider bounce |
CHANNEL_EVENT_STATUS_FAILED |
6 |
Dispatch failed |
CHANNEL_EVENT_STATUS_SKIPPED |
7 |
Dispatch skipped (see ChannelSkipReason) |
Reason a dispatch was skipped rather than attempted. Defined in pidgr/v1/channel_events.proto.
| Value |
Number |
Description |
CHANNEL_SKIP_REASON_UNSPECIFIED |
0 |
Unspecified |
CHANNEL_SKIP_REASON_OPTED_OUT |
1 |
Recipient opted out of the channel |
CHANNEL_SKIP_REASON_REGION_BLOCKED |
2 |
Blocked by the organization’s region policy |
CHANNEL_SKIP_REASON_COST_CAP_EXCEEDED |
3 |
Organization cost cap exceeded |
CHANNEL_SKIP_REASON_NO_IDENTIFIER |
4 |
No channel identifier on file for the recipient |
CHANNEL_SKIP_REASON_ORG_SUSPENDED |
5 |
Organization suspended |
Type of API key. Defined in pidgr/v1/api_key.proto.
| Value |
Number |
Description |
KEY_TYPE_UNSPECIFIED |
0 |
Unspecified |
KEY_TYPE_API_KEY |
1 |
Platform API key |
KEY_TYPE_SCIM_TOKEN |
2 |
SCIM provisioning token |
Classification of an organization’s lifecycle type. Defined in pidgr/v1/organization.proto.
| Value |
Number |
Description |
ORG_TYPE_UNSPECIFIED |
0 |
Unspecified |
ORG_TYPE_STANDARD |
1 |
Standard organization |
ORG_TYPE_SANDBOX |
2 |
Sandbox organization with an expiry |
ORG_TYPE_STAFF |
3 |
Reserved for platform operations; cannot be created via the API |
Defined in pidgr/v1/user.proto.
| Value |
Number |
Description |
THEME_PREFERENCE_UNSPECIFIED |
0 |
Treated as SYSTEM when reading, “no change” when updating |
THEME_PREFERENCE_LIGHT |
1 |
Always light mode |
THEME_PREFERENCE_DARK |
2 |
Always dark mode |
THEME_PREFERENCE_SYSTEM |
3 |
Follow the operating system or browser preference |
Defined in pidgr/v1/user.proto.
| Value |
Number |
Description |
USER_STATUS_UNSPECIFIED |
0 |
Unspecified |
USER_STATUS_INVITED |
1 |
Invited but has not completed onboarding |
USER_STATUS_ACTIVE |
2 |
Active; can receive messages |
USER_STATUS_DEACTIVATED |
3 |
Deactivated; will not receive messages |