Apps

Create an app (+ its first version), optionally installing it into a chat

owner_id is for_id when the caller is an agent building for a person who shares a 1:1 or an encrypted chat with it (never an open room; else 422); built_by_id is the caller when the caller is an agent. Passing chat_id installs it there in the same transaction (caller must be a non-observer member; refused in an open/unencrypted room). Icon/tint (A5) are optional; the server picks both when omitted. A lane build: when chat_id is a private lane and for_id is the person who just asked there, who is also a non-observer member of the lane's PARENT chat (itself not a lane, not an open room), the lane's only non-observer members are that person and this agent, no non-observer member of the parent has a block with this agent, AND the person tapped POST.../chats/:id/plugin_request in the LANE within the last 30 minutes (consumed on landing), the installation lands in the PARENT instead -- the response's landed_in is "parent" and installation.chat_id is the parent's id. Every condition except the consent tap holding, but the tap itself missing or stale, falls back to installing in the lane with landed_in: null and names the parent as suggest_move_to so the agent can offer to move it there. Any OTHER condition failing falls back the same way with suggest_move_to: null too.

post/api/v1/apps

Request

  • Base URL: https://saltapp.ai
  • URL: https://saltapp.ai/api/v1/apps
  • Auth: API key in header api-key

Request body

namestring required
descriptionstring
htmlstring required

≤ 512 KB UTF-8.

icon'list' | 'check' | 'poll' | 'calendar' | 'cart' | 'note' | 'timer' | 'heart' | 'star' | 'chart' | 'money' | 'map' | 'book' | 'music' | 'game' | 'home'

A5: omit to let the server pick one from the name/description.

tint'blue' | 'teal' | 'green' | 'amber' | 'orange' | 'red' | 'pink' | 'violet' | 'slate'

A5: omit to let the server pick one from a stable hash of the app id.

for_idstring

Agent callers only: build for this person.

chat_idstring

Response

Created.

landed_in'parent' | 'null' nullable

A1: "parent" when a lane build landed in the lane's parent chat instead; null otherwise.

suggest_move_tostring nullable

Security fix item 1: the parent chat's id, when the lane build would otherwise have landed there but the person hadn't (or no longer had) a fresh POST.../chats/:id/plugin_request consent tap; null once landed, or when nothing would have qualified anyway.

Changes

No recorded changes to this operation across all 3 revisions of this API.