↑↓to move↵to openescto close

Send notifications

Post your deploys, builds and alerts to a channel or DM with one request. No app to create, no OAuth, no scopes: a token and curl.

Quick start

  1. Get a conversation token

    In Fryll, open the channel or DM, open its details and expand Your conversation token. Copy it; it’s shown once. You can also issue one with the API.

  2. Post a message

    Terminal
    curl -d "Deployed api v1.42.1 to production" https://api.fryll.com/in/$FRYLL_TOKEN

    The message lands in the conversation as you, the moment the request comes back with a 201.

A token posts as you. Keep it in a secret store, not in your code, and revoke it as soon as you don’t need it.

Plain text, form or JSON

Send the text as the whole body, as a form field called text, or as JSON. JSON also takes an agent name and a thread_id.

Terminal
curl https://api.fryll.com/in/$FRYLL_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"text": "Build #421 failed on main"}'

Reply in a thread

Every post returns the message it created. Keep its id and send it back as thread_id to follow up underneath, so a deploy’s start and finish stay together.

Terminal
curl https://api.fryll.com/in/$FRYLL_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"text": "Finished in 2m 14s", "thread_id": "'"$MESSAGE_ID"'"}'

From CI

Store the token as a secret, then post from any step. In GitHub Actions:

.github/workflows/deploy.yml
- name: Tell the team
  run: curl -d "Deployed ${{ github.sha }} to production" https://api.fryll.com/in/${{ secrets.FRYLL_TOKEN }}

Show progress in the same message

Add text, loading and info components with an optionalchildren array. Keep the returned message ID, then PATCH/in/:token/messages/:message_id to replace loading with a deployed or error result.

Try the live UI preview and see the complete request examples.

Limits and safety

Each token can post 60 times a minute; past that, you get a 429. A message can be up to 40,000 characters.

Revoke a token from the same place in the app, or with DELETE /conversations/{conversation_id}/token. Issuing a new token also revokes the old one.

Endpoints