Update Reference Table

Update a reference table you own.

Passing items replaces them all. There is no merge and no way to add a single
item here; send the full list you want the table to have.

slug is immutable. Sending the value the table already has is a no-op, so a client
can PATCH back an object it just read; sending a well-formed but different value is a
400, because rule SQL names a table by slug and a rename would silently repoint
every rule that mentions the old name. A malformed slug is a 422 from validation
rather than a rename refusal -- the caller sent garbage, not a rename.

fields is read-only and simply ignored, which differs from slug on purpose:
it is derived, so a value sent for it means nothing, whereas a different slug is a
real request that has to be refused out loud. Replacing items re-derives fields;
a metadata-only PATCH leaves it alone. operation / grouping on an item are
likewise accepted and ignored.

visibility follows the same rule as create: public from any organization,
private from Nebulock only. Setting it on a curated table is what publishes or
unpublishes it for every tenant; on your own table it records a label and nothing more.

The items may arrive as a CSV instead. Send the request as multipart/form-data
with an optional payload field holding this JSON object and a file field
holding the CSV. Sending both items and a file is a 400.

items_mode=append adds the request's items to the stored ones instead of replacing
them, whichever way they arrived. A row the table already holds is skipped rather than
stored twice -- a duplicate changes nothing about what a rule matches and only consumes
the entry budget. The default is replace, so a caller that does not pass it sees
exactly the behaviour this route has always had. The size caps are checked against the
resulting table, not the request, so a table cannot be appended past its entry cap.

It may be sent as the ?items_mode= query parameter or as a field in the JSON
payload: a multipart upload already carries a payload part, and splitting one control
into the URL while the rest travels in the body makes the request harder to read than
it needs to be. Sending both is fine when they agree and a 400 when they do not,
because a client that disagrees with itself has not decided.

Every field_name written here is checked against the live events registry, so a
503 means that registry could not be reached rather than anything about your
request.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Path Params
uuid
required

Reference table ID

Query Params
enum

Whether items in this request replace the stored ones or are added to them. May also be sent in the JSON payload. Defaults to replace.


What a write carrying items does to the ones already stored.

replace is the default everywhere, and is what PATCH and the csv-upload route have
always done -- making it the default is what keeps every existing caller's behaviour
unchanged when the flag arrives.

Body Params

PATCH /reference-tables/{id} body. Every field optional.

Passing items is a full replacement of the table's items, not a merge -- there
is no way to add one item through this route, by design.

slug is immutable, but accepted when unchanged. Rule SQL names a table by slug
(ref_table('nebulock_browsers')), so a rename would silently repoint every rule
that mentions the old name. Sending the value the table already has is a no-op, so a
client can PATCH back an object it just read; sending a different one is a 400.

That is deliberately not how fields behaves, and the difference is not arbitrary.
fields is derived, so a value sent for it means nothing and is ignored. slug is
stored and identifying, so a different value is a real request to rename -- refusing it
out loud is the only honest answer, because ignoring it would leave the caller believing
the rename happened.

length between 1 and 256

Immutable. Accepted only when it matches the stored value, so a read object can be PATCHed back unmodified; a well-formed but different value is a 400, and a malformed one is a 422.

enum

Publish state. Same rule as create: 'public' from any organization, 'private' from Nebulock only.


Publish state of a portal-owned table.

Only meaningful for tables owned by the internal portal org; a customer-owned table
carries None, which means "not applicable" rather than "private". A tenant table
is always and only visible to its own org, and there is no state that changes that.

array | null

READ-ONLY. Derived from items and ignored if sent. To change which fields a table covers, send the items you want -- the field list follows.

array | null

Full replacement of the table's items when present

enum

Whether items in this request replace the stored ones or are added to them. Accepted here as well as in the ?items_mode= query parameter, because a multipart upload already carries a JSON payload part and putting one control in the URL and the rest in the body splits the request in two. Sending both is fine when they agree and a 400 when they do not. Defaults to replace.


What a write carrying items does to the ones already stored.

replace is the default everywhere, and is what PATCH and the csv-upload route have
always done -- making it the default is what keeps every existing caller's behaviour
unchanged when the flag arrives.

Headers
string
required

Your API Key ID

string

Your API Key Secret

string
enum
Defaults to application/json

Generated from available request content types

Allowed:
Responses

Language
Credentials
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json