Ajaib: Stock, Crypto, US Stock icon

Ajaib Data API: IDX, Crypto and US Stock Endpoints

Ajaib Technologies · Banking 4.0 ★

Ajaib: Stock, Crypto, US Stock is an Android investment app from Ajaib Technologies for Indonesian retail investors, bringing IDX shares, crypto, US-listed stocks, reksadana mutual funds and government bonds into one account. Users can open an RDN cash account with e-KTP verification, follow stock order books, place regular and day-trade orders, fund purchases through virtual accounts and move between investment products. Google sign-in, a six-digit PIN and trusted-device checks support account access. The Indonesia-focused app has a 4.01 Google Play rating from 163,849 reviews and competes with Stockbit, Bibit, Bareksa and Pluang.

RDN cash snapshots and cross-asset wealth totals connect investmentType to totalInvestedAmount, totalPortfolioAmount, pnlAmount and pnlPercentage, alongside staleData and websocketIntegration flags on each category card. IDX account records distinguish holdCash, regularBuyingPower and tradeLimitBuyingPower, with regPortfolioValueWithHaircut and dtPortfolioValueWithHaircut keeping collateral-adjusted values separate; IDX buy receipts carry orderNo, idxOrderNo and executedLot for the submitted tickerCode, lot and board. Crypto records add tradeLimit, buyingPower, cashAvailable and withdrawable, while order receipts track quantityFilled, fee and status.

US-stock positions retain symbol, amount, averagePrice, investedPrice and assetReturnPct for cost-basis and return calculations. Mutual-fund records add fundTypeLabel and pending cash movements; bond positions add bondType, bondCategory and expirationDate. Wealth aggregators can reconcile these asset groups, risk teams can compare cash with buying power, and tax-lot tools can keep USD positions separate from IDR holdings. openData Studio turns these data structures into callable open data for portfolio reporting and integrations.

