Get desktop application:
View/edit binary Protocol Buffers messages
Service for one-time purchases of logins
Obtain a ZK receipt credential for a completed one-time login payment. The receipt credential can then be presented at registration
The payment processor. Currently, only GOOGLE_PLAY_BILLING and APPLE_APP_STORE are supported.
The identifier of a completed purchase for a signal login within the payment provider
The receipt credential request. Subsequent retries to create a login credential for the same purchase_identifier must use an identical receipt_credential_request. Callers must validate that the generated receipt credential has the following properties: - Level == 300 (The login level) - ExpirationTime % 86400 == 0 - ExpirationTime == PurchaseTime + (5 * 366 * 86400) +/- (7 * 86400)
The purchase is still pending with the payment provider. The client may retry later.
The purchase did not complete successfully.
The payment provider has no purchase with the provided purchase_identifier
The purchase was already redeemed for a receipt credential, but with a different receipt credential request
Service for making one-time donation payments (boost and gift) Configuration for one-time donations can be found in ProductConfiguration.
Confirm a PayPal one-time payment
ISO 4217 currency code, case-insensitive (e.g. "usd", "EUR")
Amount in the currency's minor unit, must be >= 1
Donation level.
PayPal payer ID from the approval redirect
PayPal payment ID (PAYID-…) from CreatePayPalBoost
PayPal payment token (EC-…) from the approval redirect
The amount is below the minimum for the currency
The requested currency is not supported for PayPal
The requested level is not a valid one-time donation level
The payment failed; see charge failure details
Create a Stripe payment intent and return a client secret that can be used to complete the payment. Once the payment is complete, the paymentIntentId can be used with CreateBoostReceiptCredentials
ISO 4217 currency code, case-insensitive (e.g. "usd", "EUR")
The amount to pay in the [currency's minor unit](https://docs.stripe.com/currencies#minor-units)
The level for the boost payment
The payment method
A donation permit retrieved from Donations.createDonationPermit
A client secret that can be used to complete a stripe PaymentIntent
The amount is below the minimum for the currency
The amount exceeds the maximum for SEPA Direct Debit
The requested currency is not supported for the given payment method
The requested level is not a valid one-time donation level
Donation permit was invalid or already spent
The amount in the specified currency is not supported by the payment provider
Obtain a ZK receipt credential for a completed one-time donation payment. The receipt credential can then be used to redeem the one-time donation entitlement via Donations.RedeemReceipt
a payment ID from the processor
ZK blind-signature receipt credential request bytes
The processor that handled the payment
Payment is still processing; client should retry
Payment failed
Payment intent not found
A receipt credential was already issued for this payment
Create a PayPal one-time payment. Once the payment is complete, call ConfirmPayPalBoost with the payment ID and token
ISO 4217 currency code, case-insensitive (e.g. "usd", "EUR")
Amount in the currency's minor unit (e.g. cents for USD), must be >= 1
Donation level.
URL to redirect the user to after PayPal approval
URL to redirect the user to if they cancel
The amount is below the minimum for the currency
The requested currency is not supported for PayPal
The requested level is not a valid one-time donation level
Retrieve product metadata for one-time donations, subscriptions, and backups
Returns configuration for donation subscriptions, backup subscriptions, and one-time donation ( "boost" and "gift") minimum and suggested amounts. Badges are referenced by ID only; resolve those IDs to full badge details via RemoteConfiguration.GetBadges.
(message has no fields)
Map of lower-cased ISO 3 currency codes to currency-specific configuration
Map of numeric donation level IDs to level-specific badge configuration
Configuration for backup subscription options
Maximum value of a one-time SEPA donation
Configuration for one-time Signal Login purchases
Service for creating donation subscriptions Configuration for subscription levels can be found in ProductConfiguration.
Returns a PayPal billing agreement approval URL and token that can be used to set up PayPal as a payment method.
a callback URL (e.g. an in-client URL handler) for when the user approved the payment
a callback URL (e.g. an in-client URL handler) for when the user did not approve the payment
subscriberId authentication failure
New payment processor does not match existing processor associated with the subscription
Returns a client secret that can be used to set up a new payment method with the payment processor.
Only PAYMENT_METHOD_CARD, PAYMENT_METHOD_SEPA_DEBIT, and PAYMENT_METHOD_IDEAL are supported; other values will result in an INVALID_ARGUMENT error.
a libsignal DonationPermit from rpc Donations.CreateDonationPermit
subscriberId authentication failure
New payment processor does not match existing processor associated with the subscription
The donation permit was expired or already spent
Cancels any current subscription at the end of the current subscription period. Note: Apple IAP subscriptions do not support server-side cancellation, so this method should only be called after cancelling a subscription from storekit to keep server data up to date.
The associated subscription is not a type that can be cancelled by the server. Cancel client-side, and then retry.
Returns a localized bank mandate for the specified bank transfer type
Create a receipt from a valid payment invoice that can be used to obtain an entitlement This request is repeatable so long as the ReceiptCredentialRequest remains the same. Clients should use the same ReceiptCredentialRequest value until they attempt to redeem the resulting ReceiptCredentialPresentation. After this point, the ReceiptCredentialRequest MUST NOT be reused or you may not be able to redeem a valid payment invoice. Clients SHOULD retry requests at this endpoint with the same ReceiptCredentialRequest value until receiving a response. After receiving a response, clients should then compute the ReceiptCredentialPresentation and redeem it at the receipt redemption endpoint. Once the first attempt is made there, the same ReceiptCredentialRequest MUST NOT be used again to request receipt credentials. Note that you may in fact redeem TWO or more invoices for the same ReceiptCredentialRequest while retrying this operation if a later invoice gets paid while you are retrying. However, the returned receipt is always for the latest invoice, so it will have the latest expiration possible and no entitlement time will be lost. The important thing is not to reuse ReceiptCredentialRequest after you have started attempting to redeem the associated ReceiptCredentialPresentation. Then you may produce a ReceiptCredentialPresentation for a later invoice that cannot be redeemed. Clients MUST validate that the generated receipt credential's level and expiration matches their expectations.
subscriberId authentication failure
No invoice has been issued for this subscription OR invoice is in 'draft' or 'open' state
Invoice is in any state other than 'draft', 'open', or 'paid'; Charge failure details may be present
Latest paid receipt on subscription was already redeemed for a receipt credential but with a different GetReceiptCredentialRequest
Returns information about the current subscription associated with the provided subscriberId if one exists. Although it uses [Stripe's values](https://stripe.com/docs/billing/subscriptions/overview#subscription-statuses), the status field in the response is generic, with [Braintree-specific values](https://developer.paypal.com/braintree/docs/guides/recurring-billing/overview#subscription-statuses) mapped to Stripe's. Since we don't support trials or unpaid subscriptions, the associated statuses will never be returned by the API.
subscriberId authentication failure
Sets the default payment method for a subscriber.
subscriberId authentication failure
Payment processor does not match existing processor associated with the subscription
Set a token that represents an IAP subscription made with App Store/Google Play Billing. To set up an App Store subscription: 1. Create a subscriber with UpdateSubscriber (you must regularly refresh this subscriber) 2. [Create a subscription](https://developer.apple.com/documentation/storekit/in-app_purchase/) with the App Store directly via StoreKit and obtain a originalTransactionId. 3. Call this RPC with the originalTransactionId 4. Obtain a receipt via GetReceiptCredentials which can then be used to obtain the entitlement Play Billing: Set a purchaseToken that represents an IAP subscription made with Google Play Billing. To set up a subscription with Google Play Billing: 1. Create a subscriber with UpdateSubscriber (you must regularly refresh this subscriber) 2. [Create a subscription](https://developer.android.com/google/play/billing/integrate) with Google Play Billing directly and obtain a purchaseToken. Do not [acknowledge](https://developer.android.com/google/play/billing/integrate#subscriptions) the purchaseToken. 3. Call this RPC with the purchaseToken 4. Obtain a receipt via GetReceiptCredentials which can then be used to obtain the entitlement After calling this method, the payment is confirmed. Callers must durably store their subscriberId before calling this method to ensure their payment is tracked. Once a purchaseToken to is posted to a subscriberId, the same subscriberId must not be used with another payment method. A different playbilling purchaseToken can be posted to the same subscriberId, in this case the subscription associated with the old purchaseToken will be cancelled.
subscriberId authentication failure
New payment processor does not match existing processor associated with the subscription
Sets the subscription level and currency for a subscriber.
subscriberId authentication failure
New payment processor does not match existing processor associated with the subscription
The payment processor does not support this operation
The requested level was invalid
The requested currency was invalid
The card could not be charged
Cannot transition from existing level to the requested level
The idempotency key was invalid or re-used with a modified request
The payment failed; see charge failure details
Subscribers MUST periodically hit this endpoint to update the access time on the subscription record. Subscribers SHOULD attempt to make an update call approximately every 3 days. Not accessing this endpoint for an extended period of time will result in the subscription being canceled.
A libsignal DonationPermit from rpc Donations.CreateDonationPermit. Not required if the subscriber already exists.
subscriberId authentication failure
The donation permit was expired or already spent
The SEPA Direct Debit amount exceeds the allowed maximum.
Used in:
The maximum amount for a SEPA transaction
The amount is below the minimum for the currency.
Used in: , ,
The minimum amount for the currency
Used in:
NOTE: this is a string instead of a numeric type because it is intended for display purposes only
Used in:
A map of numeric backup level IDs to level-specific backup configuration
The number of days of media a free tier backup user gets
Configuration for a backup level - use to present appropriate client interfaces
Used in:
The amount of media storage in bytes that a paying subscriber may store
The play billing productID associated with this backup level
The duration, in days, for which your backed up media is retained on the server after you stop refreshing with a paid credential
Used in:
Meaningfully interpreting chargeFailure response fields requires inspecting the processor field first. For Stripe, code will be one of the [codes defined here](https://stripe.com/docs/api/charges/object#charge_object-failure_code), while message [may contain a further textual description](https://stripe.com/docs/api/charges/object#charge_object-failure_message). The outcome fields are optional, but present values will directly map to Stripe [response properties](https://stripe.com/docs/api/charges/object#charge_object-outcome-network_status) For Braintree, the outcome fields will be null. The code and message will contain one of - a processor decline code (as a string) in code, and associated text in message, as defined this [table](https://developer.paypal.com/braintree/docs/reference/general/processor-responses/authorization-responses) - `gateway` in code, with a [reason](https://developer.paypal.com/braintree/articles/control-panel/transactions/gateway-rejections) in message - `code` = "unknown", message = "unknown" IAP payment processors will never include charge failure information, and detailed order information should be retrieved from the payment processor directly
Used in: , , ,
See [Stripe failure codes](https://stripe.com/docs/api/charges/object#charge_object-failure_code) or [Braintree decline codes](https://developer.paypal.com/braintree/docs/reference/general/processor-responses/authorization-responses#decline-codes) depending on which processor was used
See [Stripe failure codes](https://stripe.com/docs/api/charges/object#charge_object-failure_code) or [Braintree decline codes](https://developer.paypal.com/braintree/docs/reference/general/processor-responses/authorization-responses#decline-codes) depending on which processor was used
See [Outcome Network Status](https://stripe.com/docs/api/charges/object#charge_object-outcome-network_status)
See [Outcome Reason](https://stripe.com/docs/api/charges/object#charge_object-outcome-reason)
See [Outcome Type](https://stripe.com/docs/api/charges/object#charge_object-outcome-type)
Used in:
Used in:
Used in:
Used in:
Used in:
a URL to open where the user may approve the payment
an opaque PayPal payment identifier to use with SetDefaultPaymentMethodRequest
Used in:
Used in:
Minimum one-time donation NOTE: this is a string instead of a numeric type because it is intended for display purposes only
Map of one-time donation level IDs to suggested amounts
Map of subscription level IDs to the amount charged
Map of backup subscription level IDs to the amount charged
Used in:
Used in:
The subscription level
If present, UNIX Epoch Timestamp in seconds, can be used to calculate next billing date.
UNIX Epoch Timestamp in seconds, when the current subscription period ends
Whether there is a currently active subscription
If true, an active subscription will not auto-renew at the end of the current period
A three-letter ISO 4217 currency code for currency used in the subscription
The amount paid for the subscription in the currency's smallest unit
The subscription's status, mapped to Stripe's statuses. trialing will never be returned
The payment provider associated with the subscription
The payment method associated with the subscription
Whether the latest charge for the subscription is in a non-terminal state
if present, contains information that may be interpreted to help the user fix a failure
Used in:
The ID of the badge awarded at this level. Resolve to full badge details via RemoteConfiguration.GetBadges.
The duration for which a badge is valid. Present only for one-time (boost, gift) badges
Configuration for one-time Signal Login purchases
Used in:
The receipt level associated with a Signal Login purchase
The play billing productID associated with a Signal Login purchase
The App Store productID associated with a Signal Login purchase
Used in: , , ,
A credit card or debit card, including those from Apple Pay and Google Pay
A SEPA debit account
An iDEAL account
A PayPal account
Used in: , , , ,
Used in: , ,
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
Used in:
The subscription is in good standing and the most recent payment was successful.
Payment failed when creating the subscription, or the subscription's start date is in the future.
Payment on the latest renewal failed but there are processor retries left, or payment wasn't attempted.
The subscription has been canceled.
The latest renewal hasn't been paid but the subscription remains in place.