What you need
| Field | What it does |
|---|---|
| Client ID | Identifies your PayPal app on API calls. Paired with the secret. |
| Client secret | The secret half of API auth. With the Client ID, it creates the order. Secret. |
| Webhook ID | Identifies the webhook PayPal signs, so we can verify each delivery. |
| Success URL / Cancel URL | Where the buyer lands after paying or backing out. |
Why we ask for each field
Client ID
Identifies your PayPal app on API calls. It works only when paired with the Client secret.
Client secret
The private half of API auth. With the Client ID, it lets us create the order, so the payment runs through your account.
Webhook ID
How we confirm a webhook is genuinely from PayPal: PayPal identifies each webhook by an ID, and we use it to ask PayPal directly whether a given message is authentic. That stops anyone from forging a "paid" event.
Success and Cancel URL
Plain settings: where the buyer lands after paying or backing out. Not secret.
Set up
- Create a free developer account (no payment)
PayPal’s developer site gives you sandbox test accounts at no cost, including a fake business account and a fake buyer.
- Sign in at developer.paypal.com.
- Use the Sandbox / Live toggle to switch environments. Set up sandbox first, then repeat in live.
- Create an app and copy its credentials
Go to Apps & Credentials, open or create an app, and copy the Client ID and Client secret. The sandbox app and live app each have their own pair.
PayPal → Apps & Credentials - Add the webhook
- In the same app, add a webhook.
- Set the webhook URL to your project webhook address (below).
- Subscribe to events. One-time payments: CHECKOUT.ORDER.APPROVED, PAYMENT.CAPTURE.COMPLETED, PAYMENT.CAPTURE.DENIED, PAYMENT.CAPTURE.DECLINED, PAYMENT.CAPTURE.REFUNDED, PAYMENT.CAPTURE.REVERSED, CUSTOMER.DISPUTE.CREATED. Subscriptions: BILLING.SUBSCRIPTION.ACTIVATED, BILLING.SUBSCRIPTION.UPDATED, BILLING.SUBSCRIPTION.CANCELLED, BILLING.SUBSCRIPTION.PAYMENT.FAILED, PAYMENT.SALE.COMPLETED. Extra events are harmless.
- Copy the Webhook ID PayPal assigns. Register a separate webhook in sandbox and in live.
https://<your Coin Moebius host>/webhook/paypal/<your project id>PayPal → your app → Webhooks - Test with a sandbox buyer
Sign in at www.sandbox.paypal.com with the sandbox buyer account from your developer dashboard and pay through a test checkout. No real money moves.
- Connect in the dashboard
Add provider → PayPal. Enter Success URL, Cancel URL, and the Live group (Client ID, Client secret, Webhook ID). Add the optional Sandbox group to test. The Sandbox group is all-or-nothing: all three fields, or none. Live and sandbox are checked separately.
After you connect
Run one test payment before going live:
- Create a product and set its Environment to Testing. That runs the product on your sandbox credentials, so you can place a full order without moving money. (If you skipped the sandbox set, a Testing product falls back to live, so add it first.)
- Place the buy button on a page (a local HTML file works) pointed at your project.
- Complete checkout by paying with your sandbox buyer account.
- Open the Transactions tab. A new row appears, tagged Testing. When its status reaches succeeded, your credentials and webhook are both working end to end.
Switch the product Environment to Live when you are ready for real payments.
Troubleshooting
Start with Verify. In the dashboard, click Verify (or Verify test credentials for sandbox) to check your client credentials.
Verify fails.
Re-copy the Client ID and Client secret. The sandbox app and live app have different pairs, so do not mix them.
Payment completes but the order stays pending.
The Webhook ID must come from the same app and environment as your client credentials. Live credentials need the live webhook ID. Confirm the webhook URL matches.
Confirm it end to end.
PayPal Developer Dashboard → Webhooks Simulator: send a sample event to your webhook URL, then watch the order update.
Good to know
Rotating secrets. Generate a new client secret anytime, then paste it in. Secret fields stay blank on edit.
Questions? [email protected]