LP: deposit(USDC) → set_rail_terms(wise, PHP, min_rate, LP payee hash)User: signal_intent(taker = user, provider = LP, amount, rate, expected fiat, payer hash)App: shows the LP's Wise details and the order reference, only after the lock is confirmedUser: pays the LP Wise-to-Wise, from their Wise balanceUser: the phone captures the transfer and the verifier signs a claimRelay: fulfill_intent(claim) → USDC to the user
User: deposit(USDC) → set_rail_terms(wise, PHP, min_rate, user payee hash) → set_allowed_takers([LP])LP: signal_intent(taker = LP, provider = user, rate ≥ user's minimum, LP payer hash)LP: pays the user (Wise or bank)LP: captures the outgoing transfer and the verifier signs a claimRelay: fulfill_intent(claim) → USDC to the LP
Users never need XLM. Pesa’s backend builds each user transaction (deposit, set terms, signal, cancel, depositor release) as an issued action. The user’s wallet signs it, and Pesa’s relay wraps it in a fee-bump. The relay fee-bumps only a transaction whose hash matches an action it issued for that user, once.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Pesa","description":"Peer-to-peer fiat and stablecoin settlement, with payments proven on the user's phone.","colors":{"primary":"#ff6b4a","light":"#ff8a6e","dark":"#ff6b4a"},"logo":{"light":"https://mintcdn.com/pesa/xU7lp0bMQwuVlXuD/logo/light.svg?fit=max\u0026auto=format\u0026n=xU7lp0bMQwuVlXuD\u0026q=85\u0026s=4c0d7e3a54a700e8c3683415a521dc32","dark":"https://mintcdn.com/pesa/xU7lp0bMQwuVlXuD/logo/dark.svg?fit=max\u0026auto=format\u0026n=xU7lp0bMQwuVlXuD\u0026q=85\u0026s=0d97b2652aa9a5083ae1ef2d964af503","href":"https://pesapay.xyz"},"favicon":"https://mintcdn.com/pesa/xU7lp0bMQwuVlXuD/favicon.svg?fit=max\u0026auto=format\u0026n=xU7lp0bMQwuVlXuD\u0026q=85\u0026s=4f24a0542fc86474e067011661d6fdc3","background":{"color":{"light":"#ffffff","dark":"#121011"}},"navbar":{"links":[{"href":"https://pesapay.xyz","label":"Website"}]},"footer":{"socials":{"website":"https://pesapay.xyz"}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"pesa","hasAudioNarration":false,"actualSubdomain":"pesa","customDomains":["docs.pesapay.xyz"],"gitSource":{"type":"github","owner":"pesapay","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad19aa402d0ac25a9c32f25","collectionId":"60e329a6-ab4f-4501-951b-d81577b2cb3c","liveDeploymentHistoryId":"6ad19aa402d0ac25a9c32f25","schemaVersion":"v3"},"entitlements":{},"buildId":"6ad19fdf5d77e0822fe5b532","clientVersion":"0.0.3865","searchFilterCounts":[{"language":"default","tag":"Documentation","count":27},{"language":"default","tag":"Developers","count":15},{"language":"default","tag":"API reference","count":12},{"language":"default","tag":"Chain abstraction","count":6},{"language":"default","tag":"Protocol","count":6},{"language":"default","tag":"zkTLS verification","count":6},{"language":"default","tag":"Integration guides","count":5},{"language":"default","tag":"zkTLS SDK","count":5},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Pesa SDK","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2-autocommit","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-branches-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"teamspace","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"client-snapshot-docs-config","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"protocol/order-lifecycle","slug":"/protocol/order-lifecycle","pageMetadata":{"title":"Order lifecycle","description":"Order states, time windows, and the buy and sell flows.","href":"/protocol/order-lifecycle"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Order states, time windows, and the buy and sell flows.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Mermaid,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`states`,children:`States`}),`\n`,_jsx(Mermaid,{chart:`stateDiagram-v2\n [*] --> ACTIVE: signal_intent (USDC locked)\n ACTIVE --> FULFILLED: fulfill_intent(claim)\n ACTIVE --> RELEASED_MANUAL: depositor_release\n ACTIVE --> CANCELLED: cancel_intent (taker)\n ACTIVE --> EXPIRED: expire_intent (after settle_by)\n FULFILLED --> [*]\n RELEASED_MANUAL --> [*]\n CANCELLED --> [*]\n EXPIRED --> [*]`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`FULFILLED`}),` and `,_jsx(_components.code,{children:`RELEASED_MANUAL`}),` pay the taker. `,_jsx(_components.code,{children:`CANCELLED`}),` and `,_jsx(_components.code,{children:`EXPIRED`}),` return the USDC to the depositor.`]}),`\n`,_jsx(Heading,{level:`2`,id:`time-windows`,children:`Time windows`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Time`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pay_by`})}),_jsx(_components.td,{children:`The taker should have paid by now. The app stops showing payment details after it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`settle_by`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`pay_by`}),` plus a grace period. A claim or a depositor release is accepted until this time.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`After `,_jsx(_components.code,{children:`settle_by`})]}),_jsxs(_components.td,{children:[`Anyone can call `,_jsx(_components.code,{children:`expire_intent`}),`.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`The grace period covers a payment made just before `,_jsx(_components.code,{children:`pay_by`}),` that the provider marks final a little later.`]}),`\n`,_jsx(Heading,{level:`2`,id:`buy`,children:`Buy`}),`\n`,_jsx(CodeBlock,{numberOfLines:`7`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`LP: deposit(USDC) → set_rail_terms(wise, PHP, min_rate, LP payee hash)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`User: signal_intent(taker = user, provider = LP, amount, rate, expected fiat, payer hash)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`App: shows the LP's Wise details and the order reference, only after the lock is confirmed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`User: pays the LP Wise-to-Wise, from their Wise balance`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`User: the phone captures the transfer and the verifier signs a claim`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Relay: fulfill_intent(claim) → USDC to the user`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`sell`,children:`Sell`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`User: deposit(USDC) → set_rail_terms(wise, PHP, min_rate, user payee hash) → set_allowed_takers([LP])`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`LP: signal_intent(taker = LP, provider = user, rate ≥ user's minimum, LP payer hash)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`LP: pays the user (Wise or bank)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`LP: captures the outgoing transfer and the verifier signs a claim`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Relay: fulfill_intent(claim) → USDC to the LP`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`who-pays-the-stellar-fee`,children:`Who pays the Stellar fee`}),`\n`,_jsx(_components.p,{children:`Users never need XLM. Pesa’s backend builds each user transaction (deposit, set terms, signal, cancel, depositor release) as an issued action. The user’s wallet signs it, and Pesa’s relay wraps it in a fee-bump. The relay fee-bumps only a transaction whose hash matches an action it issued for that user, once.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Order lifecycle","description":"Order states, time windows, and the buy and sell flows.","href":"/protocol/order-lifecycle"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"States","slug":"states","depth":2,"children":[]},{"title":"Time windows","slug":"time-windows","depth":2,"children":[]},{"title":"Buy","slug":"buy","depth":2,"children":[]},{"title":"Sell","slug":"sell","depth":2,"children":[]},{"title":"Who pays the Stellar fee","slug":"who-pays-the-stellar-fee","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"pesa","siteName":"Pesa","title":"Order lifecycle - Pesa","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-16T03:31:51.569Z","originalFileLocation":"protocol/order-lifecycle.mdx"},"headHtml":"\u003cmeta data-mint-head name=\"description\" content=\"Order states, time windows, and the buy and sell flows.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Pesa\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Order lifecycle - Pesa\">\u003cmeta data-mint-head property=\"og:description\" content=\"Order states, time windows, and the buy and sell flows.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Pesa\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.pesapay.xyz/protocol/order-lifecycle\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Order lifecycle - Pesa\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Order states, time windows, and the buy and sell flows.\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/pesa/AwbYyiaC2a_QBenn/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Pesa\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff6b4a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.pesapay.xyz/protocol/order-lifecycle\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/protocol/order-lifecycle.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.pesapay.xyz/#organization\",\"name\":\"Pesa\",\"url\":\"https://docs.pesapay.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/pesa/xU7lp0bMQwuVlXuD/logo/light.svg?fit=max\u0026auto=format\u0026n=xU7lp0bMQwuVlXuD\u0026q=85\u0026s=4c0d7e3a54a700e8c3683415a521dc32\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.pesapay.xyz#website\",\"name\":\"Pesa\",\"url\":\"https://docs.pesapay.xyz\",\"publisher\":{\"@id\":\"https://docs.pesapay.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.pesapay.xyz/protocol/order-lifecycle#webpage\",\"url\":\"https://docs.pesapay.xyz/protocol/order-lifecycle\",\"name\":\"Order lifecycle\",\"description\":\"Order states, time windows, and the buy and sell flows.\",\"dateModified\":\"2026-10-16T03:31:51.569Z\",\"isPartOf\":{\"@id\":\"https://docs.pesapay.xyz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.pesapay.xyz/protocol/order-lifecycle#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.pesapay.xyz/protocol/order-lifecycle#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Protocol\",\"item\":\"https://docs.pesapay.xyz/protocol/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Order lifecycle\",\"item\":\"https://docs.pesapay.xyz/protocol/order-lifecycle\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.pesapay.xyz/protocol/order-lifecycle#article\",\"headline\":\"Order lifecycle\",\"name\":\"Order lifecycle\",\"description\":\"Order states, time windows, and the buy and sell flows.\",\"url\":\"https://docs.pesapay.xyz/protocol/order-lifecycle\",\"mainEntityOfPage\":{\"@id\":\"https://docs.pesapay.xyz/protocol/order-lifecycle#webpage\"},\"dateModified\":\"2026-10-16T03:31:51.569Z\",\"publisher\":{\"@id\":\"https://docs.pesapay.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.pesapay.xyz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Pesa\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Pesa","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"What is Pesa?","description":"Pesa lets people buy and sell digital dollars with local payment apps, peer to peer, with every payment proven on the user's phone.","href":""},{"title":"How Pesa works","description":"One trade from start to finish: lock, pay, prove, release.","href":"/how-it-works"},{"title":"Developer quickstart","description":"Move USDC from an EVM chain into a Stellar wallet in about 30 lines.","href":"/quickstart"}]},{"group":"Using Pesa","pages":[{"title":"Buy USDC","description":"Pay a seller with your payment app and receive USDC in your own wallet.","href":"/using-pesa/buy"},{"title":"Sell USDC","description":"Lock your USDC, get paid in local money, and release only when the payment is proven.","href":"/using-pesa/sell"},{"title":"Provide liquidity","description":"Run an offer: deposit USDC, set your rates, and get paid in local money.","href":"/using-pesa/provide-liquidity"}]},{"group":"Protocol","pages":[{"title":"Protocol overview","description":"Three Soroban contracts settle every Pesa trade on Stellar.","href":"/protocol/overview"},{"title":"Escrow","description":"Holds depositors' USDC and their rail terms, and pays out only through the orchestrator.","href":"/protocol/escrow"},{"title":"Orchestrator","description":"Opens, fulfils, cancels and expires orders, and is the only contract the escrow obeys.","href":"/protocol/orchestrator"},{"title":"Claims contract","description":"Checks zkTLS claims on-chain and keeps the set of spent payment nullifiers.","href":"/protocol/claims-contract"},{"title":"Order lifecycle","description":"Order states, time windows, and the buy and sell flows.","href":"/protocol/order-lifecycle"},{"title":"Fees and limits","description":"What a trade or a transfer costs, and how much can move.","href":"/protocol/fees-and-limits"}]},{"group":"Chain abstraction","pages":[{"title":"Chain abstraction","description":"Every chain is a spoke. Stellar is the only place balances, escrow and trades live.","href":"/chain-abstraction/overview"},{"title":"Supported routes","description":"Which assets can move in and out, from which chains, and who signs.","href":"/chain-abstraction/routes"},{"title":"USDC through CCTP","description":"How a USDC burn on an EVM chain becomes native USDC in a Stellar wallet, and back.","href":"/chain-abstraction/cctp"},{"title":"USDT through USDT0","description":"USDT moves over LayerZero as USDT0, then converts to USDC on the Stellar DEX.","href":"/chain-abstraction/usdt0"},{"title":"Transfer lifecycle","description":"Each transfer's stage path, and the SEP-24 status your app should show.","href":"/chain-abstraction/transfer-lifecycle"},{"title":"Failure handling","description":"What the transfers service does when a chain, a provider or a user does something unexpected.","href":"/chain-abstraction/failure-handling"}]},{"group":"zkTLS verification","pages":[{"title":"zkTLS verification","description":"Prove a fact from a user's own HTTPS account, from their phone, without the account data leaving it.","href":"/zktls/overview"},{"title":"Architecture","description":"Split TLS capture across two enclaves, a native VOLE proof on the phone, and an attested verifier.","href":"/zktls/architecture"},{"title":"Profiles and policies","description":"A site is described by a profile, a rule by a policy. Adding a rail adds two files and no code.","href":"/zktls/profiles-and-policies"},{"title":"Claims","description":"The platform's only output: a signed statement that a policy held for the user's account.","href":"/zktls/claims"},{"title":"Trust bundle","description":"The signed list of every enclave and verifier key a consumer may trust.","href":"/zktls/trust-bundle"},{"title":"Payment rails","description":"How a Wise transfer becomes a claim that can settle exactly one Pesa order.","href":"/zktls/payment-rails"}]},{"group":"Security","pages":[{"title":"Trust model","description":"What each party can and cannot do, and what you trust when you use Pesa.","href":"/security/trust-model"},{"title":"Settlement invariants","description":"The rules every fund path must keep. Each change to a fund path names the invariant it preserves.","href":"/security/invariants"},{"title":"Risks","description":"Known risks for users, liquidity providers and integrators, and how each is bounded.","href":"/security/risks"}]}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/developers/overview"}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"title":"Order lifecycle - Pesa","buildId":"dpl_33ETnXRdsYLr97cjMPs66KyshzXB","deploymentId":"dpl_33ETnXRdsYLr97cjMPs66KyshzXB","dynamics":[],"chunks":[]}