List data tables

data.tables.query@1

Lists the tables this key can read, with their fields. Each table's resourceRef is what Read a list and Change items need, and each field's id is how rows name its value.

Call it

Send POST /invocations with the target this operation's catalogue entry gives (GET /catalog): replace YOUR_FEATURE_ID with its featureId. The input is empty.

# A new operationId for each new request; the same one to retry it.
curl https://api.growlocal.site/api/v1/profiles/YOUR_BUSINESS_ID/invocations \
  -H "Authorization: Bearer gl_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "target": {
    "featureId": "YOUR_FEATURE_ID",
    "export": "tables",
    "contractRef": "data.tables.query@1"
  },
  "operationId": "list-tables-1",
  "input": {}
}'
// A new operationId for each new request; the same one to retry it.
const response = await fetch(
  "https://api.growlocal.site/api/v1/profiles/YOUR_BUSINESS_ID/invocations",
  {
    method: "POST",
    headers: {
      Authorization: "Bearer gl_YOUR_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      "target": {
        "featureId": "YOUR_FEATURE_ID",
        "export": "tables",
        "contractRef": "data.tables.query@1"
      },
      "operationId": "list-tables-1",
      "input": {}
    }),
  },
);
const receipt = await response.json();
console.log(response.status, receipt);
import requests

# A new operationId for each new request; the same one to retry it.
response = requests.post(
    "https://api.growlocal.site/api/v1/profiles/YOUR_BUSINESS_ID/invocations",
    headers={"Authorization": "Bearer gl_YOUR_API_KEY"},
    json={
        "target": {
            "featureId": "YOUR_FEATURE_ID",
            "export": "tables",
            "contractRef": "data.tables.query@1",
        },
        "operationId": "list-tables-1",
        "input": {},
    },
    timeout=30,
)
print(response.status_code, response.json())

Parameters

This operation takes no parameters: send "input": {}.

Response

A call that worked answers 200 with an applied receipt; its output holds these fields, among others. GET /catalog/data.tables.query@1 answers the complete shape as JSON Schema.

Name Type Description
tables array of object Every table this key can read, at most 100.
tables[].resourceRef string The table, as resourceRef in Read a list and Change items.
tables[].title string The table's name, as the business sees it.
tables[].origin one of member, owner member for a table someone in the business made, owner for one a feature keeps.
tables[].canCreate boolean Whether a row can be added here with Change items. When it's false, createUnavailable says why.
tables[].canArchive boolean Whether rows here can be archived.
tables[].fields array of object The table's fields, in order.
tables[].fields[].id string The field's id, such as f_email: the key of its value in a row's values. It stays the same when the field is renamed.
tables[].fields[].label string The field's name, as the business sees it.
tables[].fields[].type one of string, number, integer, boolean, object, array The kind of value the field holds.
tables[].fields[].required boolean Whether every row must have a value here.
tables[].fields[].editable boolean Whether this key may write the field with Change items right now.
tables[].fields[].options array of string The choices of a choice field.
tables[].fields[].format string For a text field with a fixed format: date, date-time, time-local, uri or email.
tables[].fields[].query object What Read a list can do with this field: which filters operators it takes, and whether it can sort and search by it.
tables[].archivedAt string or null When the table was archived, or null while it's in use.
tables[].description string What the table is for, if someone said.
{
  "status": "applied",
  "operationId": "list-tables-1",
  "output": {
    "tables": [
      {
        "id": "4f9d2c1e-8a7b-4c3d-9e2f-1a2b3c4d5e6f",
        "featureId": "juniper-cakes.data",
        "collectionId": "juniper-cakes.quote-requests",
        "resourceRef": "juniper-cakes.quote-requests",
        "title": "Quote requests",
        "schemaRef": "…",
        "origin": "member",
        "emitsRowChanges": true,
        "fields": [
          {
            "id": "f_name",
            "label": "Name",
            "type": "string",
            "required": false,
            "editable": true,
            "editing": "ordinary",
            "query": {
              "filters": [
                "eq",
                "in",
                "not-in",
                "contains",
                "empty",
                "present"
              ],
              "sort": true,
              "search": true
            },
            "semanticRole": "record-title"
          },
          {
            "id": "f_email",
            "label": "Email",
            "type": "string",
            "required": false,
            "editable": true,
            "editing": "ordinary",
            "query": {
              "filters": [
                "eq",
                "in",
                "not-in",
                "contains",
                "empty",
                "present"
              ],
              "sort": true,
              "search": true
            },
            "format": "email"
          }
        ],
        "canCreate": true,
        "createUnavailable": null,
        "canArchive": true,
        "canDeleteRows": true,
        "canConfigure": true,
        "canConfigureTable": true,
        "canArchiveTable": true,
        "canDeleteTable": true,
        "archivedAt": null,
        "revision": 1,
        "description": "",
        "color": null,
        "opensAs": "table",
        "columnPolicy": {
          "canAddColumns": true,
          "permittedFamilies": [
            "text",
            "long_text",
            "email",
            "date"
          ],
          "fields": [
            {
              "id": "f_name",
              "canRename": true,
              "canRemove": false,
              "canAddOptions": false,
              "states": "open"
            },
            {
              "id": "f_email",
              "canRename": true,
              "canRemove": true,
              "canAddOptions": false,
              "states": "open"
            }
          ]
        },
        "process": null,
        "views": [],
        "recordLayouts": []
      }
    ]
  }
}

Errors

It reads and changes nothing. Besides the answers every request can get (Errors), its receipt can say:

Status HTTP What it means
rejected 400, or 403 when it's a matter of access Not done. diagnostics says why: each has a code, a path into what you sent and a message.