What PayPal documents
A webhook listener must return a 2xx status and failed deliveries are retried up to 25 times over three days, so the same event can arrive late or more than once. Signature checks need the unparsed body and a webhook id that is not in the message. The Transaction Search API covers up to 31 days per request, can lag by up to three hours and covers the previous three years. A third-party source, Airbyte's PayPal connector documentation, adds that PayPal caps a transaction search at 10,000 records and refuses a window that would exceed it with a RESULTSET_TOO_LARGE error. A capture has a gross, fee and net breakdown, a refund is a separate record with its own breakdown, and PayPal lists separate event codes for refunds and fee reversals.
Failure families and where to go next
Refunds and fees that never reach the ledger, listeners that post twice, exports with gaps and month-end differences with no recorded cause are different failures. Each has a guide explaining the mechanism and a safe first investigation.
- Missing refunds and fees: the refund and fee guide and the PayPal refunds job.
- Double or missing postings: the webhook retries guide.
- Gaps in an export: the report windows guide.
- Unexplained month-end differences: the drift categories guide and the monthly drift check.
A safe test looks like this
Use a PayPal sandbox or invented records, never live transactions or refunds. Remember that simulator events cannot be verified by postback, and share only totals and counts when you ask for help.
Choose the actual outcome
A bounded job fixes one failure, a project fixes the links across several flows and proves them on a test month, and a standing service compares processor and ledger every month. None gives accounting, tax or audit advice, deals with disputes or changes live records under our control. Prices on the linked pages are untested published prices and nothing starts without written agreement.
- The first enquiry uses invented examples, not credentials, bank details or customer records.
- Real records are shared only after agreement, through a secure handoff.
Sources and limits
- PayPal: integrate webhooks Checked 2026-10-11.
- A listener must return a 2xx status; failed deliveries are retried up to 25 times over 3 days.
- Signature verification needs the original raw body (CRC32 of the unparsed body) and the webhook ID, which is not included in the headers or body.
- Simulator events do not belong to an app and cannot be verified by postback.
- PayPal: Transaction Search API Checked 2026-10-11.
- The list transactions call supports a maximum date range of 31 days, requires an end date, and can take up to three hours for executed transactions to appear.
- Page size defaults to 100 and can be up to 500, and the call covers the previous three years.
- Each transaction carries an event code, an amount and a fee amount.
- A transaction identifier is not unique in the reporting data: the response can list two records with the same identifier, one affecting the balance and one not.
- PayPal: Payments v2 capture Checked 2026-10-11.
- A capture's seller receivable breakdown gives the gross amount, the PayPal fee and the net amount received.
- PayPal: refund a captured payment Checked 2026-10-11.
- A full refund takes an empty body and a partial refund takes an amount; several partial refunds can be issued up to the captured amount.
- A refund response can carry its own payable breakdown with gross, fee, net and total refunded amounts when full representation is requested.
- PayPal: transaction event code reference Checked 2026-10-11.
- PayPal lists separate event codes for a payment refund (T1107) and for fee reversal and fee refund (T1108 and T1109).
- Airbyte: PayPal transaction connector (third-party documentation) Checked 2026-10-11.
- Airbyte's connector documentation says PayPal has a 10K record limit per request, which it lists as an API server restriction.
- It says a sync can fail with "Result set size is greater than the maximum limit" or the code RESULTSET_TOO_LARGE.