{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/partner-api/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Depositing and Withdrawing USDC","description":"Jiko Technologies' external APIs for integrators.","lang":"en-US","siteUrl":"https://docs.jiko.io","projectTitle":"Jiko Technologies API Documentation","jsonLd":{"@context":"https://schema.org","@type":"Organization","name":"Jiko Technologies","url":"https://docs.jiko.io","logo":"https://docs.jiko.io/static/jiko-logo-blue.svg"},"llmstxt":{"hide":false,"title":"Jiko Technologies API Documentation","description":"External APIs for integrators","sections":[{"title":"Customer API","includeFiles":["products/customer-api/**/*.md"]},{"title":"Partner API","includeFiles":["products/partner-api/**/*.md"]}]},"meta":[{"name":"robots","content":"index,follow,max-image-preview:large"}]},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"depositing-and-withdrawing-usdc","__idx":0},"children":["Depositing and Withdrawing USDC"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Jiko has partnered with Circle to let your customers seamlessly move funds between on-chain crypto and safe, yield-earning U.S. Treasury bills (T-bills)."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Note: This feature currently supports ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["USDC on the Ethereum blockchain"]}," for customer-owned wallets. Native ETH or third-party transfers are not supported in this version."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-it-works","__idx":1},"children":["How It Works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["At a high level, Jiko bridges the gap between the blockchain and traditional finance by automating the cash pipelines in both directions."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Depositing:"]}," When a user wants to add funds, Jiko provisions a unique Ethereum deposit address mapped to their Jiko pocket. Any USDC sent to this address is automatically detected and routed to Circle, which converts it 1:1 into U.S. dollars. Jiko then instantly uses those dollars to buy T-bills for the customer."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Withdrawing:"]}," When a user initiates an on-chain withdrawal, the process reverses. Jiko instantly pulls the cash from their T-bill pocket and sends it to Circle. Circle then mints the equivalent amount of USDC and delivers it directly to the customer's external wallet address."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The entire backend plumbing—from blockchain tracking to broker-dealer execution—is completely automated and runs 24/7. This allows your users to treat their T-bill portfolio with the speed and flexibility of an on-chain account."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"receiving-deposits","__idx":2},"children":["Receiving Deposits"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"step-1-make-sure-the-customer-has-access-to-a-jiko-pay-pocket","__idx":3},"children":["Step 1: Make sure the customer has access to a Jiko Pay Pocket"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before you can receive USDC, please make sure that your customer has a Jiko Pay pocket. A Jiko Pay pocket lets customers send and receive USDC, in addition to being able to make third party payments."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can create a Jiko Pay pocket by calling the Create Pocket endpoint, and by setting the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," field to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["JIKO_PAY"]}," (not ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["JIKO_STORE"]},"). Jiko Pay pockets are different than Jiko Store pockets, so please ensure your customer has the correct type. To check if an existing pocket is \"JIKO_PAY\", please check the value of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," field in the GET Pocket endpoint."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Note: Only the organizations with explicit approval from Jiko can create Jiko Pay pockets, otherwise you will receive an error. You can always reach out to your Jiko contact to check what features are availible for your team."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"step-2-create-a-deposit-address","__idx":4},"children":["Step 2: Create a Deposit Address"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once your pocket is setup, the next step is to create a deposit address. To generate a unique deposit address for a customer, you must first create a portal for their specific pocket using the Crate Portal endpoint. You must set the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," field to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CRYPTO_DEPOSIT_ADDRESS_PORTAL"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"endpoint-for-create-portal","__idx":5},"children":["Endpoint for Create Portal"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/pockets/{pocket_id}/portals/"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"request-example","__idx":6},"children":["Request Example"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl -i -X POST \\\n  '[https://your-partner-name.partner-api.jikoservices.com/api/v2/pockets/](https://your-partner-name.partner-api.jikoservices.com/api/v2/pockets/){pocket_id}/portals/' \\\n  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \\\n  -H 'Content-Type: application/json' \\\n  -H 'x-jiko-idempotency: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \\\n  -H 'x-jiko-signature: string' \\\n  -d '{\n    \"id\": \"497f6eca-6276-4993-bfeb-53cbbbba6f08\",\n    \"name\": \"Ethereum Deposit Portal\",\n    \"chain\": \"ethereum\",\n    \"type\": \"CRYPTO_DEPOSIT_ADDRESS_PORTAL\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After calling POST Create Portal, the wallet address may need a few more moments to finish generating. You can use the the GET Account Portal endpoint with the newly generated portal ID to check when the deposit address is availible (the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," field will change from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PENDING"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OPEN"]},")."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Now that your deposit address is setup, Jiko will automatically convert any USDC received into US treasury bills."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["⚠️ Note on Address Availability: Each customer is limited to one deposit address per chain. Once the portal request is submitted, Circle generates the infrastructure and screens the entity. The final deposit address will populate and show as Available status once the compliance verification review completes."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"executing-withdrawals","__idx":7},"children":["Executing Withdrawals"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["On-chain withdrawals use Jiko's standard transfer architecture. To send USDC out to an external destination, the process requires two sequential steps:"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"1-create-a-counterparty","__idx":8},"children":["1. Create a Counterparty"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Register the destination external account in the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://docs.jiko.io/products/partner-api/reference/counterparties-v2/create_counterparty_api_v2_customers__customer_id__counterparties__post"},"children":["Create Counterparty"]},"  endpoint. Make sure to set the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," field to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["crypto_wallet_address"]},". Before you can send USDC to this counterparty, Circle will have to validate the blockchain address. This process can take up to a few minutes, before the address is okay to send to."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can monitor the status of the validation by calling GET Counterparty (using the counterparty ID returned in the previous step) and checking the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["STATUS"]}," field. Once we finish verifying the counterparty, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["STATUS"]}," field should update to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LINKED"]},", unless the address did not pass verification."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"2-initiate-an-outgoing-transfer","__idx":9},"children":["2. Initiate an outgoing transfer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"em","attributes":{},"children":["Work in progress"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Review and Execute: Just like traditional wires, the destination address undergoes sanctions and compliance screening before the transfer is cleared to execute. Once approved, submitting a standard transfer request triggers Jiko to automatically liquidate the T-bills and push the programmatic minting order to Circle."]}]},"headings":[{"value":"Depositing and Withdrawing USDC","id":"depositing-and-withdrawing-usdc","depth":1},{"value":"How It Works","id":"how-it-works","depth":2},{"value":"Receiving Deposits","id":"receiving-deposits","depth":3},{"value":"Step 1: Make sure the customer has access to a Jiko Pay Pocket","id":"step-1-make-sure-the-customer-has-access-to-a-jiko-pay-pocket","depth":4},{"value":"Step 2: Create a Deposit Address","id":"step-2-create-a-deposit-address","depth":4},{"value":"Endpoint for Create Portal","id":"endpoint-for-create-portal","depth":4},{"value":"Request Example","id":"request-example","depth":4},{"value":"Executing Withdrawals","id":"executing-withdrawals","depth":3},{"value":"1. Create a Counterparty","id":"1-create-a-counterparty","depth":4},{"value":"2. Initiate an outgoing transfer","id":"2-initiate-an-outgoing-transfer","depth":4}],"frontmatter":{"seo":{"title":"Depositing and Withdrawing USDC"}},"lastModified":"2026-09-01T16:08:59.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/partner-api/guides/building/usdc-guide","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}