Screenshots

  • Ajaib: Stock, Crypto, US Stock screenshot 1
  • Ajaib: Stock, Crypto, US Stock screenshot 2
  • Ajaib: Stock, Crypto, US Stock screenshot 3
  • Ajaib: Stock, Crypto, US Stock screenshot 4
  • Ajaib: Stock, Crypto, US Stock screenshot 5
  • Ajaib: Stock, Crypto, US Stock screenshot 6
  • Ajaib: Stock, Crypto, US Stock screenshot 7
  • Ajaib: Stock, Crypto, US Stock screenshot 8

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • PIN login session

    POST /v1/investment-session/start osint

    Signs the investor in and returns pinToken, pinRefresh and trusted-device flags for subsequent account access.

    Auth: Unauthenticated sign-in. The returned pinToken is used as Authorization: jwt <pinToken>; pinRefresh renews the PIN session.

    • pinToken
    • pinRefresh
    • haveTrustedDevice
    • isTrustedDevice
    • userId
    POST /v1/investment-session/start HTTP/1.1
    Content-Type: application/json
    
    {
      "email": "<example-investor-email>"
    }
    {
      "pinToken": "<example-pin-token>",
      "pinRefresh": "<example-pin-refresh>",
      "haveTrustedDevice": true,
      "isTrustedDevice": true,
      "user": {
        "userId": "example-investor-001"
      }
    }
  • Refresh access token

    POST /v1/investment-session/renew openbanking

    Rotates the signed-in session and returns a new accessToken and refreshToken pair.

    Auth: The request body carries the signed-in session refreshToken; the response supplies a renewed accessToken and refreshToken.

    • accessToken
    • refreshToken
    POST /v1/investment-session/renew HTTP/1.1
    Content-Type: application/json
    
    {
      "refreshToken": "<example-refresh-token>"
    }
    {
      "accessToken": "<example-access-token>",
      "refreshToken": "<example-next-refresh-token>"
    }
  • Wealth-center portfolio summary

    GET /v1/multi-asset-wealth/overview openfinance

    Reads the unified wealth card with per-category invested and portfolio totals, profit and loss, nested investmentType groups and asset positions.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • category
    • displayName
    • websocketIntegration
    • staleData
    • totalInvestedAmount
    • totalPortfolioAmount
    • pnlAmount
    • pnlPercentage
    • investmentType
    • assets
    • symbol
    • quantity
    • averagePrice
    • lastPrice
    • investedAmount
    GET /v1/multi-asset-wealth/overview HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "category": "STOCK",
      "displayName": "Saham",
      "websocketIntegration": true,
      "staleData": false,
      "totalInvestedAmount": "9250000",
      "totalPortfolioAmount": "9500000",
      "pnlAmount": "250000",
      "pnlPercentage": "2.70",
      "investments": [
        {
          "investmentType": "STOCK_REGULAR",
          "totalInvestedAmount": "9250000",
          "totalPortfolioAmount": "9500000",
          "pnlAmount": "250000",
          "pnlPercentage": "2.70",
          "assets": [
            {
              "symbol": "BBCA",
              "quantity": "1000",
              "averagePrice": "9250",
              "lastPrice": "9500",
              "investedAmount": "9250000",
              "pnlAmount": "250000"
            }
          ]
        }
      ]
    }
  • IDX regular cash sleeve

    GET /v1/idx-capital/availability openbanking

    Reads IDX regular-account cash, regular and trade-limit buying power, regular/day-trade portfolio values before and after haircuts, and the global-limit flag.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • holdCash
    • regularBuyingPower
    • tradeLimitBuyingPower
    • maxFee
    • regMaxFee
    • closeBalance
    • fee
    • loanAmount
    • portfolioValue
    • multiplier
    • regPortfolioValue
    • dtPortfolioValue
    • regPortfolioValueWithHaircut
    • dtPortfolioValueWithHaircut
    • globalLimitHit
    GET /v1/idx-capital/availability HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "holdCash": 25000000.0,
      "regularBuyingPower": 24150000.0,
      "tradeLimitBuyingPower": 18000000.0,
      "maxFee": 15000.0,
      "regMaxFee": 12000.0,
      "closeBalance": 24850000.0,
      "fee": 8500.0,
      "loanAmount": 0.0,
      "portfolioValue": 9500000.0,
      "multiplier": 1.0,
      "regPortfolioValue": 9500000.0,
      "dtPortfolioValue": 0.0,
      "regPortfolioValueWithHaircut": 8550000.0,
      "dtPortfolioValueWithHaircut": 0.0,
      "globalLimitHit": false
    }
  • IDX stock portfolio summary

    GET /v1/idx-holdings/overview openfinance

    Lists IDX holdings with symbol, quantity, averagePrice, lastPrice and investedAmount alongside portfolio-level profit and loss.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • totalInvestedAmount
    • totalPortfolioAmount
    • pnlAmount
    • pnlPercentage
    • symbol
    • name
    • quantity
    • averagePrice
    • lastPrice
    • investedAmount
    • portfolioAmount
    • currency
    GET /v1/idx-holdings/overview HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "totalInvestedAmount": "9250000",
      "totalPortfolioAmount": "9500000",
      "pnlAmount": "250000",
      "pnlPercentage": "2.70",
      "assets": [
        {
          "symbol": "BBCA",
          "name": "Bank Central Asia",
          "quantity": "1000",
          "averagePrice": "9250",
          "lastPrice": "9500",
          "investedAmount": "9250000",
          "portfolioAmount": "9500000",
          "pnlAmount": "250000",
          "pnlPercentage": "2.70",
          "currency": "IDR"
        }
      ]
    }
  • Place IDX regular buy

    POST /v1/idx-purchases/create openfinance

    Places an IDX regular buy using tickerCode, lot, price and board, returning orderNo, idxOrderNo and fill status.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • affiliateId
    • board
    • lot
    • period
    • price
    • tickerCode
    • automationOrders
    • tradingMode
    • orderNo
    • idxOrderNo
    • stockName
    • executedLot
    • status
    • type
    • orderType
    • total
    POST /v1/idx-purchases/create HTTP/1.1
    Authorization: jwt <example-pin-token>
    Content-Type: application/json
    
    {
      "affiliateId": "example-affiliate",
      "board": "RG",
      "lot": 10,
      "period": "DAY",
      "price": 9500.0,
      "tickerCode": "BBCA",
      "automationOrders": [],
      "tradingMode": "REGULAR",
      "metadata": null,
      "advancedOrder": null
    }
    {
      "orderNo": "example-idx-order-001",
      "idxOrderNo": "example-exchange-order-001",
      "stockName": "BBCA",
      "price": 9500.0,
      "lot": 10,
      "executedLot": 0,
      "status": "OPEN",
      "type": "BUY",
      "orderType": "LIMIT",
      "total": 9500000.0
    }
  • Coin homepage portfolio

    GET /v1/digital-assets/overview openfinance

    Reads the crypto home wallet with labelled total, invested and return amounts plus userBalance.tradeLimit.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • portfolioSummary
    • totalLabel
    • investedLabel
    • returnAmountLabel
    • returnPercentageLabel
    • currencySymbol
    • userBalance
    • tradeLimit
    • tradeLimitLabel
    • userCampaignNetWorth
    GET /v1/digital-assets/overview HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "portfolioSummary": {
        "totalLabel": "Rp 12.500.000",
        "investedLabel": "Rp 11.200.000",
        "returnAmountLabel": "Rp 1.300.000",
        "returnPercentageLabel": "+11.61%",
        "currencySymbol": "Rp"
      },
      "userBalance": {
        "tradeLimit": 8500000.0,
        "tradeLimitLabel": "Rp 8.500.000"
      },
      "userCampaignNetWorth": null
    }
  • Place crypto buy

    POST /v1/digital-asset-purchases/create openfinance

    Places a crypto buy using code, orderType, price, quantity and subtotal, returning order details including ajaibId, quantityFilled, fee and status.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • code
    • orderType
    • currency
    • price
    • quantity
    • subtotal
    • tradingType
    • ajaibId
    • assetId
    • assetName
    • fee
    • feePercentage
    • id
    • orderNumber
    • party
    • quantityFilled
    • side
    • status
    • total
    • type
    POST /v1/digital-asset-purchases/create HTTP/1.1
    Authorization: jwt <example-pin-token>
    Content-Type: application/json
    
    {
      "code": "BTCIDR",
      "orderType": "LIMIT",
      "currency": "IDR",
      "price": 1450000000.0,
      "quantity": 0.001,
      "subtotal": 1450000.0,
      "tradingType": "SPOT"
    }
    {
      "ajaibId": 1001,
      "assetId": "btc",
      "assetLogo": "/media/bitcoin-example.svg",
      "assetName": "Bitcoin",
      "createdAt": "2026-10-26T07:12:01Z",
      "currency": "IDR",
      "fee": 2175.0,
      "feePercentage": 0.15,
      "id": "example-crypto-order-001",
      "orderNumber": 1001,
      "party": "AJAIB",
      "price": 1450000000.0,
      "quantity": 0.001,
      "quantityFilled": 0.0,
      "side": "BUY",
      "status": "OPEN",
      "total": 1450000.0,
      "type": "LIMIT",
      "updatedAt": "2026-10-26T07:12:01Z"
    }
  • Crypto account balances

    GET /v1/digital-asset-cash/availability openbanking

    Reads buyingPower and cashAvailable for the signed-in crypto wallet.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • buyingPower
    • cashAvailable
    GET /v1/digital-asset-cash/availability HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "buyingPower": 8500000.0,
      "cashAvailable": 8200000.0
    }
  • Crypto withdrawable cash

    GET /v1/digital-asset-cash/transfer-capacity openbanking

    Returns withdrawable crypto-wallet cash and the minAmount withdrawal floor.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • withdrawable
    • minAmount
    GET /v1/digital-asset-cash/transfer-capacity HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "withdrawable": 7800000.0,
      "minAmount": 10000.0
    }
  • US-stock portfolio summary

    GET /v1/us-equity-positions/overview openfinance

    Lists US-stock positions with symbol, amount, averagePrice, investedPrice, currentPrice and assetReturnPct.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • symbol
    • amount
    • returnChange
    • returnPct
    • image
    • company
    • averagePrice
    • investedPrice
    • currentPrice
    • assetReturnPrice
    • assetReturnPct
    • currency
    GET /v1/us-equity-positions/overview HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "holdings": [
        {
          "symbol": "AAPL",
          "amount": 12.0,
          "returnChange": 185.4,
          "returnPct": 8.67,
          "image": "/media/us-equity-example.svg",
          "company": "Apple Inc.",
          "averagePrice": 178.25,
          "investedPrice": 2139.0,
          "currentPrice": 193.7,
          "assetReturnPrice": 185.4,
          "assetReturnPct": 8.67,
          "currency": "USD"
        }
      ]
    }
  • Place US-stock buy

    POST /v1/us-equity-purchases/create openfinance

    Submits a US-stock buy with id, symbol, total and additionalInfo.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • id
    • symbol
    • total
    • additionalInfo
    POST /v1/us-equity-purchases/create HTTP/1.1
    Authorization: jwt <example-pin-token>
    Content-Type: application/json
    
    {
      "id": "example-us-stock-order-001",
      "symbol": "AAPL",
      "total": 1937.0,
      "additionalInfo": null
    }
    {
      "id": "example-us-stock-order-001",
      "symbol": "AAPL",
      "total": 1937.0,
      "additionalInfo": null
    }
  • Mutual-fund wallet portfolio

    GET /v1/reksadana-positions/overview openfinance

    Lists reksadana positions with fundTypeLabel, pendingDepositAmount, pendingWithdrawalAmount and portfolio-level profit and loss.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • totalInvestedAmount
    • totalPortfolioAmount
    • pnlAmount
    • pnlPercentage
    • symbol
    • name
    • quantity
    • averagePrice
    • lastPrice
    • investedAmount
    • portfolioAmount
    • fundTypeLabel
    • pendingDepositAmount
    • pendingWithdrawalAmount
    • isVirtualFund
    GET /v1/reksadana-positions/overview HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "totalInvestedAmount": "15000000",
      "totalPortfolioAmount": "15300000",
      "pnlAmount": "300000",
      "pnlPercentage": "2.00",
      "assets": [
        {
          "symbol": "EXAMPLE-MF",
          "name": "Example Money Market Fund",
          "quantity": "15000",
          "averagePrice": "1000",
          "lastPrice": "1020",
          "investedAmount": "15000000",
          "portfolioAmount": "15300000",
          "pnlAmount": "300000",
          "fundTypeLabel": "Pasar Uang",
          "pendingDepositAmount": "0",
          "pendingWithdrawalAmount": "0",
          "isVirtualFund": false
        }
      ]
    }
  • Bond wallet portfolio

    GET /v1/bond-positions/overview openfinance

    Lists SBN and corporate-bond positions with bondType, bondCategory, expirationDate and portfolio-level profit and loss.

    Auth: Authorization: jwt <pinToken> after login; use the session accessToken after renewal.

    • totalInvestedAmount
    • totalPortfolioAmount
    • pnlAmount
    • pnlPercentage
    • symbol
    • name
    • quantity
    • averagePrice
    • lastPrice
    • investedAmount
    • portfolioAmount
    • bondType
    • bondCategory
    • expirationDate
    GET /v1/bond-positions/overview HTTP/1.1
    Authorization: jwt <example-pin-token>
    {
      "totalInvestedAmount": "10000000",
      "totalPortfolioAmount": "10115000",
      "pnlAmount": "115000",
      "pnlPercentage": "1.15",
      "assets": [
        {
          "symbol": "FR0090",
          "name": "FR0090",
          "quantity": "10",
          "averagePrice": "1000000",
          "lastPrice": "1011500",
          "investedAmount": "10000000",
          "portfolioAmount": "10115000",
          "pnlAmount": "115000",
          "bondType": "SBN",
          "bondCategory": "PRIMARY",
          "expirationDate": "2031-07-15"
        }
      ]
    }

