> ## Documentation Index
> Fetch the complete documentation index at: https://docs.octav.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# Status

> Check synchronization status and data freshness for an address

Retrieve synchronization status for an address to check when portfolio and transaction data were last updated.

<Info>
  **Cost:** Free (0 credits)
</Info>

<Note>
  **Interactive Playground:** Test this endpoint in the [API Playground](/api-reference/status). Get your API key at [data.octav.fi](https://data.octav.fi/)
</Note>

***

## Endpoint

```bash theme={null}
GET https://api.octav.fi/v1/status
```

### Parameters

<ParamField query="addresses" type="string" required>
  Wallet address (EVM / SOL)

  ```
  addresses=0x6426af179aabebe47666f345d69fd9079673f6cd
  ```
</ParamField>

***

## Example

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.octav.fi/v1/status?addresses=0x6426af..." \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    `https://api.octav.fi/v1/status?addresses=${address}`,
    { headers: { 'Authorization': `Bearer ${apiKey}` } }
  );
  const [status] = await response.json();
  console.log(`Last portfolio sync: ${status.portfolioLastSync}`);
  console.log(`Last transaction sync: ${status.transactionsLastSync}`);
  console.log(`Sync in progress: ${status.syncInProgress}`);
  ```

  ```python Python theme={null}
  response = requests.get(
      'https://api.octav.fi/v1/status',
      params={'addresses': address},
      headers={'Authorization': f'Bearer {api_key}'}
  )
  status = response.json()[0]
  print(f"Last portfolio sync: {status['portfolioLastSync']}")
  print(f"Last transaction sync: {status['transactionsLastSync']}")
  print(f"Sync in progress: {status['syncInProgress']}")
  ```
</CodeGroup>

***

## Response

<ResponseField name="address" type="string">
  The wallet address
</ResponseField>

<ResponseField name="portfolioLastSync" type="string">
  ISO 8601 timestamp of last portfolio synchronization
  Example: `"2025-05-08T14:43:12.020Z"`
</ResponseField>

<ResponseField name="transactionsLastSync" type="string">
  ISO 8601 timestamp of last transaction synchronization
  Example: `"2025-05-08T14:38:15.920Z"`
</ResponseField>

<ResponseField name="syncInProgress" type="boolean">
  Whether transactions are currently syncing
  `true` = sync in progress, `false` = no active sync
</ResponseField>

***

## Example Response

```json theme={null}
[
  {
    "address": "0x6426af179aabebe47666f345d69fd9079673f6cd",
    "portfolioLastSync": "2025-05-08T14:43:12.020Z",
    "transactionsLastSync": "2025-05-08T14:38:15.920Z",
    "syncInProgress": false
  }
]
```

***

## Use Cases

<Tabs>
  <Tab title="Check Freshness" icon="clock">
    Check if data is fresh enough:

    ```javascript theme={null}
    async function isDataFresh(address, maxAgeMinutes = 10) {
      const response = await fetch(
        `https://api.octav.fi/v1/status?addresses=${address}`,
        { headers: { 'Authorization': `Bearer ${apiKey}` } }
      );
      const [status] = await response.json();
      const lastSync = new Date(status.portfolioLastSync);
      const now = new Date();
      const ageMinutes = (now - lastSync) / 1000 / 60;
      return ageMinutes <= maxAgeMinutes;
    }
    const isFresh = await isDataFresh(address);
    if (!isFresh) {
      console.log('Data is stale, consider syncing');
    }
    ```
  </Tab>

  <Tab title="Wait for Sync" icon="hourglass">
    Wait for sync to complete:

    ```javascript theme={null}
    async function waitForSync(address, timeoutSeconds = 60) {
      const start = Date.now();
      while (true) {
        const response = await fetch(
          `https://api.octav.fi/v1/status?addresses=${address}`,
          { headers: { 'Authorization': `Bearer ${apiKey}` } }
        );
        const [status] = await response.json();
        if (!status.syncInProgress) {
          console.log('Sync completed!');
          return status;
        }
        if ((Date.now() - start) / 1000 > timeoutSeconds) {
          throw new Error('Sync timeout');
        }
        await new Promise(resolve => setTimeout(resolve, 2000));
      }
    }
    // Trigger sync then wait
    await fetch('https://api.octav.fi/v1/sync-transactions', {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ addresses: [address] })
    });
    await waitForSync(address);
    ```
  </Tab>
</Tabs>

***

## Best Practices

<AccordionGroup>
  <Accordion title="Free to Call" icon="circle-check">
    This endpoint costs 0 credits, so call it freely:

    * Check before expensive operations
    * Monitor sync status
    * Verify data freshness
  </Accordion>

  <Accordion title="Cache Timing" icon="clock">
    Understanding sync times:

    * **Portfolio:** 1-minute cache
    * **Transactions:** 10-minute cache
    * Check `syncInProgress` before triggering new sync
  </Accordion>
</AccordionGroup>

***

## Related Endpoints

<CardGroup cols={2}>
  <Card title="Sync Transactions" icon="arrows-rotate" href="/api/endpoints/sync">
    Trigger manual sync
  </Card>

  <Card title="Credits" icon="credit-card" href="/api/endpoints/credits">
    Check credit balance (also free)
  </Card>
</CardGroup>
