{"result":{"depiction_url":null,"edges":{"observes":{"objects":[{"created":"2026-10-30T12:32:34Z","object_id":{"id":1311,"is_a":["text","documentation","reference","notification"],"name":"doc_notification_export_resource_visible","title":"observe_export_resource_visible\/2","uri":"https:\/\/zotonic.com\/id\/1311"},"seq":1},{"created":"2026-10-30T12:32:34Z","object_id":{"id":1466,"is_a":["text","documentation","reference","notification"],"name":"doc_notification_admin_menu","title":"observe_admin_menu\/3","uri":"https:\/\/zotonic.com\/id\/1466"},"seq":2},{"created":"2026-10-30T12:32:34Z","object_id":{"id":1782,"is_a":["text","documentation","reference","notification"],"name":"doc_notification_export_resource_data","title":"observe_export_resource_data\/2","uri":"https:\/\/zotonic.com\/id\/1782"},"seq":3},{"created":"2026-10-30T12:32:34Z","object_id":{"id":1783,"is_a":["text","documentation","reference","notification"],"name":"doc_notification_export_resource_encode","title":"observe_export_resource_encode\/2","uri":"https:\/\/zotonic.com\/id\/1783"},"seq":4},{"created":"2026-10-30T12:32:34Z","object_id":{"id":1784,"is_a":["text","documentation","reference","notification"],"name":"doc_notification_export_resource_filename","title":"observe_export_resource_filename\/2","uri":"https:\/\/zotonic.com\/id\/1784"},"seq":5},{"created":"2026-10-30T12:32:34Z","object_id":{"id":1786,"is_a":["text","documentation","reference","notification"],"name":"doc_notification_export_resource_header","title":"observe_export_resource_header\/2","uri":"https:\/\/zotonic.com\/id\/1786"},"seq":6},{"created":"2026-10-30T12:32:34Z","object_id":{"id":1982,"is_a":["text","documentation","reference","notification"],"name":"doc_notification_search_query","title":"observe_search_query\/2","uri":"https:\/\/zotonic.com\/id\/1982"},"seq":7}],"predicate":{"id":2550,"is_a":["meta","predicate"],"name":"observes","title":{"_type":"trans","tr":{"en":"Observes"}},"uri":"https:\/\/zotonic.com\/id\/observes"}},"subject":{"objects":[{"created":"2026-10-30T12:32:34Z","object_id":{"id":2555,"is_a":["categorization","keyword","keyword_information_type"],"name":"zotonic_topic_reference","title":"Reference","uri":"https:\/\/zotonic.com\/id\/2555"},"seq":1},{"created":"2026-10-30T12:32:34Z","object_id":{"id":2562,"is_a":["categorization","keyword","keyword_audience"],"name":"zotonic_topic_site_administrator","title":"Site administrator","uri":"https:\/\/zotonic.com\/id\/2562"},"seq":2},{"created":"2026-10-30T12:32:34Z","object_id":{"id":2564,"is_a":["categorization","keyword","keyword_audience"],"name":"zotonic_topic_backend_developer","title":"Backend developer","uri":"https:\/\/zotonic.com\/id\/2564"},"seq":3},{"created":"2026-10-30T12:32:34Z","object_id":{"id":2599,"is_a":["categorization","keyword","keyword_domain"],"name":"zotonic_topic_api_and_integration","title":"API and integration","uri":"https:\/\/zotonic.com\/id\/2599"},"seq":4},{"created":"2026-10-30T12:32:34Z","object_id":{"id":2603,"is_a":["categorization","keyword","keyword_domain"],"name":"zotonic_topic_configuration","title":"Configuration","uri":"https:\/\/zotonic.com\/id\/2603"},"seq":5},{"created":"2026-10-30T12:32:34Z","object_id":{"id":2635,"is_a":["categorization","keyword","keyword_architecture"],"name":"zotonic_topic_module","title":"Module","uri":"https:\/\/zotonic.com\/id\/2635"},"seq":6},{"created":"2026-10-30T12:32:34Z","object_id":{"id":3121,"is_a":["categorization","keyword","keyword_domain"],"name":"zotonic_topic_payments","title":"Payments","uri":"https:\/\/zotonic.com\/id\/3121"},"seq":7}],"predicate":{"id":308,"is_a":["meta","predicate"],"name":"subject","title":{"_type":"trans","tr":{"en":"Keyword"}},"uri":"http:\/\/purl.org\/dc\/elements\/1.1\/subject"}}},"id":3122,"is_a":["text","documentation","reference","module"],"links":[{"rel":"self","target":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/3122"},{"rel":"hub","target":"https:\/\/zotonic.com\/.zotonic\/websub"}],"medium":null,"medium_url":null,"name":"doc_external_12_mod_payment","page_url":{"en":"https:\/\/zotonic.com\/docs\/3122\/mod_payment","x-default":"https:\/\/zotonic.com\/docs\/3122\/mod_payment"},"preview_url":null,"resource":{"version":29,"pivot_location_lat":null,"title":"mod_payment","is_authoritative":true,"body":"<p>Manage payment requests, local payment records, status notifications and PSP adapters.<\/p>\n<p>Enable this module and at least one payment provider module. Configure the site under\n<strong>System → Payment configuration<\/strong>, which requires <code>use.mod_admin_config<\/code>. Payment\nadministration and exports use <code>use.mod_payment<\/code>.<\/p>\n<h2>Integration<\/h2>\n<p>Include <code>zotonic_mod_payment\/include\/payment.hrl<\/code> and send a <code>#payment_request{}<\/code>\nwith <code>z_notifier:first\/2<\/code>. Set <code>preferred_psp_module<\/code> to select a provider explicitly.\nA successful request returns <code>#payment_request_redirect{}<\/code> with the checkout URL.\nObserve <code>#payment_status{}<\/code> to react to status changes. Provider adapters implement\n<code>#payment_psp_request{}<\/code> and status synchronization notifications.<\/p>\n<p>Verified provider updates enter through <code>receive_payment\/3<\/code>. Shared logic validates\namounts and currencies, deduplicates PSP identities, records updates and emits\nnotifications after the receive transaction commits. Repeated updates must not\nreopen finalized payments.<\/p>\n<h2>Site configuration<\/h2>\n<ul><li><code>description<\/code>, <code>currency<\/code> and <code>amount<\/code>: defaults for new payment requests. Amounts\nuse major currency units; the optional configured amount is a whole number.<\/li><li><code>email_paid<\/code>: recipients of paid-payment notifications.<\/li><li><code>delete_after_days<\/code>: retention based on modification time; unset disables deletion,\nand configured retention must be at least two days.<\/li><li><code>accept_unknown_payments<\/code>: allow verified incoming payments not initiated here.\nDefaults to false.<\/li><li><code>disable_unknown_payment_polling<\/code>: disable discovery while retaining webhook\nimports. Defaults to false.<\/li><\/ul>\n<p>With unknown payments enabled, supported providers are polled every four hours.\nDiscovery starts with a recent window, not a complete historical backfill. Payments\ncreated before the retention cutoff are not imported by polling. Mollie, Stripe\nand PayPal implement discovery; PayPal additionally requires its reporting option.\nBuckaroo and Sovergn do not discover unknown payments by polling.<\/p>","slug":"mod_payment","doc_module_config":[{"default":"&lt;&lt;&gt;&gt;","description":"Default description for new payment requests.","has_default":true,"key":"description","module":"mod_payment","type":"binary"},{"default":"&lt;&lt;&quot;EUR&quot;&gt;&gt;","description":"Three-letter currency code for new payment requests.","has_default":true,"key":"currency","module":"mod_payment","type":"binary"},{"default":"&lt;&lt;&gt;&gt;","description":"Optional default payment amount in major currency units (whole numbers).","has_default":true,"key":"amount","module":"mod_payment","type":"integer"},{"default":"&lt;&lt;&gt;&gt;","description":"Email addresses receiving a notification when a payment is paid.","has_default":true,"key":"email_paid","module":"mod_payment","type":"binary"},{"default":"&lt;&lt;&gt;&gt;","description":"Delete payments not modified for this many days. Leave empty to retain payments; minimum 2 days.","has_default":true,"key":"delete_after_days","module":"mod_payment","type":"integer"},{"default":"false","description":"Import payments received through verified PSP webhooks or polling that were not initiated here.","has_default":true,"key":"accept_unknown_payments","module":"mod_payment","type":"boolean"},{"default":"false","description":"Disable four-hour discovery polling; verified webhooks can still import unknown payments.","has_default":true,"key":"disable_unknown_payment_polling","module":"mod_payment","type":"boolean"}],"is_protected":false,"visible_for":0,"tz":"UTC","language":["en"],"doc_source_hash":"b932f50c3f4040cc417b529b39c00bfa7e55ce1fbfd0bba1393ad800065e218d","doc_module_observers":[{"name":"admin_menu","page_name":"doc_notification_admin_menu"},{"name":"export_resource_data","page_name":"doc_notification_export_resource_data"},{"name":"export_resource_encode","page_name":"doc_notification_export_resource_encode"},{"name":"export_resource_filename","page_name":"doc_notification_export_resource_filename"},{"name":"export_resource_header","page_name":"doc_notification_export_resource_header"},{"name":"export_resource_visible","page_name":"doc_notification_export_resource_visible"},{"name":"payment_request","page_name":"doc_notification_payment_request"},{"name":"search_query","page_name":"doc_notification_search_query"},{"name":"tick_24h","page_name":"doc_notification_tick_24h"},{"name":"tick_4h","page_name":"doc_notification_tick_4h"}],"is_featured":false,"content_group_id":{"id":2551,"is_a":["meta","content_group"],"name":"content_group_imported_docs","title":"Imported documentation","uri":"https:\/\/zotonic.com\/id\/content_group_imported_docs"},"external_module_id":{"id":12,"is_a":[],"name":null,"title":null,"uri":"https:\/\/zotonic.com\/id\/12"},"git_url":"https:\/\/github.com\/zotonic\/zotonic_mod_payment","category_id":{"id":320,"is_a":["meta","category"],"name":"module","title":"Modules","uri":"https:\/\/test.zotonic.com\/id\/320"},"doc_source_path":".\/src\/mod_payment.erl","publication_start":"2026-10-30T12:32:34Z","github_url":"https:\/\/github.com\/zotonic\/zotonic_mod_payment","pivot_location_lng":null,"doc_source_kind":"external","name":"doc_external_12_mod_payment","is_unfindable":false,"is_published":true,"pivot_geocode":null,"external_module_title":"Payments","created":"2026-10-30T12:32:34Z","uri":null,"doc_status":"current","is_dependent":false,"is_external_module":true,"publication_end":"9999-06-01T00:00:00Z","modifier_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"privacy":0,"doc_source_commit":"16f7d181e960c2c5d9c468bb181f02f02e1ea02b","creator_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"modified":"2026-10-30T12:32:35Z","title_slug":"mod_payment"},"uri":"https:\/\/zotonic.com\/id\/3122","uri_template":"https:\/\/zotonic.com\/id\/:id","websub":{"hub":"https:\/\/zotonic.com\/.zotonic\/websub","topic":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/3122"}},"status":"ok"}