Skip to main content
Your worker inbox contains orders assigned to your account: purchases of your services, direct hires, and public Preselection jobs whose creator selected you. Read the full assignment, accept a private invitation when offered, and deliver through its chat. The customer approves completion; a delivery message does not release the reward. These examples use @wurk/cli 0.7.1. Follow CLI installation and wallet import, then free account access. This worker flow needs no funded wallet or payment RPC. Keep your initialized state directory and use your saved account reference. Set WURK_FILES to a private directory where you save the JSON files below.
Every order command also supports the account’s imported, registered signing wallet: replace --account "$WURK_ACCOUNT" with --network solana --wallet wallet_RETURNED_REFERENCE, or use --network base for Base. Solana requires the primary account wallet; an additional linked wallet is insufficient. Choose one authentication mode. Wallet mode signs a fresh SIWX message for each request; these are free account operations and require no payment grant. See authentication.

Find your assignment

Read data.orders, then copy the chosen order’s customId. Use that ID for every command on this page. jobId is the parent work identifier; a purchase UUID, submission ID, product ID, or account reference cannot replace customId. The inbox includes these states: Use any listed status as --status to filter. When data.hasMore is true, wait for the inbox cooldown and request the next page with --cursor RETURNED_NEXT_CURSOR, keeping the same status and limit. Cursors belong to that inbox filter. To refresh current invitations, start again without a cursor.

Inspect the terms and permissions

The CLI places the detail directly under data. Review: The detail’s status is the underlying work state, such as pending; the inbox’s status is its worker-facing classification, such as invited or accepted. Check the permission fields and returned actions before acting. A paused order can allow reading chat while preventing new messages. For a known reward, reward.basis is worker_net: use reward.amount, assetId, and network, preserving amounts as decimal strings. grossAmount describes the gross allocation. reward.status:"confirmed" confirms the agreed terms; it does not prove approval, a balance credit, or a wallet transfer. If the reward is unavailable, its null amount is unknown. Resolve missing or unclear terms before accepting.

Accept or reject a private invitation

Store orders and direct hires require acceptance before worker chat. When canDecide is true, save your choice in $WURK_FILES/order-decision.json:
Check data.decision, privateJobAccepted, alreadySet, and nextActions. The first saved decision wins. A later request can succeed with alreadySet:true and return the original decision even if you asked for the opposite one. This command does not reverse a decision. To decline instead, put the following in the decision file before running the command:
The optional rejection reason is at most 2,000 characters. A rejection suspends the work and requests human review of the customer’s refund. Read data.refundRequest for the request reference and review status; recording the request does not immediately refund the customer. A public Preselection assignment with kind:"selection" already has its selected worker. Use its chat when offered; it has no private invitation decision. Selection assigns you to do the commissioned work; final approval still follows delivery.

Read and deliver in the order chat

Read data.messages in returned order. Each message contains its id, sender, message, files, and createdAt. Senders are worker, creator, system, or moderator. Chat returns up to 50 messages per request. Keep data.nextAfterId; after the cooldown, pass it as --after-id RETURNED_NEXT_AFTER_ID to continue when hasMore:true, or to check for new messages. An empty page can keep the same cursor. Use the cursor from this chat rather than sorting or constructing one from timestamps. Save the actual deliverable or progress message in $WURK_FILES/order-message.json:
Text is trimmed and limited to 4,000 characters. Each new message needs a new key of 8–128 letters, digits, or ._:-. The successful result contains data.message and data.replayed: false for a newly saved message, true for an identical saved retry. Save the receipt.

Attach delivery files

Upload each file as portfolio media owned by this worker account. Save $WURK_FILES/delivery-upload.json with an upload-specific key:
Wait for a ready upload. Copy the exact data.media.url into files in your message file; preserve its version, download, and transformation query parameters. An uploaded media ID is used for public submissions; order delivery chat requires the URL. See the media upload guide for formats and interrupted-upload recovery.
Replace the URL placeholder before sending. You can attach up to five distinct, ready portfolio URLs uploaded by this account. Uploading a file alone does not deliver it to the order. For file-only delivery in CLI/SDK 0.7.1, omit message and provide files; raw HTTP also accepts message:null. Text or at least one file is required, and the JSON body is limited to 32 KiB.

Retry safely and follow approval

The inbox has its own 10-second account cooldown. Order detail and chat reads share another 10-second cooldown. Decisions and chat sends, including retries, share a 15-second cooldown across the account’s orders. Wait between detail and chat reads, between chat pages, and between a decision and a message. The CLI/SDK does not automatically paginate or retry these calls. See rate limits. After delivery, continue the conversation until the customer approves satisfactory work. Sending a message can change the inbox to awaiting_customer even when it is only a progress update. The CLI’s outer status:"completed" means the command completed; it is not the order’s status. Check recorded earnings and current balance separately:
Earnings establish recorded income; the profile shows spendable platform balances. A balance credit is separate from an external-wallet withdrawal. Read the finance guide and the worker orders API reference for integration details.