PAYIN DOCUMENTATION

Payment notifications and fulfillment

PayIn can notify a configured service when a payment record changes. A notification is an input to your order workflow. It does not turn PayIn into a ticketing, stock, membership or access-control system, and configuring a URL alone does not establish reliable automatic delivery.

Configure and protect the destination

The link-creation interface accepts a callback URL and signing secret. Use an HTTPS endpoint you control. Store the secret on your server, outside client code, public repositories, analytics and customer-facing links. Restrict access to the private management link separately; sharing a public receiving link does not authorize access to merchant history.

Test your own receiver with synthetic fixtures before relying on it in business. Tests should cover a successful notification, a bad signature, a duplicate, an event received out of order, a delayed response and a temporary server outage. These tests do not need a live transfer. Do not use real customer information in public examples or logs.

Verify the actual contract

Use the request's raw body and the signature scheme implemented by the deployed service. Do not invent a header name or reuse the historical PayIn Open webhook format merely because both products use the PayIn name. This migration deliberately keeps the historical Open reference in its own section; it is not the current hosted contract.

Before production automation, confirm the deployed event format, signature headers, signing algorithm and retry policy against the application's current documentation and a controlled receiver. Keep the raw body available for signature verification, apply the documented freshness/replay checks, and reject requests that fail verification. An event from a browser, a screenshot, a wallet signature or a return URL must not substitute for a verified payment record.

Match one payment to one business action

A public link can receive more than one payment. Preserve the service's payment identifier and your own order or registration reference. Compare the amount as USDC decimal or atomic units, with the correct six-decimal precision. Check the configured currency, receiving setup, network and final status as well as the amount.

Write fulfillment idempotency to persistent storage before executing an irreversible action. If the same event arrives twice, return the previous result rather than dispatching again. Handle out-of-order messages explicitly: a late pending event must not undo a completed payment. Do not attach one customer's payment to a different order simply because the totals match.

Recover after interruptions

A receiver that was unavailable needs a reconciliation process. Keep a record of the last processed payment/event, query the service using authorized access, and reconcile persisted records before resuming normal fulfillment. A counter display that reconnects can recover older records; those recovered records must not all be presented as new live arrivals.

If a payment response is lost or a settlement outcome is uncertain, keep it under investigation rather than returning the customer to a state that asks for another signature. A second attempt can create a duplicate payment. Provide a clear manual resolution path for your team.

Make the operational limit visible

The website's payment-confirmation observation is not a webhook-delivery SLA. Network services, browser state, your endpoint and retry behavior affect the result. A business should retain a manual check for fulfillment until it has tested the full integration with its own order system. Refunds remain separate transfers arranged with the customer; an order cancellation does not automatically reverse an on-chain payment.

For current creation fields, read the link API guide. For an independent self-hosted gateway, start with PayIn Open documentation, where the operator is responsible for deployment, address pools, keys and monitoring.