PayPal Direct

PayPal Direct is a self-serve connector: a client ID and a secret, two read scopes, and five API settings enabled on the app. It is the best dispute source in the catalog, and it is settled reporting, which shapes what you can and cannot ask of it.

What you get

Settled transactions, balances and payouts, and dispute records with their lifecycle.

Strongest for disputes. PayPal's dispute data is more complete than most, which makes this the connector to lean on for dispute rate by segment, win and loss outcomes, and the lag between a transaction and the dispute it attracts. Disputes surface 30 to 180 days later, which is why a full year of history matters here.

Weakest for attempt-level failure analysis. Transaction Search is settled reporting — it tells you what completed, not what was tried, so per-attempt decline codes are not available here.

Before you start

Your merchant account must be enabled for Direct Payments. Live use requires PayPal approval — request it before you start.

In the PayPal console, create a REST API app for Athia and note its Client ID and Secret. This is the normal path. Legacy Direct Payments accounts instead use NVP/SOAP credentials — Username, Password and Signature.

Attach exactly two scopes:

  • transactions:read
  • payouts:read

These two scopes are read-only: this credential cannot capture, refund or send money.

Enable the app API settings

The scope strings do not gate the data on their own — the app's API settings do. Enable all five on the app:

App settingWhat it gates
Accept paymentsPayments, authorizations, captures, refunds
SubscriptionsBilling plans and subscription records
InvoicingInvoice records
Customer DisputesDisputes and their lifecycle
Transaction SearchSettled transaction history and balances

Without Invoicing and Subscriptions enabled, invoice and billing-plan data arrives empty.

📘

After you enable new permissions on the app, PayPal can take up to nine hours to apply them. If verification fails immediately after you change scopes, that is the usual cause — wait and retry before re-issuing credentials.

Create a read-only role

Log into the PayPal Developer Dashboard as an admin and create a custom role — for example Athia Integration — with read-only permissions for:

  1. Transactions (search, details)
  2. Reporting (balances, transactions)
  3. Payouts (details)
  4. Subscriptions
  5. Disputes

Production and Sandbox are separate connections. Create an app and an Athia connection for each environment. Use live credentials for the production connection, or it verifies and carries nothing you recognize.

Credentials Athia asks for

FieldRequiredWhat it is / where to find it
NameYesYour label for this connection — identify the PayPal merchant account
ScheduleNoHow often Athia polls PayPal
Client IdYesFrom the app you created for Athia
Secret KeyYesThe matching secret for that app
Username / Password / SignatureLegacy onlyNVP/SOAP credentials — use these instead of Client Id and Secret Key on legacy Direct Payments accounts

Setting up the connection

  1. Create the app, enable the five API settings and confirm both scopes are attached.
  2. In Settings → Connections, choose + Add Connection and select PayPal Direct.
  3. On Configure Connector, enter a Name and pick a Schedule.
  4. On Enter Credentials, enter the Client Id and Secret Key.
  5. Choose Verify Connection.
  6. Copy the Athia Webhook Destination URL from the wizard.
  7. In the PayPal console, go to My Apps & Credentials → select your app → Webhooks → Add Webhook, paste the URL, and select PAYMENT.CAPTURE.COMPLETED, DISPUTE.CREATED and PAYOUTS.BATCH.PROCESSED. Save, then enable the webhook.

The connection then shows as ACTIVE and the first sync starts. For several PayPal merchant accounts, create an app and a connection for each.

Sync cadence

Settled reporting rewards frequent polling less than a gateway connector does, and polling faster will not produce attempt-level detail the source does not carry. Match the schedule to how often you actually read the data.

Limits and things to know

  • No per-attempt decline codes. Transaction Search reports settled activity; source decline reasons from a gateway connector instead.
  • Amounts are decimal — never divide by 100.
  • Dispute timing. Disputes appear well after the transaction, so recent-period dispute rates always look better than they will turn out to be. Compare cohorts that have had time to mature.
  • History reaches back three years. Transaction Search returns at most three years of transactions. For anything older, load files — see Integrating Athia.
  • Card data is minimized. Field-level detail on what Athia stores is in Athia Data Dictionary.
📘

PayPal amounts are decimal. PPRO amounts are minor units. Dividing by 100 in the wrong place is the most common reconciliation error across these two connectors.

Troubleshooting

What you seeLikely causeWhat to do
Transactions arrive but no payoutspayouts:read not enabledAdd the scope, then reconnect
No decline reasons anywhereExpected — settled reporting onlyUse a gateway-level connector for attempt data
Verification fails right after a scope or permission changeNew permissions not applied yetWait up to nine hours, then retry — do not re-issue credentials
Invoice or billing-plan data is emptyInvoicing or Subscriptions not enabled on the appEnable the app setting, wait for it to apply, then reconnect
No dispute or payout events arrive between pollsWebhook not registered or not enabledRe-add the Athia Webhook Destination URL under My Apps & Credentials → Webhooks and enable it
Dispute rate looks unusually lowRecent transactions have not aged into their dispute windowRead dispute rate on matured cohorts

Related


Did this page help you?