Data categories

  • session tokens
  • wealth totals
  • IDX cash
  • IDX holdings
  • IDX orders
  • crypto wallets
  • crypto orders
  • US-stock lots
  • mutual-fund holdings
  • bond holdings

Where teams use this data

  • Cross-sleeve wealth recon

    Family-office ledgers pull totalInvestedAmount, totalPortfolioAmount, pnlAmount and pnlPercentage per investmentType so IDX, crypto, US-stock, reksadana and bond sleeves land in the same nightly rollup.

  • IDX cash versus haircut

    Risk desks compare holdCash and regularBuyingPower with tradeLimitBuyingPower, then check regPortfolioValueWithHaircut / dtPortfolioValueWithHaircut and globalLimitHit before allowing another regular lot.

  • Crypto trade-limit watch

    Treasury bots read userBalance.tradeLimit next to buyingPower / cashAvailable and withdrawable / minAmount so a coin buy is not submitted past the labelled wallet floor.

  • US-stock tax lots

    Year-end harvest jobs page symbol, amount, averagePrice, investedPrice and assetReturnPct so USD lots keep a cost basis separate from IDX cash P&L.

Frequently asked questions

Which Ajaib wealth fields support a multi-asset portfolio report?

Wealth records group category and displayName with totalInvestedAmount, totalPortfolioAmount, pnlAmount and pnlPercentage. Nested investmentType groups and asset fields such as symbol, quantity, averagePrice and lastPrice support holdings-level reconciliation.

