This is a workaround and I hope there is (or will eventually be) an easier way to access point cloud data in the API.

[![enter image description here][1]][1]


In your GN tree add an *Instance on Points* node, plug in a *Mesh Line* set to a *Count* of 1 to get a single vertex at $(0, 0, 0)$.

[![enter image description here][2]][2]

In  theory we should be able to access the vertices' geometry but for now the geometry is not "real". We need to realize the instances with a *Realize Instances* node.

[![enter image description here][3]][3]

Then, we need to access the evaluated mesh, after the GN modifier has been evaluated. For that we can use the [context dependency graph](https://blender.stackexchange.com/questions/146559/how-do-i-get-a-mesh-data-block-with-modifiers-and-shape-keys-applied-in-blender).

```
import bpy
import numpy as np

depsgraph = bpy.context.evaluated_depsgraph_get()
obj = bpy.context.active_object.evaluated_get(depsgraph)

coords = np.zeros(len(obj.data.vertices) * 3, dtype=float)
obj.data.vertices.foreach_get("co", coords)

print(coords)  # This is a flattened array

coords = coords.reshape(len(obj.data.vertices), 3)

print(coords)  # This is a 3D array

```

Result :

[![enter image description here][4]][4]


  [1]: https://i.sstatic.net/JwnUd.png
  [2]: https://i.sstatic.net/FjvIy.png
  [3]: https://i.sstatic.net/PLvBR.png
  [4]: https://i.sstatic.net/2gTGW.png