Held funds
- 3 endpoints
While the organization holds a member's funds (their space's trustedAt absent, Members and held funds), their payments are paid to the organization's wallet, and each is a line of the member's held funds (they sell no subscription meanwhile: Checkout sessions, fundsHeld). The organization's fee on them is withheld (Members and held funds § The organization fee on held funds).
List every member's held funds#
GET /members/
What the organization owes each of its members in the request's mode (the members owed something, removed ones included), the longest held first, in one page: one item per member, as their held funds total it (GET /members/:userUuid/held-funds).
- Auth
- X-API-Key: an admin key
- On-Behalf-Of
- Refused: the admin role is needed
- Idempotency-Key
- Ignored
- Success
- 200
request.sh
curl https://api.qbitflow.app/v2/members/held-funds \ -H "X-API-Key: $QBITFLOW_API_KEY"# 200: an array of MemberHeldFunds// What the organization holds for its members (their payments while untrusted), the longest// held first.const all = await client.members.listHeldFunds();for (const owed of all) { console.log(`${owed.userUuid}: ${owed.totalUsd} USD owed over ${owed.count} lines`);} const held = await client. members. getHeldFunds( memberUuid);for (const ledger of held.ledgers) { // owed: what the line counts for in a release (negative for a refund). console.log( ` ${ledger.type} ${ledger.owed} ${ledger.currency.symbol} (${ledger.owedUsd} USD)` );}console.log(`held for this member: ${held.totalUsd} USD`);# Every member you hold funds for, the longest held first.for summary in client. members. list_held_funds( ): print(summary.user_uuid, f"{summary.total_usd} USD over {summary.count} lines") held = client. members. get_held_funds( member_uuid) # one member, line by lineprint(f"owed to the seller: {held.total_usd} USD over {len(held.ledgers)} lines")marketplace/main.go
// What the organization holds for its members (their payments while untrusted).// The longest held first.all, err := client. Members. ListHeldFunds( ctx)if err != nil { log.Fatal(err)}for _, s := range all { fmt.Printf("%s: %s USD over %d lines\n", s.UserUUID, s.TotalUSD, s.Count)} held, err := client.Members.GetHeldFunds(ctx, memberUUID)if err != nil { log.Fatal(err)}fmt.Printf("owed to %s: %s USD over %d lines\n", memberUUID, held.TotalUSD, len(held.Ledgers))foreach ( $client->members->listHeldFunds( ) as $owed) { // every member you owe, the longest held first echo "{$owed->userUuid}: {$owed->totalUsd} USD over {$owed->count} lines\n";} $held = $client->members->getHeldFunds( $memberUuid);printf("Owed to %s: %s USD over %d lines\n", $memberUuid, $held->totalUsd, count($held->ledgers));Response
A page: { "items": MemberHeldFunds[], "hasMore": …, "nextCursor"?: … }. Pass nextCursor back as cursor for the next page; it is absent when hasMore is false.
userUuidstringThe member (GET /members/:userUuid; a removed member still owed too)
totalUsdstringWhat the organization owes them, in USD, a decimal string, as their held funds' totalUsd (GET /members/:userUuid/held-funds): "0" or negative when refunds cancel out the payments
countintegerTheir lines not settled: payments held, refunds of them
oldestAtstringTheir oldest line not settled: how long the organization has held funds for them
Errors
The common codes only, as any route (what each means):
- 401unauthorized
- 403forbidden
- 403policy_disabled
- 429rate_limit_exceeded
- 500internal
- 504timeout
Get a member's held funds#
GET /members/
What the organization holds for a member in the request's mode: the payments not paid out yet (the merchant share the contracts paid), the refunds sent of them (negative lines), and their total in USD.
- Auth
- X-API-Key: an admin key
- On-Behalf-Of
- Refused: the admin role is needed
- Idempotency-Key
- Ignored
- Success
- 200
request.sh
curl "https://api.qbitflow.app/v2/members/$MEMBER_UUID/held-funds" \ -H "X-API-Key: $QBITFLOW_API_KEY"# 200: a HeldFunds// What the organization holds for its members (their payments while untrusted), the longest// held first.const all = await client.members.listHeldFunds();for (const owed of all) { console.log(`${owed.userUuid}: ${owed.totalUsd} USD owed over ${owed.count} lines`);} const held = await client. members. getHeldFunds( memberUuid);for (const ledger of held.ledgers) { // owed: what the line counts for in a release (negative for a refund). console.log( ` ${ledger.type} ${ledger.owed} ${ledger.currency.symbol} (${ledger.owedUsd} USD)` );}console.log(`held for this member: ${held.totalUsd} USD`);# Every member you hold funds for, the longest held first.for summary in client. members. list_held_funds( ): print(summary.user_uuid, f"{summary.total_usd} USD over {summary.count} lines") held = client. members. get_held_funds( member_uuid) # one member, line by lineprint(f"owed to the seller: {held.total_usd} USD over {len(held.ledgers)} lines")marketplace/main.go
// What the organization holds for its members (their payments while untrusted).// The longest held first.all, err := client. Members. ListHeldFunds( ctx)if err != nil { log.Fatal(err)}for _, s := range all { fmt.Printf("%s: %s USD over %d lines\n", s.UserUUID, s.TotalUSD, s.Count)} held, err := client.Members.GetHeldFunds(ctx, memberUUID)if err != nil { log.Fatal(err)}fmt.Printf("owed to %s: %s USD over %d lines\n", memberUUID, held.TotalUSD, len(held.Ledgers))foreach ( $client->members->listHeldFunds( ) as $owed) { // every member you owe, the longest held first echo "{$owed->userUuid}: {$owed->totalUsd} USD over {$owed->count} lines\n";} $held = $client->members->getHeldFunds( $memberUuid);printf("Owed to %s: %s USD over %d lines\n", $memberUuid, $held->totalUsd, count($held->ledgers));Path parameters
userUuidstringRequiredThe member (GET /members/:userUuid; a member removed from this mode is still found: what was held when they left is still owed)
Response
A HeldFunds.
ledgersarray of LedgerEntryThe lines not settled yet, oldest first: the payments held (positive), and the refunds sent of them (negative, type refund, each naming the payment it refunds). [] when nothing is held
11 fields of each
LedgerEntrytxUuidstringThe line's transaction: the payment (pay@…) or the refund (refund@…)
typestringpayment or refund
One of:
paymentA payment made to the member while the organization held their fundsrefundA refund the organization sent of one of them
descriptionstringWhat the line is, in words: "Payment pay@…" or "Refund of payment pay@…"
refundedTxUuidstringOptionalA refund line: the payment it refunds (its own line, in these held funds or released with it). Absent on the other lines
amountUsdstringA payment: what the customer paid, in USD, a decimal string. A refund: what it sent back to the customer, in USD (positive: owedUsd is its negative)
settlementSettlementOptionalA payment: its fees and split (the member was owed settlement.split.merchant when it was held; the organization's fee withheld is settlement.organizationFee, its rate, and settlement.split.organization). Absent on a refund line
5 fields of
SettlementfeePercentnumberQBitFlow's fee on this payment, in bps (1 % = 100 bps), deducted from the amount paid. Written as feePercent, a percent string
organizationFeeOrganizationFeeOptionalThe organization's fee on its member's payment (a marketplace's commission), paid to the organization's wallet. It is taken from what remains after QBitFlow's fee (contracts SPEC §4.1): organization = (amount - QBitFlow's fee) × its rate, and the member receives the rest. While the organization holds the member's funds, it is withheld from what the organization owes them instead of paid on-chain. Absent: none
2 fields of
OrganizationFeeaddressstringOptionalThe organization's wallet that receives the fee (only for the merchant)
Only for the resource's owner
feePercentnumberThe organization's fee, in bps, taken from what remains after the platform fee. Written as feePercent, a percent string
referralFeeReferralFeeOptionalThe referrer's share of QBitFlow's fee. Absent: none
2 fields of
ReferralFeeaddressstringOptionalThe referrer's wallet that receives the fee (only for the merchant)
Only for the resource's owner
feePercentnumberThe referrer's share of the platform fee, in bps (2000 = 20 % of it). Written as feePercent, a percent string
splitSplitOptionalHow the contracts split what the payer paid. For a payment the organization held for its member, the organization's fee was withheld from the member's share (not paid on-chain): the split is the one a direct payment would have had. Absent on records made before the split was recorded
5 fields of
SplitplatformTokenAmountQBitFlow's fee (the referrer's share not included)
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
organizationTokenAmountOptionalThe organization's fee; absent without one
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
referralTokenAmountOptionalThe referrer's share of QBitFlow's fee; absent without one
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
merchantTokenAmountWhat the merchant received (the member, for a member's payment), net of every fee
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
networkFeeTokenAmountOptionalNetworkFee is the network fee the payer paid on top of the amount, in the payment's currency: the gas refund the contracts took in the token (their GasRefundProcessed event), or, for a payment in a chain's native coin, the fee of the transaction the payer's wallet paid (its gas and, on Base, its L1 data fee), bounded by what QBitFlow prepared. Not the transaction's own cost to its sender (transaction.fee). Absent on records made before it was recorded ("0" once recorded as none)
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
transactionSettlementTransactionOptionalThe transaction that paid it. Absent before its confirmation
6 fields of
SettlementTransactionblockNumberstringThe block (Ethereum, Base) or slot (Solana) it landed in, a string of digits
blockTimestringOptionalWhen its block was produced (UTC); when it was recorded if the chain's node didn't give it. Absent only on records made before it was recorded
gasUsedintegerOptionalThe gas it consumed (Ethereum, Base). Absent on Solana
feeTokenAmountWhat the transaction cost its sender, in the chain's native coin (ETH, SOL; its currency is the payment currency's chain): its gas and, on Base, its L1 data fee. amountUsd at nativePriceUsd
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
l1FeeTokenAmountOptionalThe part of fee that paid Base's L1 data fee, in the native coin. Absent off Base, and on transactions recorded before it was
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
nativePriceUsdstringOptionalNativePriceUSD is the USD price of the chain's native coin when the transaction was recorded (what its fee cost in USD). Absent when the price wasn't available then
currencyIdintegerThe currency paid (and refunded), written as the currency object under currency (GET /currencies/:id)
owedstringWhat the line counts for in a release, in the currency's units, exact (owedMinUnits / 10^decimals), a decimal string: a payment's merchant share (settlement.split.merchant), or minus what a refund sent back (negative: everything the customer got back, the organization's, QBitFlow's and the network fees included). In heldFunds.released: what it counted for in that release
owedMinUnitsstringThe same in the currency's smallest unit, a string of digits (negative for a refund)
owedUsdstringThe same in USD, at the payment's time, a decimal string (negative for a refund)
createdAtstringWhen the line was recorded: the payment's confirmation, or the refund's
totalUsdstringWhat the organization owes the member, in USD, a decimal string: the sum of the lines' owedUsd, payments (each one's settlement.split.merchant.amountUsd: the member's net, the organization's fee withheld) less refunds (everything each sent back to the customer). A release pays it, converted at the release's price. "0" or negative when refunds cancel out the payments: nothing to send, the held funds are closed instead (POST /members/:userUuid/held-funds/close), the organization absorbing the difference
Errors
The common codes only, as any route (what each means):
- 400validation_failed
- 401unauthorized
- 403forbidden
- 403policy_disabled
- 404not_found
- 429rate_limit_exceeded
- 500internal
- 504timeout
Get your held funds#
GET /held-funds
What the organization holds for the request's space, in its mode: the payments held for the member, and the refunds sent of them (negative lines). No lines and a total of "0" when it pays them directly, has released everything, or for the organization's own space. Owners and admins read a member's with GET /members/:userUuid/held-funds.
- Auth
- X-API-Key: any key
- On-Behalf-Of
- Honored: acts in the member's space
- Idempotency-Key
- Ignored
- Success
- 200
request.sh
curl https://api.qbitflow.app/v2/held-funds \ -H "X-API-Key: $QBITFLOW_API_KEY"# 200: a HeldFunds// With a member's key, or a client.onBehalfOf(memberUuid) client. Empty for the organization.const held = await client. members. getOwnHeldFunds( );console.log(`held for me: ${held.totalUsd} USD over ${held.ledgers.length} lines`);# With a member's key, or a client acting on behalf of the member.held = client. members. get_own_held_funds( )print(f"held for me: {held.total_usd} USD over {len(held.ledgers)} lines")marketplace/main.go
// As the member: with their own key, or the organization's acting for them.own, err := client. OnBehalfOf( memberUUID). Members. GetOwnHeldFunds( ctx)if err != nil { log.Fatal(err)}fmt.Printf("held for me: %s USD over %d lines\n", own.TotalUSD, len(own.Ledgers))// With a member's key (or a client from $client->onBehalfOf($memberUuid)):$held = $client->members->getOwnHeldFunds( );printf("Held for me: %s USD over %d lines\n", $held->totalUsd, count($held->ledgers));Response
A HeldFunds.
ledgersarray of LedgerEntryThe lines not settled yet, oldest first: the payments held (positive), and the refunds sent of them (negative, type refund, each naming the payment it refunds). [] when nothing is held
11 fields of each
LedgerEntrytxUuidstringThe line's transaction: the payment (pay@…) or the refund (refund@…)
typestringpayment or refund
One of:
paymentA payment made to the member while the organization held their fundsrefundA refund the organization sent of one of them
descriptionstringWhat the line is, in words: "Payment pay@…" or "Refund of payment pay@…"
refundedTxUuidstringOptionalA refund line: the payment it refunds (its own line, in these held funds or released with it). Absent on the other lines
amountUsdstringA payment: what the customer paid, in USD, a decimal string. A refund: what it sent back to the customer, in USD (positive: owedUsd is its negative)
settlementSettlementOptionalA payment: its fees and split (the member was owed settlement.split.merchant when it was held; the organization's fee withheld is settlement.organizationFee, its rate, and settlement.split.organization). Absent on a refund line
5 fields of
SettlementfeePercentnumberQBitFlow's fee on this payment, in bps (1 % = 100 bps), deducted from the amount paid. Written as feePercent, a percent string
organizationFeeOrganizationFeeOptionalThe organization's fee on its member's payment (a marketplace's commission), paid to the organization's wallet. It is taken from what remains after QBitFlow's fee (contracts SPEC §4.1): organization = (amount - QBitFlow's fee) × its rate, and the member receives the rest. While the organization holds the member's funds, it is withheld from what the organization owes them instead of paid on-chain. Absent: none
2 fields of
OrganizationFeeaddressstringOptionalThe organization's wallet that receives the fee (only for the merchant)
Only for the resource's owner
feePercentnumberThe organization's fee, in bps, taken from what remains after the platform fee. Written as feePercent, a percent string
referralFeeReferralFeeOptionalThe referrer's share of QBitFlow's fee. Absent: none
2 fields of
ReferralFeeaddressstringOptionalThe referrer's wallet that receives the fee (only for the merchant)
Only for the resource's owner
feePercentnumberThe referrer's share of the platform fee, in bps (2000 = 20 % of it). Written as feePercent, a percent string
splitSplitOptionalHow the contracts split what the payer paid. For a payment the organization held for its member, the organization's fee was withheld from the member's share (not paid on-chain): the split is the one a direct payment would have had. Absent on records made before the split was recorded
5 fields of
SplitplatformTokenAmountQBitFlow's fee (the referrer's share not included)
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
organizationTokenAmountOptionalThe organization's fee; absent without one
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
referralTokenAmountOptionalThe referrer's share of QBitFlow's fee; absent without one
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
merchantTokenAmountWhat the merchant received (the member, for a member's payment), net of every fee
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
networkFeeTokenAmountOptionalNetworkFee is the network fee the payer paid on top of the amount, in the payment's currency: the gas refund the contracts took in the token (their GasRefundProcessed event), or, for a payment in a chain's native coin, the fee of the transaction the payer's wallet paid (its gas and, on Base, its L1 data fee), bounded by what QBitFlow prepared. Not the transaction's own cost to its sender (transaction.fee). Absent on records made before it was recorded ("0" once recorded as none)
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
transactionSettlementTransactionOptionalThe transaction that paid it. Absent before its confirmation
6 fields of
SettlementTransactionblockNumberstringThe block (Ethereum, Base) or slot (Solana) it landed in, a string of digits
blockTimestringOptionalWhen its block was produced (UTC); when it was recorded if the chain's node didn't give it. Absent only on records made before it was recorded
gasUsedintegerOptionalThe gas it consumed (Ethereum, Base). Absent on Solana
feeTokenAmountWhat the transaction cost its sender, in the chain's native coin (ETH, SOL; its currency is the payment currency's chain): its gas and, on Base, its L1 data fee. amountUsd at nativePriceUsd
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
l1FeeTokenAmountOptionalThe part of fee that paid Base's L1 data fee, in the native coin. Absent off Base, and on transactions recorded before it was
3 fields of
TokenAmountamountstringIn the token's units, exact: amountMinUnits / 10^decimals, a decimal string ("12.5")
amountMinUnitsstringThe on-chain integer, in the token's smallest unit, a string of digits ("12500000")
amountUsdstringOptionalIts value in USD, a decimal string; absent when no price was known
nativePriceUsdstringOptionalNativePriceUSD is the USD price of the chain's native coin when the transaction was recorded (what its fee cost in USD). Absent when the price wasn't available then
currencyIdintegerThe currency paid (and refunded), written as the currency object under currency (GET /currencies/:id)
owedstringWhat the line counts for in a release, in the currency's units, exact (owedMinUnits / 10^decimals), a decimal string: a payment's merchant share (settlement.split.merchant), or minus what a refund sent back (negative: everything the customer got back, the organization's, QBitFlow's and the network fees included). In heldFunds.released: what it counted for in that release
owedMinUnitsstringThe same in the currency's smallest unit, a string of digits (negative for a refund)
owedUsdstringThe same in USD, at the payment's time, a decimal string (negative for a refund)
createdAtstringWhen the line was recorded: the payment's confirmation, or the refund's
totalUsdstringWhat the organization owes the member, in USD, a decimal string: the sum of the lines' owedUsd, payments (each one's settlement.split.merchant.amountUsd: the member's net, the organization's fee withheld) less refunds (everything each sent back to the customer). A release pays it, converted at the release's price. "0" or negative when refunds cancel out the payments: nothing to send, the held funds are closed instead (POST /members/:userUuid/held-funds/close), the organization absorbing the difference
Errors
The common codes only, as any route (what each means):
- 401unauthorized
- 403forbidden
- 403policy_disabled
- 404not_found
- 429rate_limit_exceeded
- 500internal
- 504timeout
Edge cases
The contract's rules for these routes: Reading held funds · Refunds of held payments.
Read all 2
Reading held funds
GET /held-funds(auth, QBitFlow): the request's space's own held funds, in its mode, from a session or an API key (a member's key, or an organization key withOn-Behalf-Of). The organization's own space holds nothing for itself:ledgers: [],totalUsd: "0".GET /members/:userUuid/held-funds(owners and admins of the organization's space, its keys too): a member's, in the request's mode; a removed member's too (what was held when they left is still owed). The member themselves, or the team acting as one →403; another organization's user →404; auserUuidthat isn't a uuid →400onuserUuid.HeldFunds:ledgers, the lines not settled, oldest first ([]when none), andtotalUsd, what the organization owes the member in USD: the sum of the lines'owedUsd, exactly (a decimal string,"0"or negative when refunds cancel out the payments).- A line (
LedgerEntry):typepaymentorrefund;txUuid(pay@…,refund@…);descriptionin words;currency(the catalog's object);owed/owedMinUnits/owedUsd, what it counts for in a release (in the token's units, its on-chain integer, and USD at the payment's time): a payment's merchant share as the contracts paid it (settlement.split.merchant: the organization's fee withheld), never recomputed from the fee rates; a refund's is negative (everything the refund sent back to the customer, the fees and the network fee included).amountUsdis what the customer paid (a refund line: what it sent back, positive). A payment line has itssettlement; a refund line hasrefundedTxUuid(the payment it refunds) and nosettlement. - A payment recorded without its on-chain split makes the read fail (
500): what it owes is unknown, never counted as 0. - Test and live never mix: a line has the mode of its payment.
GET /members/held-funds(owners and admins of the organization's space, its keys too; a member, or the team acting as one →403): the members the organization owes something, in the request's mode (removed members still owed included), the longest held first, in one page (a bounded list, pagination:hasMore: false, nolimitorcursor):{ userUuid, totalUsd, count, oldestAt }, eachtotalUsdas that member'sGET /members/:userUuid/held-fundstotals it,countits lines,oldestAtits oldest line.
Refunds of held payments
- A held payment is refunded from the organization's wallet, which decides it (Refunds); once the refund is confirmed it is its own negative line of the member's held funds, linked to the payment's (
refundedTxUuid): the member bears the refund, the fees and the network fee it sent back included. The payment's own line is unchanged. A refund confirmed after its payment was released (or closed) records nothing: nothing carries over. - Once released, a held payment can't be refunded anymore (
409held_funds_released). A refund and a release of the same member are never in flight together (refund_in_flight,held_funds_release_in_flight,held_funds_changedabove), however long either is being confirmed.