Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 129 additions & 0 deletions docs/business/payment-management/attempt-fields.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
---
title: Payment Attempt Fields
sidebar_label: Attempt Fields
---

# Payment Attempt Fields

A **payment attempt** is one individual try at completing a payment through a specific [payment gateway](/business/payments/gateways). Each time a customer hits "Pay" — succeeds or fails — Ottu creates a new attempt record. One [payment transaction](/business/payment-management/transaction-fields) can have many attempts (the customer's first card declines, they retry with a different card), but at most one ever reaches a successful state.

Attempt records are where you find the gateway-level detail: which card was used, what the gateway responded, what error the customer saw, and exactly what Ottu sent over to your [webhook](/business/settings/webhooks). When a payment goes wrong, the attempt is where you investigate.

This page lists every field on a payment attempt.

:::tip Looking for the transaction-level fields?
For fields that belong to the parent [payment transaction](/glossary#term-payment-transaction) — order number, customer details, callback URLs, lifecycle state — see [Payment Transaction Fields](/business/payment-management/transaction-fields).
:::

---

## Identifiers

### reference_number

A unique identifier for this payment attempt, sent to the payment gateway as the merchant reference. One [transaction](/business/payment-management/transaction-fields#session_id) can have multiple reference numbers — one per attempt.

### transaction

Reference back to the parent [payment transaction](/business/payment-management/transaction-fields) this attempt belongs to.

---

## State & lifecycle

### state

The current status of this payment attempt — whether it is pending, successfully processed, failed, canceled, or encountered an error. Also supports the Cash on Delivery payment method.

### state_changed_at

Timestamp of the most recent state change on this attempt. Useful for measuring how long the customer spent on the gateway and for ordering attempts in support views.

### message

The human-readable error message when the attempt didn't succeed. Sourced from the gateway. Empty for successful attempts.

---

## Amounts

### amount

The amount the gateway was asked to settle for this attempt, in [`currency_code`](#currency_code). For non-editable transactions this equals the [transaction `amount`](/business/payment-management/transaction-fields#amount); for editable ones it's whatever the customer entered before submitting this attempt.

### fee

The [fee](/business/payment-management/transaction-fields#fee) the customer is paying on top of [`amount`](#amount) for this attempt, in the customer's chosen currency.

### total


### currency_code

The currency the gateway was charged in. May differ from the parent transaction's currency if the customer chose to pay in a different one — in that case [`exchange_rate`](#exchange_rate) records the conversion used.

### exchange_rate

The conversion rate Ottu used if this attempt involved a currency conversion (i.e. the customer paid in a currency other than the transaction's). 1.0 when no conversion happened. See the [Exchange Rate](/glossary#term-exchange-rate) glossary entry.

---

## Gateway interaction

### settings


### card

The card used for this payment attempt.

### gateway_response

The full response received from the payment gateway for this attempt.

---

## Webhook diagnostics

These fields tell you what Ottu delivered to your [webhook URL](/business/settings/webhooks) for this attempt — useful when you can't find a payment notification in your own system.

### disclosed_to_merchant

When true, Ottu successfully delivered a webhook for this attempt. When false, either no webhook was attempted yet, or every delivery attempt failed (see [`disclosure_url_error`](#disclosure_url_error)).

### disclosed_data

The exact payload Ottu posted to your webhook URL. Use this to confirm what was sent if your own system shows different data.

### disclosed_states

A read-only convenience field that pulls just the state values out of [`disclosed_data`](#disclosed_data) — useful when an attempt has been webhooked more than once and you want to see the state at each delivery.

### disclosure_url_error

The error reason logged when Ottu could not reach the merchant webhook URL.

---

## Internal & diagnostic fields

<details>
<summary>Internal fields (2) — expand to see one-line notes</summary>

### data

Stores useful information for internal purposes.

### request_data

Technical data of the request that triggered this attempt.

</details>

---

## What's Next?

- [Payment Transaction Fields](/business/payment-management/transaction-fields) — fields on the parent transaction
- [Transaction States](/business/payment-management/transaction-states) — how attempts roll up into the parent state
- [Webhooks](/business/settings/webhooks) — set up the URL the diagnostic fields above describe
Loading