How do IDX cash and crypto wallet balances differ?

IDX account records separate holdCash, regularBuyingPower and tradeLimitBuyingPower, with regular and day-trade portfolio values before and after haircuts. Crypto records distinguish tradeLimit, buyingPower, cashAvailable and withdrawable, plus minAmount for the withdrawal floor. These fields describe different limits and should not be treated as interchangeable cash balances.

Which fields identify a US-stock position and a buy submission?

US-stock holdings include symbol, amount, company, averagePrice, investedPrice, currentPrice and assetReturnPct, with currency identifying USD positions. A buy submission uses id, symbol, total and additionalInfo. The examples separate position reporting from order submission.

How is session authentication represented in the API examples?

Sign-in returns pinToken, pinRefresh and trusted-device flags. Authenticated examples use the Authorization header with the jwt scheme and a placeholder token. Session renewal carries refreshToken in the request body and returns accessToken and refreshToken; PIN-session renewal uses pinRefresh. No live credentials are included. Paths and payloads are illustrative, not live Ajaib services or official developer documentation; account-specific integrations require appropriate authorization and an agreed access arrangement.

Apps similar to Ajaib: Stock, Crypto, US Stock

  • Stockbit — Stockbit is PT Stockbit Sekuritas Digital's Android app for discussing, analyzing and trading Indonesia Stock Exchange (IDX) shares, with live quotes, Chartbit charts and in-app RDN opening.
  • Bibit- Reksadana & Obligasi — Bibit is PT Bibit Tumbuh Bersama's OJK-licensed APERD app for Indonesian reksadana mutual funds, retail SBN, FR government bonds and beginner-oriented stocks.
  • Bareksa — Bareksa is an OJK-licensed Indonesian investment app for stocks, more than 180 mutual funds, government bonds (SBN) and gold, with a robo advisor on the same client.
  • Pluang — Pluang is an Indonesian investing app for IDX stocks, US stocks, crypto and digital gold, with group companies licensed and supervised by OJK, Bappebti and/or Bank Indonesia.
  • tanamduit — tanamduit is an OJK-licensed APERD app for Indonesian mutual funds starting at Rp10,000, retail government bonds (SBN) and gold, with goal-based Tanam Mimpi plans.
  • IPOT — IPOT is PT Indo Premier Sekuritas's Android client for investing and trading Indonesian stocks, from a brokerage registered with and supervised by OJK.
  • Growin' — Growin' is Mandiri Sekuritas's investing app for Indonesian stocks, mutual funds across money-market, fixed-income, equity, balanced, index/ETF and sharia categories, and bonds.
  • Pintu — Pintu is an OJK-supervised Indonesian crypto app for rupiah spot trading, leveraged futures and earn products across hundreds of coins.

Topics

  • Ajaib API
  • Ajaib portfolio data
  • Ajaib IDX holdings
  • Ajaib holdCash
  • Ajaib crypto buyingPower
  • Ajaib tradeLimit
  • Ajaib US stock averagePrice
  • Ajaib reksadana data
  • Ajaib bond holdings
  • Ajaib totalPortfolioAmount

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote