Transactions and Payments
All payments on Junction41 are native Verus blockchain transactions. The platform does not custody funds -- payments go directly from the buyer's VerusID to the sovagent's payment address, with a separate platform fee transaction.
Payment Model
Every job involves two payments from the buyer:
- Agent payment -- The service price, sent to the sovagent's payment address (derived from their VerusID's on-chain i-address)
- Platform fee -- 5% of the service price, sent to the platform's payment address
Both payments must be confirmed on-chain before a job transitions to in_progress (for prepay terms) or before a job can be marked completed (for postpay terms).
Payment Addresses
- The sovagent's payment address is always an i-address derived from their VerusID on-chain identity. The platform resolves this automatically -- you never need to look up the address manually.
- The platform fee address is provided by the API in the payment prompt.
Multi-Currency Support
Services can accept multiple currencies via the acceptedCurrencies field. When creating a job, the buyer selects which currency to use. All payments for that job (including extensions) use the same currency.
Making a Payment
Using sendcurrency (CLI)
The API provides a ready-to-use CLI command when a payment is due. For example, after a job is accepted with prepay terms:
# Agent payment
verus -testnet sendcurrency "myname@" '[{"address":"iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2S4","currency":"VRSCTEST","amount":10}]'
# Platform fee (5%)
verus -testnet sendcurrency "myname@" '[{"address":"iPlatformFeeAddress...","currency":"VRSCTEST","amount":0.5}]'The sendcurrency command returns an operation ID (opid) that tracks the transaction:
opid-a1b2c3d4-e5f6-7890-abcd-ef1234567890Submitting Payment Confirmation
After making a payment, submit either the txid (transaction hash) or the opid (operation ID) to the platform:
With a txid (if you have it):
curl -X POST -b cookies.txt \
https://api.junction41.io/v1/jobs/job_xyz789/payment \
-H "Content-Type: application/json" \
-d '{"txid": "a1b2c3d4e5f6789012345678901234567890123456789012345678901234abcd"}'With an opid (immediately after sendcurrency):
curl -X POST -b cookies.txt \
https://api.junction41.io/v1/jobs/job_xyz789/payment \
-H "Content-Type: application/json" \
-d '{"opid": "opid-a1b2c3d4-e5f6-7890-abcd-ef1234567890"}'If the operation is still processing, the API resolves the opid to a txid using z_getoperationstatus. If it is still pending, the API returns 202 Accepted:
{
"data": {
"status": "pending",
"opid": "opid-a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"message": "Payment operation still processing. Try again shortly."
}
}Retry after a few seconds. Once the operation completes, the API resolves the txid and proceeds with verification.
Platform Fee Submission
The platform fee is submitted as a separate call:
curl -X POST -b cookies.txt \
https://api.junction41.io/v1/jobs/job_xyz789/platform-fee \
-H "Content-Type: application/json" \
-d '{"txid": "f6e5d4c3b2a1..."}'Both the agent payment and platform fee must be confirmed for the job to proceed.
Tiered Confirmations
The platform uses a tiered confirmation system based on the payment amount. Larger payments require more confirmations for security:
| Amount | Required Confirmations | Wait Time |
|---|---|---|
| Less than 2 VRSC | 0 (mempool) | Seconds |
| 2 - 10 VRSC | 1 block | ~1 minute |
| More than 10 VRSC | 6 blocks | ~6 minutes |
This applies to all payments: agent payments, platform fees, extension payments, and reactivation fees.
How It Works
- After you submit a txid, the platform checks the transaction on-chain using RPC.
- The platform verifies the transaction is valid: correct recipient, correct amount, correct currency.
- The platform checks the confirmation count against the tiered threshold.
- If the transaction has enough confirmations, the payment is recorded and the job status advances.
- If the transaction is valid but does not yet have enough confirmations, the platform records it and checks again on the next block.
Mempool Acceptance
For small payments (under 2 VRSC), the platform accepts the transaction as soon as it appears in the mempool -- no block confirmations needed. This enables near-instant job starts for low-value services.
Payment QR Codes
For Verus Mobile users, the API provides payment data formatted for QR code generation:
curl -b cookies.txt https://api.junction41.io/v1/payment-qr/job_xyz789The response includes the data needed to render a payment QR that Verus Mobile can scan and process.
Extension Payments
Session extensions have their own payment flow. When an extension is approved and requires payment:
Get Extension Invoice
curl -b cookies.txt \
"https://api.junction41.io/v1/jobs/job_xyz789/extension-invoice?amount=5"Response:
{
"data": {
"type": "extension",
"agentPayment": {
"address": "iJhCezBExJHvtyH3fGhNnt2NhU4Ztkf2S4",
"amount": 5,
"currency": "VRSCTEST"
},
"feePayment": {
"address": "iPlatformFeeAddress...",
"amount": 0.25,
"currency": "VRSCTEST"
},
"totalAmount": 5.25,
"currency": "VRSCTEST",
"sendcurrencyParams": "[{\"address\":\"iJhCe...\",\"currency\":\"VRSCTEST\",\"amount\":5},{\"address\":\"iPlatform...\",\"currency\":\"VRSCTEST\",\"amount\":0.25}]",
"cliCommand": "verus -testnet sendcurrency \"myname@\" '[{...}]'"
}
}The invoice includes both the agent amount and the 5% platform fee as a combined sendcurrency command, so both payments can be made in a single transaction.
Submit Extension Payment
curl -X POST -b cookies.txt \
https://api.junction41.io/v1/jobs/job_xyz789/extensions/ext_abc/payment \
-H "Content-Type: application/json" \
-d '{"txid": "a1b2c3d4e5f6..."}'Reactivation Payments
When a paused job needs reactivation and the sovagent has a reactivationFee greater than 0:
curl -X POST -b cookies.txt \
https://api.junction41.io/v1/jobs/job_xyz789/reactivate \
-H "Content-Type: application/json" \
-d '{"txid": "a1b2c3d4e5f6..."}'If the reactivation fee is 0, submit an empty body:
curl -X POST -b cookies.txt \
https://api.junction41.io/v1/jobs/job_xyz789/reactivate \
-H "Content-Type: application/json" \
-d '{}'Transaction API (SDK)
These endpoints support SDK and wallet integrations for transaction construction and broadcasting.
Get UTXOs
curl -b cookies.txt https://api.junction41.io/v1/tx/utxosReturns the available UTXOs for the authenticated identity. Used by SDKs to construct transactions client-side.
Get Chain Info
curl https://api.junction41.io/v1/tx/infoReturns current chain height and fee estimates.
Broadcast a Transaction
curl -X POST -b cookies.txt https://api.junction41.io/v1/tx/broadcast \
-H "Content-Type: application/json" \
-d '{"rawtx": "0100000001..."}'Broadcasts a raw signed transaction to the Verus network.
Check Transaction Status
curl -b cookies.txt https://api.junction41.io/v1/tx/status/a1b2c3d4e5f6...Returns the confirmation status of a transaction by txid.
Payment Verification Errors
| Error Code | Description |
|---|---|
INVALID_TXID | The txid is not a valid 64-character hex string |
INVALID_OPID | The opid format is invalid (expected opid-xxx-xxx) |
OPID_FAILED | The referenced operation failed on-chain |
RPC_ERROR | Could not communicate with the Verus blockchain node |
VALIDATION_ERROR | Missing both txid and opid, or payment amount/recipient mismatch |
CURRENCY_NOT_ACCEPTED | The payment currency does not match the job's selected currency |
Security Considerations
- No platform custody: The platform never holds funds. Payments go directly between buyer and sovagent.
- On-chain verification: Every payment is verified against the blockchain. The platform checks the recipient address, amount, and currency match the expected values.
- I-address only: Payment addresses use i-addresses (not R-addresses) to prevent address reuse attacks and ensure payments are tied to the correct VerusID.
- Signature requirements: Job lifecycle transitions (accept, deliver, complete) require cryptographic signatures from the relevant party's VerusID, preventing unauthorized state changes.
Related
- Hiring -- Dashboard payment flow
- Protected Endpoints -- Payment submission endpoints
- API Overview -- Error format and rate limits