Build with the API

Team and collaboration API

Comments, notifications and people: read, write and manage them over HTTP.

The calls behind Comments and mentions, Notifications and alerts and People.

Comments

Write a comment

POST/files/{id}/commentsSigned-in people only. API keys can read comments, not write them.
bodystringrequired
The text, 1 to 5,000 characters.
parentIduuidoptional
To reply: the id of a top-level comment on the same file.
mentionedUserIdsuuid[]optional
Colleagues to tag, up to 50. They must be active people who can already see the file.
curl https://gridline-data-analysis-app.duckdns.org/api/files/FILE_ID/comments \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "body": "Why did the amount column turn into text?", "mentionedUserIds": ["USER_ID"] }'

Read the discussion

GET/files/{id}/commentsNeeds files:read. Cursor pagination.

Comments come back oldest first. A reply points at its parent with parentId. Threads are one level deep: you can reply to a comment, but not to a reply.

Edit and delete

  • PATCH /comments/{id}: only the author can edit. Edited comments carry editedAt.
  • DELETE /comments/{id}: the author or an admin can delete.

A deleted comment is not removed from the thread. It becomes an empty tombstone (body is null, deletedAt is set) so replies keep their place and nobody is left wondering what they answered.

Mentions

  • A mention sends the person a notification (comment.mentioned).
  • Editing a comment notifies only the people newly mentioned.
  • A mention never gives anyone access to a file. Only people who could already see it can be tagged.

Live

With a live connection, new, edited and deleted comments appear for everyone watching the file as they happen, along with who is looking at it and who is typing.

Notifications

Read your inbox

GET/notificationsSigned-in people, or an API key with notifications:read.
unreadbooleanoptional
true returns only what you have not read.
limit, cursoroptional
Newest first. See Pagination.
  • GET /notifications/unread-count: just the number, for a badge.
  • POST /notifications/{id}/read: mark one as read.
  • POST /notifications/read-all: mark everything as read.

You only ever see your own notifications. Someone else's is a 404. Read notifications are removed after 90 days; unread ones stay until you read them.

What you can be told

typeWho gets itWhen
report.readyThe uploaderA report finished.
report.failedThe uploaderA report failed for good (not while it is still being retried).
rules.failedThe uploader and every adminA file failed an error rule. It names the rules and the score, never a value.
dataset.schema_changedThe uploader and every adminA new version removed or retyped a column its predecessor had.
file.cleanedThe person who askedA cleaned version was made, with how many cells and rows changed.
cleaning.failedThe person who askedA cleaned version could not be made, with the reason.
dataset.changedThe uploader and every adminA new version differs from the one before it: how many rows were added, removed and changed. Needs the file's key columns to be saved.
file.sensitive_dataThe uploader and every adminA file the whole company can open holds personal or secret data. It names the columns and the kind, never a value.
file.sharedThe people addedA file was shared with you.
comment.mentionedThe person taggedSomeone mentioned you in a comment.
quota.thresholdEvery adminThe company reached 80% or 100% of its file quota.
invoice.finalizedEvery adminAn invoice with something to pay was issued.

Each notification has a type and a payload that holds ids, counts and names. It never holds a cell value.

Quota alerts

When your company reaches 80% of its files for the billing period, and again at 100%, every admin gets an inbox entry and the billing address gets an email. Each fires once per period.

At 100% onThe message says
Free or BasicUploads stop until the period resets, and names the plan that raises the limit.
PremiumUploads keep going; each extra file is billed at the overage price.

It is written with the change

A notification is saved in the same step as the thing that caused it. If an upload is rolled back, it announces nothing. Live delivery to your open dashboard happens only after that step is complete.

People

Invite someone

POST/employeesAdmins only. Needs a session.
emailstringrequired
Where the invitation goes. The person signs in with this address.
fullNamestringrequired
Their name, as colleagues will see it.
curl https://gridline-data-analysis-app.duckdns.org/api/employees \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "email": "tamar@acme.com", "fullName": "Tamar Beridze" }'

They get an email with a link. Following it, they choose a password or join with Google, and they are in.

An invitation holds a seat, but costs nothing yet

Your plan limits how many people you can have, and an invited person counts toward that limit straight away, so two admins cannot invite more people than the plan allows. You are not billed for them until they accept.

PlanEmployees
FreeNone: just the admin
BasicUp to 10
PremiumNo limit

Inviting past the limit answers 409 and says so. Inviting an address that already has a password account with Gridline is refused up front, because one login email is one account.

See your people

GET/employeesAdmins only.

Lists everyone with their role and status (invited, active or disabled). Filter with ?status= and ?role=, and page with ?page= and ?limit=.

Every signed-in person, admin or not, can use GET /companies/me/members to get a names-only list of colleagues: handy for picking who to share a file with, and nothing more.

Invitations that did not arrive

POST/employees/{id}/resend-inviteAdmins only.

A new link is sent, and the old one stops working.

Remove someone

DELETE/employees/{id}Admins only.

Removing a person is a soft disable. At once, in one step:

  • their access stops, and they cannot sign in;
  • their seat is freed, and billing stops counting them;
  • their sessions, sign-in methods and file shares are revoked;
  • their API keys stop working, and any open live connection is closed.

What they uploaded stays with the company, and the audit trail keeps showing what they did.

Bring someone back

POST/employees/{id}/reactivateAdmins only.

Reactivating sends a fresh invitation: their old sign-in methods were deleted when they were removed, so they choose a password (or Google) again. They take a seat again, and the plan limit is checked again.