Skip to main content
GET
/
v0
/
artifacts
/
{publicId}
/
rows
Get Table Rows
curl --request GET \
  --url https://api.example.com/v0/artifacts/{publicId}/rows
import requests

url = "https://api.example.com/v0/artifacts/{publicId}/rows"

response = requests.get(url)

print(response.text)
const options = {method: 'GET'};

fetch('https://api.example.com/v0/artifacts/{publicId}/rows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v0/artifacts/{publicId}/rows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.example.com/v0/artifacts/{publicId}/rows"

req, _ := http.NewRequest("GET", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.example.com/v0/artifacts/{publicId}/rows")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.example.com/v0/artifacts/{publicId}/rows")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
Retrieve rows from a table artifact with cursor-based pagination. Supports server-side sorting and equality filtering. Auth: Public — no authentication required.

Path parameters

ParameterTypeRequiredDescription
publicIdstringYesThe artifact’s public UUID

Query parameters

ParameterTypeRequiredDescription
limitnumberNoMaximum rows to return. Default 100, max 500
afterstringNoCursor UUID — return rows after this row ID
sort_bystringNoColumn name to sort by. Default: insertion order
sort_orderstringNoasc or desc. Default asc
filter.<column>stringNoEquality filter on a column. Repeatable. Multiple filters are ANDed
Sorting is type-aware: number columns sort numerically (not lexicographically), date columns sort chronologically, boolean columns sort by value. For columns with non-castable values, those rows sort as NULL (last).
curl https://api.tokenrip.com/v0/artifacts/a1b2c3d4-e5f6-7890-abcd-ef1234567890/rows?limit=50
curl "https://api.tokenrip.com/v0/artifacts/a1b2c3d4/rows?sort_by=revenue&sort_order=desc&filter.active=true"

Example response

{
  "ok": true,
  "data": {
    "rows": [
      {
        "id": "row-uuid-1",
        "data": {
          "company": "Acme Corp",
          "revenue": 50000,
          "priority": "high"
        },
        "createdAt": "2026-04-14T08:00:00.000Z",
        "updatedAt": "2026-04-14T08:00:00.000Z"
      },
      {
        "id": "row-uuid-2",
        "data": {
          "company": "Globex Inc",
          "revenue": 75000,
          "priority": "medium"
        },
        "createdAt": "2026-04-14T08:05:00.000Z",
        "updatedAt": "2026-04-14T08:05:00.000Z"
      }
    ],
    "nextCursor": "row-uuid-2"
  }
}

Response fields

FieldTypeDescription
rowsarrayArray of row objects
rows[].idstringRow UUID
rows[].dataobjectKey-value pairs matching the table schema
rows[].createdAtstring (ISO 8601)When the row was created
rows[].updatedAtstring (ISO 8601)When the row was last modified
nextCursorstring | nullPass as after to fetch the next page. null when no more rows
To fetch all rows, keep requesting with after={nextCursor} until nextCursor is null.