diff --git a/Dockerfile b/Dockerfile index 9f13b46..10bdf53 100644 --- a/Dockerfile +++ b/Dockerfile @@ -92,10 +92,21 @@ COPY src/main.go /tmp/signal-cli-rest-api-src/ COPY src/go.mod /tmp/signal-cli-rest-api-src/ COPY src/go.sum /tmp/signal-cli-rest-api-src/ COPY src/plugin_loader.go /tmp/signal-cli-rest-api-src/ +COPY src/docs/add_v1_receive_schemas.go /tmp/signal-cli-rest-api-src/docs/add_v1_receive_schemas.go + +RUN ls -la /tmp/signal-cli-rest-api-src + +# build the docs +RUN cd /tmp/signal-cli-rest-api-src && ${GOPATH}/bin/swag init --requiredByDefault --outputTypes "go,json" + +# manually add the json schemas for the receive V1 endpoint to the docs +RUN cd /tmp/signal-cli-rest-api-src/docs \ + && wget https://github.com/Gara-Dorta/signal-cli/releases/download/v${SIGNAL_CLI_VERSION}/signal-cli-${SIGNAL_CLI_VERSION}-json-schemas.tar.gz \ + && mkdir signal-cli-schemas \ + && tar xf signal-cli-${SIGNAL_CLI_VERSION}-json-schemas.tar.gz -C signal-cli-schemas \ + && go run add_v1_receive_schemas.go signal-cli-schemas # build signal-cli-rest-api -RUN ls -la /tmp/signal-cli-rest-api-src -RUN cd /tmp/signal-cli-rest-api-src && ${GOPATH}/bin/swag init --requiredByDefault RUN cd /tmp/signal-cli-rest-api-src && go build -o signal-cli-rest-api main.go RUN cd /tmp/signal-cli-rest-api-src && go test ./client -v && go test ./utils -v diff --git a/src/docs/README.md b/src/docs/README.md index 9810225..5b162a4 100644 --- a/src/docs/README.md +++ b/src/docs/README.md @@ -4,44 +4,64 @@ These files are generated using the [swaggo/swag](https://github.com/swaggo/swag There are two steps, first generating the docs and then running the web server. -## Generating the docs +## With docker compose (recommended) -Regenerate the files with your local source code changes. +1. Build the docs + ```bash + docker compose build + ``` +2. Serve the docs + ```bash + docker compose up + ``` +3. Go to http://127.0.0.1:8080/swagger/index.html to view the docs + * If you get a Network error, replace the IP for the docker internal IP in the error, e.g: http://172.18.0.2:8080/swagger/index.html + +## Locally + +Install [go](https://go.dev/). + +### Generating the docs 1. Set the current working dir to `src` ```bash cd src ``` 1. Run swag to generate the docs - * Option 1, via docker + * Option 1, via go ```bash - docker run --rm -v $(pwd):/code ghcr.io/swaggo/swag:latest init --requiredByDefault + go run github.com/swaggo/swag/cmd/swag@v1.16.6 init --requiredByDefault --outputTypes "go,json" ``` - * Option 2, install swag and run the command line tool + * Option 2, directly with swag ```bash - swag init --requiredByDefault + swag init --requiredByDefault --outputTypes "go,json" + ``` + * Option 3, swag via docker + ```bash + docker run --rm -v $(pwd):/code ghcr.io/swaggo/swag:latest init --requiredByDefault --outputTypes "go,json" + ``` +1. Set the current working dir to `src/docs` + ```bash + cd docs + ``` +1. Add the signal-cli receive V1 schemas + * Download the `signal-cli-x.y.z-json-schemas.tar.gz` schema files from https://github.com/Gara-Dorta/signal-cli/releases + * Extract the files + * Run the script to add the schemas + ```bash + go run add_v1_receive_schemas.go ./path-to-signal-cli-json-schema-folder ``` -## Run the web server +### Run the web server Run the web server to visualize the generated docs. +1. Navigate to the `src` folder + ```bash + cd src + ``` 1. Run the main script - * Option 1, via docker, run the command at the root of the repository - ```bash - docker compose up - ``` - * Option 2, install go and run the command line tool - ```bash - cd src - ``` - ```bash - go run main.go - ``` - - -## Navigate to the docs - -The docs are served at: http://127.0.0.1:8080/swagger/index.html - -When serving with docker, if you get a Network error, replace the IP for the docker internal IP in the error, e.g: http://172.18.0.2:8080/swagger/index.html \ No newline at end of file + ```bash + go run main.go + ``` +1. Go to http://127.0.0.1:8080/swagger/index.html diff --git a/src/docs/add_v1_receive_schemas.go b/src/docs/add_v1_receive_schemas.go new file mode 100644 index 0000000..5d9729b --- /dev/null +++ b/src/docs/add_v1_receive_schemas.go @@ -0,0 +1,409 @@ +//go:build ignore + +package main + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + + _ "github.com/bbernhard/signal-cli-rest-api/docs" +) + +const ( + goDocsPath = "docs.go" + jsonDocsPath = "swagger.json" + openMarker = "const docTemplate = `" + closeMarker = "`\n\n// SwaggerInfo" + definitionsKey = `"definitions": {` + receivePrefix = "receive." + receivePathKey = `"/v1/receive/{number}":` + receiveWrapper = "data.Message" +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "usage: go run update_receive_docs.go \n") + os.Exit(1) + } + receiveDir := os.Args[1] + + if err := run(receiveDir); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } +} + +func run(receiveDir string) error { + definitions := make(map[string]interface{}) + + titleByFile, err := addReceiveSchemas(definitions, receiveDir) + if err != nil { + return err + } + + if err := updateReceiveSchemaRefs(definitions, titleByFile); err != nil { + return err + } + + addEnvelopeWrapperDefinition(definitions) + + managedDefinitions, err := renderManagedDefinitions(definitions) + if err != nil { + return err + } + + if err := updateDocsGo(managedDefinitions); err != nil { + return err + } + + if err := updateSwaggerJSON(managedDefinitions); err != nil { + return err + } + + fmt.Printf("updated %s\n", goDocsPath) + fmt.Printf("updated %s\n", jsonDocsPath) + return nil +} + +func updateDocsGo(managedDefinitions string) error { + content, err := os.ReadFile(goDocsPath) + if err != nil { + return fmt.Errorf("read %s: %w", goDocsPath, err) + } + + template, err := extractDocTemplate(string(content)) + if err != nil { + return err + } + + updatedTemplate, err := applyReceiveSchemaUpdates(template, managedDefinitions) + if err != nil { + return err + } + + updated := strings.Replace(string(content), template, updatedTemplate, 1) + if err := os.WriteFile(goDocsPath, []byte(updated), 0644); err != nil { + return fmt.Errorf("write %s: %w", goDocsPath, err) + } + + return nil +} + +func updateSwaggerJSON(managedDefinitions string) error { + content, err := os.ReadFile(jsonDocsPath) + if err != nil { + return fmt.Errorf("read %s: %w", jsonDocsPath, err) + } + + updated, err := applyReceiveSchemaUpdates(string(content), managedDefinitions) + if err != nil { + return err + } + + if err := os.WriteFile(jsonDocsPath, []byte(updated), 0644); err != nil { + return fmt.Errorf("write %s: %w", jsonDocsPath, err) + } + + return nil +} + +func applyReceiveSchemaUpdates(content string, managedDefinitions string) (string, error) { + updated, err := appendDefinitionsEntries(content, managedDefinitions) + if err != nil { + return "", err + } + + updated, err = replaceReceiveResponseSchema(updated) + if err != nil { + return "", err + } + + return updated, nil +} + +func extractDocTemplate(content string) (string, error) { + start := strings.Index(content, openMarker) + if start == -1 { + return "", fmt.Errorf("could not find docTemplate start in %s", goDocsPath) + } + + start += len(openMarker) + endOffset := strings.Index(content[start:], closeMarker) + if endOffset == -1 { + return "", fmt.Errorf("could not find docTemplate end in %s", goDocsPath) + } + + return content[start : start+endOffset], nil +} + +func definitionsBounds(template string) (int, int, error) { + definitionsIndex := strings.Index(template, definitionsKey) + if definitionsIndex == -1 { + return -1, -1, fmt.Errorf("could not find definitions block in docTemplate") + } + + braceIndex := definitionsIndex + strings.Index(definitionsKey, "{") + closingBraceIndex, err := findMatchingBrace(template, braceIndex) + if err != nil { + return -1, -1, err + } + + return braceIndex, closingBraceIndex, nil +} + +func appendDefinitionsEntries(template string, entries string) (string, error) { + braceIndex, closingBraceIndex, err := definitionsBounds(template) + if err != nil { + return "", err + } + + definitionsBlock := template[braceIndex : closingBraceIndex+1] + if strings.Contains(definitionsBlock, `"`+receiveWrapper+`"`) || strings.Contains(definitionsBlock, `"`+receivePrefix) { + return "", fmt.Errorf("definitions already contain receive entries; run swag init first") + } + + inner := strings.TrimSpace(template[braceIndex+1 : closingBraceIndex]) + + if inner == "" { + return template[:braceIndex+1] + "\n" + entries + "\n" + template[closingBraceIndex:], nil + } + + closingLine := "\n }" + insertIndex := strings.LastIndex(template[:closingBraceIndex+1], closingLine) + if insertIndex == -1 { + return "", fmt.Errorf("could not determine definitions closing line") + } + + return template[:insertIndex] + ",\n" + entries + template[insertIndex:], nil +} + +func addReceiveSchemas(definitions map[string]interface{}, receiveDir string) (map[string]string, error) { + entries, err := os.ReadDir(receiveDir) + if err != nil { + return nil, fmt.Errorf("read %s: %w", receiveDir, err) + } + + files := make([]string, 0) + for _, entry := range entries { + if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".schema.json") { + continue + } + files = append(files, entry.Name()) + } + sort.Strings(files) + titleByFile := make(map[string]string, len(files)) + + for _, name := range files { + fullPath := filepath.Join(receiveDir, name) + data, err := os.ReadFile(fullPath) + if err != nil { + return nil, fmt.Errorf("read schema file %s: %w", fullPath, err) + } + + var schemaObj map[string]interface{} + if err := json.Unmarshal(data, &schemaObj); err != nil { + return nil, fmt.Errorf("parse schema file %s: %w", fullPath, err) + } + + title, ok := schemaObj["title"].(string) + if !ok || strings.TrimSpace(title) == "" { + return nil, fmt.Errorf("schema file %s is missing title", fullPath) + } + + titleByFile[name] = title + definitions[receivePrefix+title] = removeSchemaKeysRecursive(schemaObj, "") + } + + return titleByFile, nil +} + +func removeSchemaKeysRecursive(value interface{}, parentKey string) interface{} { + switch typed := value.(type) { + case map[string]interface{}: + updated := make(map[string]interface{}, len(typed)) + for key, item := range typed { + if key == "$schema" || key == "$id" { + continue + } + if key == "title" && parentKey != "properties" { + continue + } + updated[key] = removeSchemaKeysRecursive(item, key) + } + return updated + case []interface{}: + updated := make([]interface{}, len(typed)) + for idx, item := range typed { + updated[idx] = removeSchemaKeysRecursive(item, parentKey) + } + return updated + default: + return value + } +} + +func updateReceiveSchemaRefs(definitions map[string]interface{}, titleByFile map[string]string) error { + for key, value := range definitions { + if !strings.HasPrefix(key, receivePrefix) { + continue + } + definitions[key] = rewriteSchemaRefs(value, titleByFile) + } + + return nil +} + +func rewriteSchemaRefs(value interface{}, titleByFile map[string]string) interface{} { + switch typed := value.(type) { + case map[string]interface{}: + updated := make(map[string]interface{}, len(typed)) + for k, v := range typed { + if k == "$ref" { + if refValue, ok := v.(string); ok { + if strings.HasSuffix(refValue, ".schema.json") { + base := filepath.Base(refValue) + if title, exists := titleByFile[base]; exists { + updated[k] = "#/definitions/" + receivePrefix + title + continue + } + } + } + } + + updated[k] = rewriteSchemaRefs(v, titleByFile) + } + return updated + case []interface{}: + updated := make([]interface{}, len(typed)) + for idx, item := range typed { + updated[idx] = rewriteSchemaRefs(item, titleByFile) + } + return updated + default: + return value + } +} + +func addEnvelopeWrapperDefinition(definitions map[string]interface{}) { + definitions[receiveWrapper] = map[string]interface{}{ + "type": "object", + "properties": map[string]interface{}{ + "account": map[string]interface{}{"type": "string"}, + "envelope": map[string]interface{}{"$ref": "#/definitions/receive.MessageEnvelope"}, + }, + "required": []interface{}{"account", "envelope"}, + } +} + +func renderManagedDefinitions(definitions map[string]interface{}) (string, error) { + keys := make([]string, 0, len(definitions)) + for key := range definitions { + keys = append(keys, key) + } + sort.Strings(keys) + + parts := make([]string, 0, len(keys)) + for _, key := range keys { + raw, err := json.MarshalIndent(definitions[key], "", " ") + if err != nil { + return "", fmt.Errorf("marshal definition %s: %w", key, err) + } + + lines := strings.Split(string(raw), "\n") + for idx := range lines { + lines[idx] = " " + lines[idx] + } + + entry := " " + strconv.Quote(key) + ": " + strings.TrimPrefix(lines[0], " ") + if len(lines) > 1 { + entry += "\n" + strings.Join(lines[1:], "\n") + } + + parts = append(parts, entry) + } + + return strings.Join(parts, ",\n"), nil +} + +func replaceReceiveResponseSchema(template string) (string, error) { + pathIndex := strings.Index(template, receivePathKey) + if pathIndex == -1 { + return "", fmt.Errorf("could not find receive path block; run swag init first") + } + braceOffset := strings.Index(template[pathIndex+len(receivePathKey):], "{") + if braceOffset == -1 { + return "", fmt.Errorf("could not find opening brace for receive path block") + } + pathOpenBrace := pathIndex + len(receivePathKey) + braceOffset + pathCloseBrace, err := findMatchingBrace(template, pathOpenBrace) + if err != nil { + return "", err + } + + pathBlock := template[pathOpenBrace : pathCloseBrace+1] + + oldSchema := `"schema": { + "type": "array", + "items": { + "type": "string" + } + }` + + newSchema := `"schema": { + "$ref": "#/definitions/data.Message" + }` + + updatedPathBlock := strings.Replace(pathBlock, oldSchema, newSchema, 1) + if updatedPathBlock == pathBlock { + return "", fmt.Errorf("could not replace /v1/receive schema; ensure generated docs are freshly generated by swag") + } + + return template[:pathOpenBrace] + updatedPathBlock + template[pathCloseBrace+1:], nil +} + +func findMatchingBrace(input string, openBraceIndex int) (int, error) { + depth := 0 + inString := false + escaped := false + + for index := openBraceIndex; index < len(input); index++ { + char := input[index] + + if inString { + if escaped { + escaped = false + continue + } + if char == '\\' { + escaped = true + continue + } + if char == '"' { + inString = false + } + continue + } + + if char == '"' { + inString = true + continue + } + + switch char { + case '{': + depth++ + case '}': + depth-- + if depth == 0 { + return index, nil + } + } + } + + return -1, fmt.Errorf("could not find matching brace") +} diff --git a/src/docs/docs.go b/src/docs/docs.go index d4e175d..36fb923 100644 --- a/src/docs/docs.go +++ b/src/docs/docs.go @@ -2190,10 +2190,7 @@ const docTemplate = `{ "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/data.Message" } }, "400": { @@ -2790,6 +2787,14 @@ const docTemplate = `{ }, "api.CreateGroupRequest": { "type": "object", + "required": [ + "description", + "expiration_time", + "group_link", + "members", + "name", + "permissions" + ], "properties": { "description": { "type": "string" @@ -2833,6 +2838,7 @@ const docTemplate = `{ "api.CreatePollRequest": { "type": "object", "required": [ + "allow_multiple_selections", "answers", "question", "recipient" @@ -2877,6 +2883,9 @@ const docTemplate = `{ }, "api.DeleteLocalAccountDataRequest": { "type": "object", + "required": [ + "ignore_registered" + ], "properties": { "ignore_registered": { "type": "boolean", @@ -2920,6 +2929,7 @@ const docTemplate = `{ "api.PinMessageInGroupRequest": { "type": "object", "required": [ + "duration", "target_author", "timestamp" ], @@ -2977,6 +2987,10 @@ const docTemplate = `{ }, "api.RegisterNumberRequest": { "type": "object", + "required": [ + "captcha", + "use_voice" + ], "properties": { "captcha": { "type": "string" @@ -3015,6 +3029,7 @@ const docTemplate = `{ "api.RemoveReactionRequest": { "type": "object", "required": [ + "reaction", "recipient", "target_author", "timestamp" @@ -3053,6 +3068,7 @@ const docTemplate = `{ "type": "object", "required": [ "account", + "challenge_tokens", "error" ], "properties": { @@ -3084,6 +3100,8 @@ const docTemplate = `{ "api.SendMessageV1": { "type": "object", "required": [ + "base64_attachment", + "is_group", "message", "number", "recipients" @@ -3113,9 +3131,21 @@ const docTemplate = `{ "api.SendMessageV2": { "type": "object", "required": [ + "base64_attachments", + "edit_timestamp", + "link_preview", + "mentions", "message", + "notify_self", "number", - "recipients" + "quote_author", + "quote_mentions", + "quote_message", + "quote_timestamp", + "recipients", + "sticker", + "text_mode", + "view_once" ], "properties": { "base64_attachments": { @@ -3234,6 +3264,10 @@ const docTemplate = `{ }, "api.TrustIdentityRequest": { "type": "object", + "required": [ + "trust_all_known_keys", + "verified_safety_number" + ], "properties": { "trust_all_known_keys": { "type": "boolean", @@ -3294,6 +3328,10 @@ const docTemplate = `{ }, "api.UnregisterNumberRequest": { "type": "object", + "required": [ + "delete_account", + "delete_local_data" + ], "properties": { "delete_account": { "type": "boolean", @@ -3307,6 +3345,10 @@ const docTemplate = `{ }, "api.UpdateAccountSettingsRequest": { "type": "object", + "required": [ + "discoverable_by_number", + "share_number" + ], "properties": { "discoverable_by_number": { "type": "boolean" @@ -3319,6 +3361,8 @@ const docTemplate = `{ "api.UpdateContactRequest": { "type": "object", "required": [ + "expiration_in_seconds", + "name", "recipient" ], "properties": { @@ -3335,6 +3379,14 @@ const docTemplate = `{ }, "api.UpdateGroupRequest": { "type": "object", + "required": [ + "base64_avatar", + "description", + "expiration_time", + "group_link", + "name", + "permissions" + ], "properties": { "base64_avatar": { "type": "string" @@ -3364,6 +3416,8 @@ const docTemplate = `{ "api.UpdateProfileRequest": { "type": "object", "required": [ + "about", + "base64_avatar", "name" ], "properties": { @@ -3380,6 +3434,9 @@ const docTemplate = `{ }, "api.VerifyNumberSettings": { "type": "object", + "required": [ + "pin" + ], "properties": { "pin": { "type": "string" @@ -3786,6 +3843,1284 @@ const docTemplate = `{ "type": "integer" } } + }, + "data.Message": { + "properties": { + "account": { + "type": "string" + }, + "envelope": { + "$ref": "#/definitions/receive.MessageEnvelope" + } + }, + "required": [ + "account", + "envelope" + ], + "type": "object" + }, + "receive.AdminDelete": { + "properties": { + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" + }, + "receive.Attachment": { + "properties": { + "caption": { + "type": "string" + }, + "contentType": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "uploadTimestamp": { + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "receive.AttachmentData": { + "properties": { + "data": { + "type": "string" + } + }, + "type": "object" + }, + "receive.CallMessage": { + "properties": { + "answerMessage": { + "properties": { + "id": { + "type": "integer" + }, + "opaque": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "busyMessage": { + "properties": { + "id": { + "type": "integer" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "hangupMessage": { + "properties": { + "deviceId": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id", + "deviceId" + ], + "type": "object" + }, + "iceUpdateMessages": { + "items": { + "properties": { + "id": { + "type": "integer" + }, + "opaque": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "offerMessage": { + "properties": { + "id": { + "type": "integer" + }, + "opaque": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + }, + "type": "object" + }, + "receive.Contact": { + "properties": { + "color": { + "type": "string" + }, + "familyName": { + "type": "string" + }, + "givenName": { + "type": "string" + }, + "internal": { + "$ref": "#/definitions/receive.Internal" + }, + "isArchived": { + "type": "boolean" + }, + "isBlocked": { + "type": "boolean" + }, + "isHidden": { + "type": "boolean" + }, + "messageExpirationTime": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "nickFamilyName": { + "type": "string" + }, + "nickGivenName": { + "type": "string" + }, + "nickName": { + "type": "string" + }, + "note": { + "type": "string" + }, + "number": { + "type": "string" + }, + "profile": { + "$ref": "#/definitions/receive.Profile" + }, + "profileSharing": { + "type": "boolean" + }, + "unregistered": { + "type": "boolean" + }, + "username": { + "type": "string" + }, + "uuid": { + "type": "string" + } + }, + "required": [ + "isArchived", + "isBlocked", + "isHidden", + "messageExpirationTime", + "profileSharing", + "unregistered" + ], + "type": "object" + }, + "receive.ContactAddress": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "label": { + "type": "string" + }, + "neighborhood": { + "type": "string" + }, + "pobox": { + "type": "string" + }, + "postcode": { + "type": "string" + }, + "region": { + "type": "string" + }, + "street": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "receive.ContactAvatar": { + "properties": { + "attachment": { + "$ref": "#/definitions/receive.Attachment" + }, + "isProfile": { + "type": "boolean" + } + }, + "required": [ + "isProfile" + ], + "type": "object" + }, + "receive.ContactEmail": { + "properties": { + "label": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "receive.ContactName": { + "properties": { + "family": { + "type": "string" + }, + "given": { + "type": "string" + }, + "middle": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "suffix": { + "type": "string" + } + }, + "type": "object" + }, + "receive.ContactPhone": { + "properties": { + "label": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "receive.DataMessage": { + "properties": { + "adminDelete": { + "$ref": "#/definitions/receive.AdminDelete" + }, + "attachments": { + "items": { + "$ref": "#/definitions/receive.Attachment" + }, + "type": "array" + }, + "contacts": { + "items": { + "$ref": "#/definitions/receive.SharedContact" + }, + "type": "array" + }, + "expiresInSeconds": { + "type": "integer" + }, + "groupInfo": { + "$ref": "#/definitions/receive.GroupInfo" + }, + "isExpirationUpdate": { + "type": "boolean" + }, + "mentions": { + "items": { + "$ref": "#/definitions/receive.Mention" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "payment": { + "$ref": "#/definitions/receive.Payment" + }, + "pinMessage": { + "$ref": "#/definitions/receive.PinMessage" + }, + "pollCreate": { + "$ref": "#/definitions/receive.PollCreate" + }, + "pollTerminate": { + "$ref": "#/definitions/receive.PollTerminate" + }, + "pollVote": { + "$ref": "#/definitions/receive.PollVote" + }, + "previews": { + "items": { + "$ref": "#/definitions/receive.Preview" + }, + "type": "array" + }, + "quote": { + "$ref": "#/definitions/receive.Quote" + }, + "reaction": { + "$ref": "#/definitions/receive.Reaction" + }, + "remoteDelete": { + "$ref": "#/definitions/receive.RemoteDelete" + }, + "sticker": { + "$ref": "#/definitions/receive.Sticker" + }, + "storyContext": { + "$ref": "#/definitions/receive.StoryContext" + }, + "textStyles": { + "items": { + "$ref": "#/definitions/receive.TextStyle" + }, + "type": "array" + }, + "timestamp": { + "type": "integer" + }, + "unpinMessage": { + "$ref": "#/definitions/receive.UnpinMessage" + }, + "viewOnce": { + "type": "boolean" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.EditMessage": { + "properties": { + "dataMessage": { + "$ref": "#/definitions/receive.DataMessage" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" + }, + "receive.Error": { + "properties": { + "message": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "receive.GroupInfo": { + "properties": { + "groupId": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "revision": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "required": [ + "revision" + ], + "type": "object" + }, + "receive.Internal": { + "properties": { + "capabilities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "discoverableByPhonenumber": { + "type": "boolean" + }, + "sharesPhoneNumber": { + "type": "boolean" + }, + "unidentifiedAccessMode": { + "type": "string" + } + }, + "type": "object" + }, + "receive.Mention": { + "properties": { + "length": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "number": { + "type": "string" + }, + "start": { + "type": "integer" + }, + "uuid": { + "type": "string" + } + }, + "required": [ + "start", + "length" + ], + "type": "object" + }, + "receive.MessageEnvelope": { + "properties": { + "callMessage": { + "$ref": "#/definitions/receive.CallMessage" + }, + "dataMessage": { + "$ref": "#/definitions/receive.DataMessage" + }, + "editMessage": { + "$ref": "#/definitions/receive.EditMessage" + }, + "receiptMessage": { + "$ref": "#/definitions/receive.ReceiptMessage" + }, + "serverDeliveredTimestamp": { + "type": "integer" + }, + "serverReceivedTimestamp": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "sourceDevice": { + "type": "integer" + }, + "sourceName": { + "type": "string" + }, + "sourceNumber": { + "type": "string" + }, + "sourceUuid": { + "type": "string" + }, + "storyMessage": { + "$ref": "#/definitions/receive.StoryMessage" + }, + "syncMessage": { + "$ref": "#/definitions/receive.SyncMessage" + }, + "timestamp": { + "type": "integer" + }, + "typingMessage": { + "$ref": "#/definitions/receive.TypingMessage" + } + }, + "required": [ + "timestamp", + "serverReceivedTimestamp", + "serverDeliveredTimestamp" + ], + "type": "object" + }, + "receive.Payment": { + "properties": { + "note": { + "type": "string" + }, + "receipt": { + "type": "string" + } + }, + "required": [ + "receipt" + ], + "type": "object" + }, + "receive.PinMessage": { + "properties": { + "pinDurationSeconds": { + "type": "integer" + }, + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp", + "pinDurationSeconds" + ], + "type": "object" + }, + "receive.PollCreate": { + "properties": { + "allowMultiple": { + "type": "boolean" + }, + "options": { + "items": { + "type": "string" + }, + "type": "array" + }, + "question": { + "type": "string" + } + }, + "required": [ + "allowMultiple" + ], + "type": "object" + }, + "receive.PollTerminate": { + "properties": { + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" + }, + "receive.PollVote": { + "properties": { + "author": { + "type": "string" + }, + "authorNumber": { + "type": "string" + }, + "authorUuid": { + "type": "string" + }, + "optionIndexes": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "targetSentTimestamp": { + "type": "integer" + }, + "voteCount": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp", + "voteCount" + ], + "type": "object" + }, + "receive.Preview": { + "properties": { + "description": { + "type": "string" + }, + "image": { + "$ref": "#/definitions/receive.Attachment" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "receive.Profile": { + "properties": { + "about": { + "type": "string" + }, + "aboutEmoji": { + "type": "string" + }, + "familyName": { + "type": "string" + }, + "givenName": { + "type": "string" + }, + "hasAvatar": { + "type": "boolean" + }, + "lastUpdateTimestamp": { + "type": "integer" + }, + "mobileCoinAddress": { + "type": "string" + } + }, + "required": [ + "lastUpdateTimestamp", + "hasAvatar" + ], + "type": "object" + }, + "receive.Quote": { + "properties": { + "attachments": { + "items": { + "$ref": "#/definitions/receive.QuotedAttachment" + }, + "type": "array" + }, + "author": { + "type": "string" + }, + "authorNumber": { + "type": "string" + }, + "authorUuid": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "mentions": { + "items": { + "$ref": "#/definitions/receive.Mention" + }, + "type": "array" + }, + "text": { + "type": "string" + }, + "textStyles": { + "items": { + "$ref": "#/definitions/receive.TextStyle" + }, + "type": "array" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "receive.QuotedAttachment": { + "properties": { + "contentType": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "thumbnail": { + "$ref": "#/definitions/receive.Attachment" + } + }, + "type": "object" + }, + "receive.Reaction": { + "properties": { + "emoji": { + "type": "string" + }, + "isRemove": { + "type": "boolean" + }, + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp", + "isRemove" + ], + "type": "object" + }, + "receive.ReceiptMessage": { + "properties": { + "isDelivery": { + "type": "boolean" + }, + "isRead": { + "type": "boolean" + }, + "isViewed": { + "type": "boolean" + }, + "timestamps": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "when": { + "type": "integer" + } + }, + "required": [ + "when", + "isDelivery", + "isRead", + "isViewed" + ], + "type": "object" + }, + "receive.RecipientAddress": { + "properties": { + "number": { + "type": "string" + }, + "username": { + "type": "string" + }, + "uuid": { + "type": "string" + } + }, + "type": "object" + }, + "receive.RemoteDelete": { + "properties": { + "timestamp": { + "type": "integer" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.SendMessageResult": { + "properties": { + "groupId": { + "type": "string" + }, + "recipientAddress": { + "$ref": "#/definitions/receive.RecipientAddress" + }, + "retryAfterSeconds": { + "type": "integer" + }, + "token": { + "type": "string" + }, + "type": { + "enum": [ + "SUCCESS", + "NETWORK_FAILURE", + "UNREGISTERED_FAILURE", + "IDENTITY_FAILURE", + "RATE_LIMIT_FAILURE", + "INVALID_PRE_KEY_FAILURE" + ], + "type": "string" + } + }, + "type": "object" + }, + "receive.SharedContact": { + "properties": { + "address": { + "items": { + "$ref": "#/definitions/receive.ContactAddress" + }, + "type": "array" + }, + "avatar": { + "$ref": "#/definitions/receive.ContactAvatar" + }, + "email": { + "items": { + "$ref": "#/definitions/receive.ContactEmail" + }, + "type": "array" + }, + "name": { + "$ref": "#/definitions/receive.ContactName" + }, + "organization": { + "type": "string" + }, + "phone": { + "items": { + "$ref": "#/definitions/receive.ContactPhone" + }, + "type": "array" + } + }, + "type": "object" + }, + "receive.Sticker": { + "properties": { + "packId": { + "type": "string" + }, + "stickerId": { + "type": "integer" + } + }, + "required": [ + "stickerId" + ], + "type": "object" + }, + "receive.StoryContext": { + "properties": { + "authorNumber": { + "type": "string" + }, + "authorUuid": { + "type": "string" + }, + "sentTimestamp": { + "type": "integer" + } + }, + "required": [ + "sentTimestamp" + ], + "type": "object" + }, + "receive.StoryMessage": { + "properties": { + "allowsReplies": { + "type": "boolean" + }, + "fileAttachment": { + "$ref": "#/definitions/receive.Attachment" + }, + "groupId": { + "type": "string" + }, + "textAttachment": { + "properties": { + "backgroundColor": { + "type": "string" + }, + "backgroundGradient": { + "properties": { + "angle": { + "type": "integer" + }, + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "endColor": { + "type": "string" + }, + "positions": { + "items": { + "type": "number" + }, + "type": "array" + }, + "startColor": { + "type": "string" + } + }, + "type": "object" + }, + "preview": { + "$ref": "#/definitions/receive.Preview" + }, + "style": { + "type": "string" + }, + "text": { + "type": "string" + }, + "textBackgroundColor": { + "type": "string" + }, + "textForegroundColor": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "allowsReplies" + ], + "type": "object" + }, + "receive.SyncDataMessage": { + "properties": { + "adminDelete": { + "$ref": "#/definitions/receive.AdminDelete" + }, + "attachments": { + "items": { + "$ref": "#/definitions/receive.Attachment" + }, + "type": "array" + }, + "contacts": { + "items": { + "$ref": "#/definitions/receive.SharedContact" + }, + "type": "array" + }, + "destination": { + "type": "string" + }, + "destinationNumber": { + "type": "string" + }, + "destinationUuid": { + "type": "string" + }, + "editMessage": { + "$ref": "#/definitions/receive.EditMessage" + }, + "expiresInSeconds": { + "type": "integer" + }, + "groupInfo": { + "$ref": "#/definitions/receive.GroupInfo" + }, + "isExpirationUpdate": { + "type": "boolean" + }, + "mentions": { + "items": { + "$ref": "#/definitions/receive.Mention" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "payment": { + "$ref": "#/definitions/receive.Payment" + }, + "pinMessage": { + "$ref": "#/definitions/receive.PinMessage" + }, + "pollCreate": { + "$ref": "#/definitions/receive.PollCreate" + }, + "pollTerminate": { + "$ref": "#/definitions/receive.PollTerminate" + }, + "pollVote": { + "$ref": "#/definitions/receive.PollVote" + }, + "previews": { + "items": { + "$ref": "#/definitions/receive.Preview" + }, + "type": "array" + }, + "quote": { + "$ref": "#/definitions/receive.Quote" + }, + "reaction": { + "$ref": "#/definitions/receive.Reaction" + }, + "remoteDelete": { + "$ref": "#/definitions/receive.RemoteDelete" + }, + "sticker": { + "$ref": "#/definitions/receive.Sticker" + }, + "storyContext": { + "$ref": "#/definitions/receive.StoryContext" + }, + "textStyles": { + "items": { + "$ref": "#/definitions/receive.TextStyle" + }, + "type": "array" + }, + "timestamp": { + "type": "integer" + }, + "unpinMessage": { + "$ref": "#/definitions/receive.UnpinMessage" + }, + "viewOnce": { + "type": "boolean" + } + }, + "type": "object" + }, + "receive.SyncMessage": { + "properties": { + "blockedGroupIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "blockedNumbers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "readMessages": { + "items": { + "$ref": "#/definitions/receive.SyncReadMessage" + }, + "type": "array" + }, + "sentMessage": { + "$ref": "#/definitions/receive.SyncDataMessage" + }, + "sentStoryMessage": { + "$ref": "#/definitions/receive.SyncStoryMessage" + }, + "type": { + "enum": [ + "CONTACTS_SYNC", + "GROUPS_SYNC", + "REQUEST_SYNC" + ], + "type": "string" + } + }, + "type": "object" + }, + "receive.SyncReadMessage": { + "properties": { + "sender": { + "type": "string" + }, + "senderNumber": { + "type": "string" + }, + "senderUuid": { + "type": "string" + }, + "timestamp": { + "type": "integer" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.SyncStoryMessage": { + "properties": { + "allowsReplies": { + "type": "boolean" + }, + "destinationNumber": { + "type": "string" + }, + "destinationUuid": { + "type": "string" + }, + "fileAttachment": { + "$ref": "#/definitions/receive.Attachment" + }, + "groupId": { + "type": "string" + }, + "textAttachment": { + "properties": { + "backgroundColor": { + "type": "string" + }, + "backgroundGradient": { + "properties": { + "angle": { + "type": "integer" + }, + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "endColor": { + "type": "string" + }, + "positions": { + "items": { + "type": "number" + }, + "type": "array" + }, + "startColor": { + "type": "string" + } + }, + "type": "object" + }, + "preview": { + "$ref": "#/definitions/receive.Preview" + }, + "style": { + "type": "string" + }, + "text": { + "type": "string" + }, + "textBackgroundColor": { + "type": "string" + }, + "textForegroundColor": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "receive.TextStyle": { + "properties": { + "length": { + "type": "integer" + }, + "start": { + "type": "integer" + }, + "style": { + "type": "string" + } + }, + "required": [ + "start", + "length" + ], + "type": "object" + }, + "receive.TypingMessage": { + "properties": { + "action": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "timestamp": { + "type": "integer" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.UnpinMessage": { + "properties": { + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" } }, "tags": [ diff --git a/src/docs/swagger.json b/src/docs/swagger.json index e8fbd6f..b5882d8 100644 --- a/src/docs/swagger.json +++ b/src/docs/swagger.json @@ -2187,10 +2187,7 @@ "200": { "description": "OK", "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/definitions/data.Message" } }, "400": { @@ -2787,6 +2784,14 @@ }, "api.CreateGroupRequest": { "type": "object", + "required": [ + "description", + "expiration_time", + "group_link", + "members", + "name", + "permissions" + ], "properties": { "description": { "type": "string" @@ -2830,6 +2835,7 @@ "api.CreatePollRequest": { "type": "object", "required": [ + "allow_multiple_selections", "answers", "question", "recipient" @@ -2874,6 +2880,9 @@ }, "api.DeleteLocalAccountDataRequest": { "type": "object", + "required": [ + "ignore_registered" + ], "properties": { "ignore_registered": { "type": "boolean", @@ -2917,6 +2926,7 @@ "api.PinMessageInGroupRequest": { "type": "object", "required": [ + "duration", "target_author", "timestamp" ], @@ -2974,6 +2984,10 @@ }, "api.RegisterNumberRequest": { "type": "object", + "required": [ + "captcha", + "use_voice" + ], "properties": { "captcha": { "type": "string" @@ -3012,6 +3026,7 @@ "api.RemoveReactionRequest": { "type": "object", "required": [ + "reaction", "recipient", "target_author", "timestamp" @@ -3050,6 +3065,7 @@ "type": "object", "required": [ "account", + "challenge_tokens", "error" ], "properties": { @@ -3081,6 +3097,8 @@ "api.SendMessageV1": { "type": "object", "required": [ + "base64_attachment", + "is_group", "message", "number", "recipients" @@ -3110,9 +3128,21 @@ "api.SendMessageV2": { "type": "object", "required": [ + "base64_attachments", + "edit_timestamp", + "link_preview", + "mentions", "message", + "notify_self", "number", - "recipients" + "quote_author", + "quote_mentions", + "quote_message", + "quote_timestamp", + "recipients", + "sticker", + "text_mode", + "view_once" ], "properties": { "base64_attachments": { @@ -3231,6 +3261,10 @@ }, "api.TrustIdentityRequest": { "type": "object", + "required": [ + "trust_all_known_keys", + "verified_safety_number" + ], "properties": { "trust_all_known_keys": { "type": "boolean", @@ -3291,6 +3325,10 @@ }, "api.UnregisterNumberRequest": { "type": "object", + "required": [ + "delete_account", + "delete_local_data" + ], "properties": { "delete_account": { "type": "boolean", @@ -3304,6 +3342,10 @@ }, "api.UpdateAccountSettingsRequest": { "type": "object", + "required": [ + "discoverable_by_number", + "share_number" + ], "properties": { "discoverable_by_number": { "type": "boolean" @@ -3316,6 +3358,8 @@ "api.UpdateContactRequest": { "type": "object", "required": [ + "expiration_in_seconds", + "name", "recipient" ], "properties": { @@ -3332,6 +3376,14 @@ }, "api.UpdateGroupRequest": { "type": "object", + "required": [ + "base64_avatar", + "description", + "expiration_time", + "group_link", + "name", + "permissions" + ], "properties": { "base64_avatar": { "type": "string" @@ -3361,6 +3413,8 @@ "api.UpdateProfileRequest": { "type": "object", "required": [ + "about", + "base64_avatar", "name" ], "properties": { @@ -3377,6 +3431,9 @@ }, "api.VerifyNumberSettings": { "type": "object", + "required": [ + "pin" + ], "properties": { "pin": { "type": "string" @@ -3783,6 +3840,1284 @@ "type": "integer" } } + }, + "data.Message": { + "properties": { + "account": { + "type": "string" + }, + "envelope": { + "$ref": "#/definitions/receive.MessageEnvelope" + } + }, + "required": [ + "account", + "envelope" + ], + "type": "object" + }, + "receive.AdminDelete": { + "properties": { + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" + }, + "receive.Attachment": { + "properties": { + "caption": { + "type": "string" + }, + "contentType": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "uploadTimestamp": { + "type": "integer" + }, + "width": { + "type": "integer" + } + }, + "type": "object" + }, + "receive.AttachmentData": { + "properties": { + "data": { + "type": "string" + } + }, + "type": "object" + }, + "receive.CallMessage": { + "properties": { + "answerMessage": { + "properties": { + "id": { + "type": "integer" + }, + "opaque": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "busyMessage": { + "properties": { + "id": { + "type": "integer" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "hangupMessage": { + "properties": { + "deviceId": { + "type": "integer" + }, + "id": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id", + "deviceId" + ], + "type": "object" + }, + "iceUpdateMessages": { + "items": { + "properties": { + "id": { + "type": "integer" + }, + "opaque": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "offerMessage": { + "properties": { + "id": { + "type": "integer" + }, + "opaque": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + } + }, + "type": "object" + }, + "receive.Contact": { + "properties": { + "color": { + "type": "string" + }, + "familyName": { + "type": "string" + }, + "givenName": { + "type": "string" + }, + "internal": { + "$ref": "#/definitions/receive.Internal" + }, + "isArchived": { + "type": "boolean" + }, + "isBlocked": { + "type": "boolean" + }, + "isHidden": { + "type": "boolean" + }, + "messageExpirationTime": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "nickFamilyName": { + "type": "string" + }, + "nickGivenName": { + "type": "string" + }, + "nickName": { + "type": "string" + }, + "note": { + "type": "string" + }, + "number": { + "type": "string" + }, + "profile": { + "$ref": "#/definitions/receive.Profile" + }, + "profileSharing": { + "type": "boolean" + }, + "unregistered": { + "type": "boolean" + }, + "username": { + "type": "string" + }, + "uuid": { + "type": "string" + } + }, + "required": [ + "isArchived", + "isBlocked", + "isHidden", + "messageExpirationTime", + "profileSharing", + "unregistered" + ], + "type": "object" + }, + "receive.ContactAddress": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "label": { + "type": "string" + }, + "neighborhood": { + "type": "string" + }, + "pobox": { + "type": "string" + }, + "postcode": { + "type": "string" + }, + "region": { + "type": "string" + }, + "street": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "receive.ContactAvatar": { + "properties": { + "attachment": { + "$ref": "#/definitions/receive.Attachment" + }, + "isProfile": { + "type": "boolean" + } + }, + "required": [ + "isProfile" + ], + "type": "object" + }, + "receive.ContactEmail": { + "properties": { + "label": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "receive.ContactName": { + "properties": { + "family": { + "type": "string" + }, + "given": { + "type": "string" + }, + "middle": { + "type": "string" + }, + "nickname": { + "type": "string" + }, + "prefix": { + "type": "string" + }, + "suffix": { + "type": "string" + } + }, + "type": "object" + }, + "receive.ContactPhone": { + "properties": { + "label": { + "type": "string" + }, + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "receive.DataMessage": { + "properties": { + "adminDelete": { + "$ref": "#/definitions/receive.AdminDelete" + }, + "attachments": { + "items": { + "$ref": "#/definitions/receive.Attachment" + }, + "type": "array" + }, + "contacts": { + "items": { + "$ref": "#/definitions/receive.SharedContact" + }, + "type": "array" + }, + "expiresInSeconds": { + "type": "integer" + }, + "groupInfo": { + "$ref": "#/definitions/receive.GroupInfo" + }, + "isExpirationUpdate": { + "type": "boolean" + }, + "mentions": { + "items": { + "$ref": "#/definitions/receive.Mention" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "payment": { + "$ref": "#/definitions/receive.Payment" + }, + "pinMessage": { + "$ref": "#/definitions/receive.PinMessage" + }, + "pollCreate": { + "$ref": "#/definitions/receive.PollCreate" + }, + "pollTerminate": { + "$ref": "#/definitions/receive.PollTerminate" + }, + "pollVote": { + "$ref": "#/definitions/receive.PollVote" + }, + "previews": { + "items": { + "$ref": "#/definitions/receive.Preview" + }, + "type": "array" + }, + "quote": { + "$ref": "#/definitions/receive.Quote" + }, + "reaction": { + "$ref": "#/definitions/receive.Reaction" + }, + "remoteDelete": { + "$ref": "#/definitions/receive.RemoteDelete" + }, + "sticker": { + "$ref": "#/definitions/receive.Sticker" + }, + "storyContext": { + "$ref": "#/definitions/receive.StoryContext" + }, + "textStyles": { + "items": { + "$ref": "#/definitions/receive.TextStyle" + }, + "type": "array" + }, + "timestamp": { + "type": "integer" + }, + "unpinMessage": { + "$ref": "#/definitions/receive.UnpinMessage" + }, + "viewOnce": { + "type": "boolean" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.EditMessage": { + "properties": { + "dataMessage": { + "$ref": "#/definitions/receive.DataMessage" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" + }, + "receive.Error": { + "properties": { + "message": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "receive.GroupInfo": { + "properties": { + "groupId": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "revision": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "required": [ + "revision" + ], + "type": "object" + }, + "receive.Internal": { + "properties": { + "capabilities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "discoverableByPhonenumber": { + "type": "boolean" + }, + "sharesPhoneNumber": { + "type": "boolean" + }, + "unidentifiedAccessMode": { + "type": "string" + } + }, + "type": "object" + }, + "receive.Mention": { + "properties": { + "length": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "number": { + "type": "string" + }, + "start": { + "type": "integer" + }, + "uuid": { + "type": "string" + } + }, + "required": [ + "start", + "length" + ], + "type": "object" + }, + "receive.MessageEnvelope": { + "properties": { + "callMessage": { + "$ref": "#/definitions/receive.CallMessage" + }, + "dataMessage": { + "$ref": "#/definitions/receive.DataMessage" + }, + "editMessage": { + "$ref": "#/definitions/receive.EditMessage" + }, + "receiptMessage": { + "$ref": "#/definitions/receive.ReceiptMessage" + }, + "serverDeliveredTimestamp": { + "type": "integer" + }, + "serverReceivedTimestamp": { + "type": "integer" + }, + "source": { + "type": "string" + }, + "sourceDevice": { + "type": "integer" + }, + "sourceName": { + "type": "string" + }, + "sourceNumber": { + "type": "string" + }, + "sourceUuid": { + "type": "string" + }, + "storyMessage": { + "$ref": "#/definitions/receive.StoryMessage" + }, + "syncMessage": { + "$ref": "#/definitions/receive.SyncMessage" + }, + "timestamp": { + "type": "integer" + }, + "typingMessage": { + "$ref": "#/definitions/receive.TypingMessage" + } + }, + "required": [ + "timestamp", + "serverReceivedTimestamp", + "serverDeliveredTimestamp" + ], + "type": "object" + }, + "receive.Payment": { + "properties": { + "note": { + "type": "string" + }, + "receipt": { + "type": "string" + } + }, + "required": [ + "receipt" + ], + "type": "object" + }, + "receive.PinMessage": { + "properties": { + "pinDurationSeconds": { + "type": "integer" + }, + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp", + "pinDurationSeconds" + ], + "type": "object" + }, + "receive.PollCreate": { + "properties": { + "allowMultiple": { + "type": "boolean" + }, + "options": { + "items": { + "type": "string" + }, + "type": "array" + }, + "question": { + "type": "string" + } + }, + "required": [ + "allowMultiple" + ], + "type": "object" + }, + "receive.PollTerminate": { + "properties": { + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" + }, + "receive.PollVote": { + "properties": { + "author": { + "type": "string" + }, + "authorNumber": { + "type": "string" + }, + "authorUuid": { + "type": "string" + }, + "optionIndexes": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "targetSentTimestamp": { + "type": "integer" + }, + "voteCount": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp", + "voteCount" + ], + "type": "object" + }, + "receive.Preview": { + "properties": { + "description": { + "type": "string" + }, + "image": { + "$ref": "#/definitions/receive.Attachment" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "receive.Profile": { + "properties": { + "about": { + "type": "string" + }, + "aboutEmoji": { + "type": "string" + }, + "familyName": { + "type": "string" + }, + "givenName": { + "type": "string" + }, + "hasAvatar": { + "type": "boolean" + }, + "lastUpdateTimestamp": { + "type": "integer" + }, + "mobileCoinAddress": { + "type": "string" + } + }, + "required": [ + "lastUpdateTimestamp", + "hasAvatar" + ], + "type": "object" + }, + "receive.Quote": { + "properties": { + "attachments": { + "items": { + "$ref": "#/definitions/receive.QuotedAttachment" + }, + "type": "array" + }, + "author": { + "type": "string" + }, + "authorNumber": { + "type": "string" + }, + "authorUuid": { + "type": "string" + }, + "id": { + "type": "integer" + }, + "mentions": { + "items": { + "$ref": "#/definitions/receive.Mention" + }, + "type": "array" + }, + "text": { + "type": "string" + }, + "textStyles": { + "items": { + "$ref": "#/definitions/receive.TextStyle" + }, + "type": "array" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "receive.QuotedAttachment": { + "properties": { + "contentType": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "thumbnail": { + "$ref": "#/definitions/receive.Attachment" + } + }, + "type": "object" + }, + "receive.Reaction": { + "properties": { + "emoji": { + "type": "string" + }, + "isRemove": { + "type": "boolean" + }, + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp", + "isRemove" + ], + "type": "object" + }, + "receive.ReceiptMessage": { + "properties": { + "isDelivery": { + "type": "boolean" + }, + "isRead": { + "type": "boolean" + }, + "isViewed": { + "type": "boolean" + }, + "timestamps": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "when": { + "type": "integer" + } + }, + "required": [ + "when", + "isDelivery", + "isRead", + "isViewed" + ], + "type": "object" + }, + "receive.RecipientAddress": { + "properties": { + "number": { + "type": "string" + }, + "username": { + "type": "string" + }, + "uuid": { + "type": "string" + } + }, + "type": "object" + }, + "receive.RemoteDelete": { + "properties": { + "timestamp": { + "type": "integer" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.SendMessageResult": { + "properties": { + "groupId": { + "type": "string" + }, + "recipientAddress": { + "$ref": "#/definitions/receive.RecipientAddress" + }, + "retryAfterSeconds": { + "type": "integer" + }, + "token": { + "type": "string" + }, + "type": { + "enum": [ + "SUCCESS", + "NETWORK_FAILURE", + "UNREGISTERED_FAILURE", + "IDENTITY_FAILURE", + "RATE_LIMIT_FAILURE", + "INVALID_PRE_KEY_FAILURE" + ], + "type": "string" + } + }, + "type": "object" + }, + "receive.SharedContact": { + "properties": { + "address": { + "items": { + "$ref": "#/definitions/receive.ContactAddress" + }, + "type": "array" + }, + "avatar": { + "$ref": "#/definitions/receive.ContactAvatar" + }, + "email": { + "items": { + "$ref": "#/definitions/receive.ContactEmail" + }, + "type": "array" + }, + "name": { + "$ref": "#/definitions/receive.ContactName" + }, + "organization": { + "type": "string" + }, + "phone": { + "items": { + "$ref": "#/definitions/receive.ContactPhone" + }, + "type": "array" + } + }, + "type": "object" + }, + "receive.Sticker": { + "properties": { + "packId": { + "type": "string" + }, + "stickerId": { + "type": "integer" + } + }, + "required": [ + "stickerId" + ], + "type": "object" + }, + "receive.StoryContext": { + "properties": { + "authorNumber": { + "type": "string" + }, + "authorUuid": { + "type": "string" + }, + "sentTimestamp": { + "type": "integer" + } + }, + "required": [ + "sentTimestamp" + ], + "type": "object" + }, + "receive.StoryMessage": { + "properties": { + "allowsReplies": { + "type": "boolean" + }, + "fileAttachment": { + "$ref": "#/definitions/receive.Attachment" + }, + "groupId": { + "type": "string" + }, + "textAttachment": { + "properties": { + "backgroundColor": { + "type": "string" + }, + "backgroundGradient": { + "properties": { + "angle": { + "type": "integer" + }, + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "endColor": { + "type": "string" + }, + "positions": { + "items": { + "type": "number" + }, + "type": "array" + }, + "startColor": { + "type": "string" + } + }, + "type": "object" + }, + "preview": { + "$ref": "#/definitions/receive.Preview" + }, + "style": { + "type": "string" + }, + "text": { + "type": "string" + }, + "textBackgroundColor": { + "type": "string" + }, + "textForegroundColor": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "allowsReplies" + ], + "type": "object" + }, + "receive.SyncDataMessage": { + "properties": { + "adminDelete": { + "$ref": "#/definitions/receive.AdminDelete" + }, + "attachments": { + "items": { + "$ref": "#/definitions/receive.Attachment" + }, + "type": "array" + }, + "contacts": { + "items": { + "$ref": "#/definitions/receive.SharedContact" + }, + "type": "array" + }, + "destination": { + "type": "string" + }, + "destinationNumber": { + "type": "string" + }, + "destinationUuid": { + "type": "string" + }, + "editMessage": { + "$ref": "#/definitions/receive.EditMessage" + }, + "expiresInSeconds": { + "type": "integer" + }, + "groupInfo": { + "$ref": "#/definitions/receive.GroupInfo" + }, + "isExpirationUpdate": { + "type": "boolean" + }, + "mentions": { + "items": { + "$ref": "#/definitions/receive.Mention" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "payment": { + "$ref": "#/definitions/receive.Payment" + }, + "pinMessage": { + "$ref": "#/definitions/receive.PinMessage" + }, + "pollCreate": { + "$ref": "#/definitions/receive.PollCreate" + }, + "pollTerminate": { + "$ref": "#/definitions/receive.PollTerminate" + }, + "pollVote": { + "$ref": "#/definitions/receive.PollVote" + }, + "previews": { + "items": { + "$ref": "#/definitions/receive.Preview" + }, + "type": "array" + }, + "quote": { + "$ref": "#/definitions/receive.Quote" + }, + "reaction": { + "$ref": "#/definitions/receive.Reaction" + }, + "remoteDelete": { + "$ref": "#/definitions/receive.RemoteDelete" + }, + "sticker": { + "$ref": "#/definitions/receive.Sticker" + }, + "storyContext": { + "$ref": "#/definitions/receive.StoryContext" + }, + "textStyles": { + "items": { + "$ref": "#/definitions/receive.TextStyle" + }, + "type": "array" + }, + "timestamp": { + "type": "integer" + }, + "unpinMessage": { + "$ref": "#/definitions/receive.UnpinMessage" + }, + "viewOnce": { + "type": "boolean" + } + }, + "type": "object" + }, + "receive.SyncMessage": { + "properties": { + "blockedGroupIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "blockedNumbers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "readMessages": { + "items": { + "$ref": "#/definitions/receive.SyncReadMessage" + }, + "type": "array" + }, + "sentMessage": { + "$ref": "#/definitions/receive.SyncDataMessage" + }, + "sentStoryMessage": { + "$ref": "#/definitions/receive.SyncStoryMessage" + }, + "type": { + "enum": [ + "CONTACTS_SYNC", + "GROUPS_SYNC", + "REQUEST_SYNC" + ], + "type": "string" + } + }, + "type": "object" + }, + "receive.SyncReadMessage": { + "properties": { + "sender": { + "type": "string" + }, + "senderNumber": { + "type": "string" + }, + "senderUuid": { + "type": "string" + }, + "timestamp": { + "type": "integer" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.SyncStoryMessage": { + "properties": { + "allowsReplies": { + "type": "boolean" + }, + "destinationNumber": { + "type": "string" + }, + "destinationUuid": { + "type": "string" + }, + "fileAttachment": { + "$ref": "#/definitions/receive.Attachment" + }, + "groupId": { + "type": "string" + }, + "textAttachment": { + "properties": { + "backgroundColor": { + "type": "string" + }, + "backgroundGradient": { + "properties": { + "angle": { + "type": "integer" + }, + "colors": { + "items": { + "type": "string" + }, + "type": "array" + }, + "endColor": { + "type": "string" + }, + "positions": { + "items": { + "type": "number" + }, + "type": "array" + }, + "startColor": { + "type": "string" + } + }, + "type": "object" + }, + "preview": { + "$ref": "#/definitions/receive.Preview" + }, + "style": { + "type": "string" + }, + "text": { + "type": "string" + }, + "textBackgroundColor": { + "type": "string" + }, + "textForegroundColor": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "receive.TextStyle": { + "properties": { + "length": { + "type": "integer" + }, + "start": { + "type": "integer" + }, + "style": { + "type": "string" + } + }, + "required": [ + "start", + "length" + ], + "type": "object" + }, + "receive.TypingMessage": { + "properties": { + "action": { + "type": "string" + }, + "groupId": { + "type": "string" + }, + "timestamp": { + "type": "integer" + } + }, + "required": [ + "timestamp" + ], + "type": "object" + }, + "receive.UnpinMessage": { + "properties": { + "targetAuthor": { + "type": "string" + }, + "targetAuthorNumber": { + "type": "string" + }, + "targetAuthorUuid": { + "type": "string" + }, + "targetSentTimestamp": { + "type": "integer" + } + }, + "required": [ + "targetSentTimestamp" + ], + "type": "object" } }, "tags": [ diff --git a/src/docs/swagger.yaml b/src/docs/swagger.yaml deleted file mode 100644 index 0d10fc6..0000000 --- a/src/docs/swagger.yaml +++ /dev/null @@ -1,2590 +0,0 @@ -basePath: / -definitions: - api.AddDeviceRequest: - properties: - uri: - type: string - required: - - uri - type: object - api.AddStickerPackRequest: - properties: - pack_id: - example: 9a32eda01a7a28574f2eb48668ae0dc4 - type: string - pack_key: - example: 19546e18eba0ff69dea78eb591465289d39e16f35e58389ae779d4f9455aff3a - type: string - required: - - pack_id - - pack_key - type: object - api.ChangeGroupAdminsRequest: - properties: - admins: - items: - type: string - type: array - required: - - admins - type: object - api.ChangeGroupMembersRequest: - properties: - members: - items: - type: string - type: array - required: - - members - type: object - api.ClosePollRequest: - properties: - poll_timestamp: - example: "1769271479" - type: string - recipient: - example: OR OR - type: string - required: - - poll_timestamp - - recipient - type: object - api.Configuration: - properties: - logging: - $ref: '#/definitions/api.LoggingConfiguration' - required: - - logging - type: object - api.CreateGroupRequest: - properties: - description: - type: string - expiration_time: - type: integer - group_link: - enum: - - disabled - - enabled - - enabled-with-approval - type: string - members: - items: - type: string - type: array - name: - type: string - permissions: - $ref: '#/definitions/data.GroupPermissions' - type: object - api.CreateGroupResponse: - properties: - id: - type: string - required: - - id - type: object - api.CreatePollRequest: - properties: - allow_multiple_selections: - example: true - type: boolean - answers: - example: - - apple - - banana - - orange - items: - type: string - type: array - question: - example: What's your favourite fruit? - type: string - recipient: - example: OR OR - type: string - required: - - answers - - question - - recipient - type: object - api.CreatePollResponse: - properties: - timestamp: - example: "1769271479" - type: string - required: - - timestamp - type: object - api.DeleteLocalAccountDataRequest: - properties: - ignore_registered: - example: false - type: boolean - type: object - api.DeviceLinkUriResponse: - properties: - device_link_uri: - type: string - required: - - device_link_uri - type: object - api.Error: - properties: - error: - type: string - required: - - error - type: object - api.LoggingConfiguration: - properties: - Level: - type: string - required: - - Level - type: object - api.PinMessageInGroupRequest: - properties: - duration: - type: integer - target_author: - type: string - timestamp: - type: integer - required: - - target_author - - timestamp - type: object - api.RateLimitChallengeRequest: - properties: - captcha: - example: signalcaptcha://{captcha value} - type: string - challenge_token: - example: - type: string - required: - - captcha - - challenge_token - type: object - api.Receipt: - properties: - receipt_type: - enum: - - read - - viewed - type: string - recipient: - type: string - timestamp: - type: integer - required: - - receipt_type - - recipient - - timestamp - type: object - api.RegisterNumberRequest: - properties: - captcha: - type: string - use_voice: - type: boolean - type: object - api.RemoteDeleteRequest: - properties: - recipient: - type: string - timestamp: - type: integer - required: - - recipient - - timestamp - type: object - api.RemoteDeleteResponse: - properties: - timestamp: - type: string - required: - - timestamp - type: object - api.RemoveReactionRequest: - properties: - reaction: - type: string - recipient: - type: string - target_author: - type: string - timestamp: - type: integer - required: - - recipient - - target_author - - timestamp - type: object - api.SearchResponse: - properties: - number: - type: string - registered: - type: boolean - required: - - number - - registered - type: object - api.SendMessageError: - properties: - account: - type: string - challenge_tokens: - items: - type: string - type: array - error: - type: string - required: - - account - - error - type: object - api.SendMessageResponse: - properties: - timestamp: - type: string - required: - - timestamp - type: object - api.SendMessageV1: - properties: - base64_attachment: - example: ''''' OR ''data:;base64,'' OR ''data:;filename=;base64,''' - type: string - is_group: - type: boolean - message: - type: string - number: - type: string - recipients: - items: - type: string - type: array - required: - - message - - number - - recipients - type: object - api.SendMessageV2: - properties: - base64_attachments: - example: - - - - data:;base64 - - data:;filename=;base64 - items: - type: string - type: array - edit_timestamp: - type: integer - link_preview: - $ref: '#/definitions/data.LinkPreviewType' - mentions: - items: - $ref: '#/definitions/data.MessageMention' - type: array - message: - type: string - notify_self: - type: boolean - number: - type: string - quote_author: - type: string - quote_mentions: - items: - $ref: '#/definitions/data.MessageMention' - type: array - quote_message: - type: string - quote_timestamp: - type: integer - recipients: - items: - type: string - type: array - sticker: - type: string - text_mode: - enum: - - normal - - styled - type: string - view_once: - type: boolean - required: - - message - - number - - recipients - type: object - api.SendReactionRequest: - properties: - reaction: - type: string - recipient: - type: string - target_author: - type: string - timestamp: - type: integer - required: - - reaction - - recipient - - target_author - - timestamp - type: object - api.SetPinRequest: - properties: - pin: - type: string - required: - - pin - type: object - api.SetUsernameRequest: - properties: - username: - example: test - type: string - required: - - username - type: object - api.TrustIdentityRequest: - properties: - trust_all_known_keys: - example: false - type: boolean - verified_safety_number: - type: string - type: object - api.TrustModeRequest: - properties: - trust_mode: - type: string - required: - - trust_mode - type: object - api.TrustModeResponse: - properties: - trust_mode: - type: string - required: - - trust_mode - type: object - api.TypingIndicatorRequest: - properties: - recipient: - type: string - required: - - recipient - type: object - api.UnpinMessageInGroupRequest: - properties: - target_author: - type: string - timestamp: - type: integer - required: - - target_author - - timestamp - type: object - api.UnregisterNumberRequest: - properties: - delete_account: - example: false - type: boolean - delete_local_data: - example: false - type: boolean - type: object - api.UpdateAccountSettingsRequest: - properties: - discoverable_by_number: - type: boolean - share_number: - type: boolean - type: object - api.UpdateContactRequest: - properties: - expiration_in_seconds: - type: integer - name: - type: string - recipient: - type: string - required: - - recipient - type: object - api.UpdateGroupRequest: - properties: - base64_avatar: - type: string - description: - type: string - expiration_time: - type: integer - group_link: - enum: - - disabled - - enabled - - enabled-with-approval - type: string - name: - type: string - permissions: - $ref: '#/definitions/data.GroupPermissions' - type: object - api.UpdateProfileRequest: - properties: - about: - type: string - base64_avatar: - type: string - name: - type: string - required: - - name - type: object - api.VerifyNumberSettings: - properties: - pin: - type: string - type: object - api.VoteRequest: - properties: - poll_author: - example: OR - type: string - poll_timestamp: - example: "1769271479" - type: string - recipient: - example: OR OR - type: string - selected_answers: - example: - - 1 - items: - type: integer - type: array - required: - - poll_author - - poll_timestamp - - recipient - - selected_answers - type: object - client.About: - properties: - build: - type: integer - capabilities: - additionalProperties: - items: - type: string - type: array - type: object - mode: - type: string - version: - type: string - versions: - items: - type: string - type: array - required: - - build - - capabilities - - mode - - version - - versions - type: object - client.ContactProfile: - properties: - about: - type: string - given_name: - type: string - has_avatar: - type: boolean - last_updated_timestamp: - type: integer - lastname: - type: string - required: - - about - - given_name - - has_avatar - - last_updated_timestamp - - lastname - type: object - client.GroupEntry: - properties: - admins: - items: - type: string - type: array - blocked: - type: boolean - description: - type: string - id: - type: string - internal_id: - type: string - invite_link: - type: string - members: - items: - type: string - type: array - name: - type: string - pending_invites: - items: - type: string - type: array - pending_requests: - items: - type: string - type: array - permissions: - $ref: '#/definitions/data.GroupPermissions' - required: - - admins - - blocked - - description - - id - - internal_id - - invite_link - - members - - name - - pending_invites - - pending_requests - - permissions - type: object - client.IdentityEntry: - properties: - added: - type: string - fingerprint: - type: string - number: - type: string - safety_number: - type: string - status: - type: string - uuid: - type: string - required: - - added - - fingerprint - - number - - safety_number - - status - - uuid - type: object - client.ListContactsResponse: - properties: - blocked: - type: boolean - color: - type: string - given_name: - type: string - message_expiration: - type: string - name: - type: string - nickname: - $ref: '#/definitions/client.Nickname' - note: - type: string - number: - type: string - profile: - $ref: '#/definitions/client.ContactProfile' - profile_name: - type: string - username: - type: string - uuid: - type: string - required: - - blocked - - color - - given_name - - message_expiration - - name - - nickname - - note - - number - - profile - - profile_name - - username - - uuid - type: object - client.ListDevicesResponse: - properties: - creation_timestamp: - type: integer - id: - type: integer - last_seen_timestamp: - type: integer - name: - type: string - required: - - creation_timestamp - - id - - last_seen_timestamp - - name - type: object - client.ListInstalledStickerPacksResponse: - properties: - author: - type: string - installed: - type: boolean - pack_id: - type: string - title: - type: string - url: - type: string - required: - - author - - installed - - pack_id - - title - - url - type: object - client.Nickname: - properties: - family_name: - type: string - given_name: - type: string - name: - type: string - required: - - family_name - - given_name - - name - type: object - client.SetUsernameResponse: - properties: - username: - type: string - username_link: - type: string - required: - - username - - username_link - type: object - data.GroupPermissions: - properties: - add_members: - enum: - - only-admins - - every-member - type: string - edit_group: - enum: - - only-admins - - every-member - type: string - send_messages: - enum: - - only-admins - - every-member - type: string - required: - - add_members - - edit_group - - send_messages - type: object - data.LinkPreviewType: - properties: - base64_thumbnail: - type: string - description: - type: string - title: - type: string - url: - type: string - required: - - base64_thumbnail - - description - - title - - url - type: object - data.MessageMention: - properties: - author: - type: string - length: - type: integer - start: - type: integer - required: - - author - - length - - start - type: object -host: localhost:8080 -info: - contact: {} - description: This is the Signal Cli REST API documentation. - title: Signal Cli REST API - version: "1.0" -paths: - /v1/about: - get: - description: Returns the supported API versions and the internal build nr - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/client.About' - summary: Lists general information about the API - tags: - - General - /v1/accounts: - get: - description: Lists all of the accounts linked or registered - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - type: string - type: array - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List all accounts - tags: - - Accounts - /v1/accounts/{number}/pin: - delete: - description: Removes a Signal Pin - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Remove Pin - tags: - - Accounts - post: - description: Sets a new Signal Pin - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.SetPinRequest' - produces: - - application/json - responses: - "201": - description: Created - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Set Pin - tags: - - Accounts - /v1/accounts/{number}/rate-limit-challenge: - post: - consumes: - - application/json - description: 'When running into rate limits, sometimes the limit can be lifted, - by solving a CAPTCHA. To get the captcha token, go to https://signalcaptchas.org/challenge/generate.html - For the staging environment, use: https://signalcaptchas.org/staging/registration/generate.html. - The "challenge_token" is the token from the failed send attempt. The "captcha" - is the captcha result, starting with signalcaptcha://' - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.RateLimitChallengeRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Lift rate limit restrictions by solving a captcha. - tags: - - Accounts - /v1/accounts/{number}/settings: - put: - consumes: - - application/json - description: Update the account attributes on the signal server. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.UpdateAccountSettingsRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Update the account settings. - tags: - - Accounts - /v1/accounts/{number}/username: - delete: - consumes: - - application/json - description: Delete the username associated with this account. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Remove a username. - tags: - - Accounts - post: - consumes: - - application/json - description: Allows to set the username that should be used for this account. - This can either be just the nickname (e.g. test) or the complete username - with discriminator (e.g. test.123). Returns the new username with discriminator - and the username link. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.SetUsernameRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/client.SetUsernameResponse' - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Set a username. - tags: - - Accounts - /v1/attachments: - get: - description: List all downloaded attachments - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - type: string - type: array - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List all attachments. - tags: - - Attachments - /v1/attachments/{attachment}: - delete: - description: Remove the attachment with the given id from filesystem. - parameters: - - description: Attachment ID - in: path - name: attachment - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Remove attachment. - tags: - - Attachments - get: - description: Serve the attachment with the given id - parameters: - - description: Attachment ID - in: path - name: attachment - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Serve Attachment. - tags: - - Attachments - /v1/configuration: - get: - consumes: - - application/json - description: List the REST API configuration. - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/api.Configuration' - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List the REST API configuration. - tags: - - General - post: - consumes: - - application/json - description: Set the REST API configuration. - parameters: - - description: Configuration - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.Configuration' - produces: - - application/json - responses: - "204": - description: OK - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Set the REST API configuration. - tags: - - General - /v1/configuration/{number}/settings: - get: - consumes: - - application/json - description: List account specific settings. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.TrustModeResponse' - produces: - - application/json - responses: - "200": - description: OK - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List account specific settings. - tags: - - General - post: - consumes: - - application/json - description: Set account specific settings. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.TrustModeRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Set account specific settings. - tags: - - General - /v1/contacts/{number}: - get: - description: List all contacts for the given number. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Include all known recipients, not only contacts. - in: query - name: all_recipients - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/client.ListContactsResponse' - type: array - summary: List Contacts - tags: - - Contacts - put: - consumes: - - application/json - description: Updates the info associated to a number on the contact list. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Contact - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.UpdateContactRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Updates the info associated to a number on the contact list. If the - contact doesn’t exist yet, it will be added. - tags: - - Contacts - /v1/contacts/{number}/{uuid}: - get: - description: List a specific contact. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Include all known recipients, not only contacts. - in: query - name: all_recipients - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/client.ListContactsResponse' - summary: List Contact - tags: - - Contacts - /v1/contacts/{number}/{uuid}/avatar: - get: - description: Returns the avatar of a contact. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "200": - description: Image - schema: - type: string - summary: Returns the avatar of a contact - tags: - - Contacts - /v1/contacts/{number}/sync: - post: - consumes: - - application/json - description: Send a synchronization message with the local contacts list to - all linked devices. This command should only be used if this is the primary - device. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Send a synchronization message with the local contacts list to all - linked devices. - tags: - - Contacts - /v1/devices/{number}: - get: - consumes: - - application/json - description: List linked devices associated to this device. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/client.ListDevicesResponse' - type: array - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List linked devices. - tags: - - Devices - post: - consumes: - - application/json - description: Links another device to this device. Only works, if this is the - master device. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.AddDeviceRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Links another device to this device. - tags: - - Devices - /v1/devices/{number}/{deviceId}: - delete: - description: Remove a linked device from the primary account. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Device ID from listDevices - in: path - name: deviceId - required: true - type: integer - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Remove linked device - tags: - - Devices - /v1/devices/{number}/local-data: - delete: - consumes: - - application/json - description: Delete all local data for the specified account. Only use this - after unregistering the account or after removing a linked device. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Cleanup options - in: body - name: data - schema: - $ref: '#/definitions/api.DeleteLocalAccountDataRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Delete local account data - tags: - - Devices - /v1/groups/{number}: - get: - consumes: - - application/json - description: List all Signal Groups. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: 'Expand the response to show more details (default: false)' - in: query - name: expand - type: boolean - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/client.GroupEntry' - type: array - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List all Signal Groups. - tags: - - Groups - post: - consumes: - - application/json - description: Create a new Signal Group with the specified members. - parameters: - - description: Input Data - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.CreateGroupRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/api.CreateGroupResponse' - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Create a new Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}: - delete: - consumes: - - application/json - description: Delete the specified Signal Group. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group Id - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Delete a Signal Group. - tags: - - Groups - get: - consumes: - - application/json - description: List a specific Signal Group. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - - description: 'Expand the response to show more details (default: false)' - in: query - name: expand - type: boolean - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/client.GroupEntry' - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List a Signal Group. - tags: - - Groups - put: - consumes: - - application/json - description: Update the state of a Signal Group. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - - description: Input Data - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.UpdateGroupRequest' - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Update the state of a Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}/admins: - delete: - consumes: - - application/json - description: Remove one or more admins from an existing Signal Group. - parameters: - - description: Admins - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.ChangeGroupAdminsRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Remove one or more admins from an existing Signal Group. - tags: - - Groups - post: - consumes: - - application/json - description: Add one or more admins to an existing Signal Group. - parameters: - - description: Admins - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.ChangeGroupAdminsRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Add one or more admins to an existing Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}/avatar: - get: - consumes: - - application/json - description: Returns the avatar of a Signal Group. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "200": - description: Image - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Returns the avatar of a Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}/block: - post: - consumes: - - application/json - description: Block the specified Signal Group. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Block a Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}/join: - post: - consumes: - - application/json - description: Join the specified Signal Group. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Join a Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}/members: - delete: - consumes: - - application/json - description: Remove one or more members from an existing Signal Group. - parameters: - - description: Members - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.ChangeGroupMembersRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Remove one or more members from an existing Signal Group. - tags: - - Groups - post: - consumes: - - application/json - description: Add one or more members to an existing Signal Group. - parameters: - - description: Members - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.ChangeGroupMembersRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Add one or more members to an existing Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}/pin-message: - delete: - consumes: - - application/json - description: Unpin a message in a Signal Group. - parameters: - - description: Unpin - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.UnpinMessageInGroupRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group Id - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Unpin a message in a Signal Group. - tags: - - Groups - post: - consumes: - - application/json - description: Pin a message in a Signal Group. - parameters: - - description: Pin - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.PinMessageInGroupRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group Id - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Pin a message in a Signal Group. - tags: - - Groups - /v1/groups/{number}/{groupid}/quit: - post: - consumes: - - application/json - description: Quit the specified Signal Group. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Group ID - in: path - name: groupid - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Quit a Signal Group. - tags: - - Groups - /v1/health: - get: - description: Internally used by the docker container to perform the health check. - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - summary: API Health Check - tags: - - General - /v1/identities/{number}: - get: - description: List all identities for the given number. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/client.IdentityEntry' - type: array - summary: List Identities - tags: - - Identities - /v1/identities/{number}/trust/{numberToTrust}: - put: - description: Trust an identity. When 'trust_all_known_keys' is set to' true', - all known keys of this user are trusted. **This is only recommended for testing.** - parameters: - - description: Input Data - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.TrustIdentityRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Number To Trust - in: path - name: numberToTrust - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - summary: Trust Identity - tags: - - Identities - /v1/polls/{number}: - delete: - consumes: - - application/json - description: Close a poll - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Type - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.ClosePollRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Close a poll. - tags: - - Polls - post: - consumes: - - application/json - description: Create a new poll - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Type - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.CreatePollRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/api.CreatePollResponse' - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Create a new poll. - tags: - - Polls - /v1/polls/{number}/vote: - post: - consumes: - - application/json - description: Answer a poll - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Type - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.VoteRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Answer a poll. - tags: - - Polls - /v1/profiles/{number}: - put: - description: Set your name and optional an avatar. - parameters: - - description: Profile Data - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.UpdateProfileRequest' - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Update Profile. - tags: - - Profiles - /v1/qrcodelink: - get: - description: Link device and generate QR code - parameters: - - description: Device Name - in: query - name: device_name - required: true - type: string - - description: QRCode Version (defaults to 10) - in: query - name: qrcode_version - type: integer - produces: - - application/json - responses: - "200": - description: Image - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Link device and generate QR code. - tags: - - Devices - /v1/qrcodelink/raw: - get: - description: Generate the deviceLinkUri string for linking without scanning - a QR code. - parameters: - - description: Device Name - in: query - name: device_name - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - $ref: '#/definitions/api.DeviceLinkUriResponse' - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Get raw device link URI - tags: - - Devices - /v1/reactions/{number}: - delete: - consumes: - - application/json - description: Remove a reaction - parameters: - - description: Reaction - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.RemoveReactionRequest' - - description: Registered phone number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Remove a reaction. - tags: - - Reactions - post: - consumes: - - application/json - description: React to a message - parameters: - - description: Reaction - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.SendReactionRequest' - - description: Registered phone number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Send a reaction. - tags: - - Reactions - /v1/receipts/{number}: - post: - consumes: - - application/json - description: Send a read or viewed receipt - parameters: - - description: Receipt - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.Receipt' - - description: Registered phone number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Send a receipt. - tags: - - Receipts - /v1/receive/{number}: - get: - consumes: - - application/json - description: Receives Signal Messages from the Signal Network. If you are running - the docker container in normal/native mode, this is a GET endpoint. In json-rpc - mode this is a websocket endpoint. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: 'Receive timeout in seconds (default: 1)' - in: query - name: timeout - type: string - - description: Specify whether the attachments of the received message should - be ignored - in: query - name: ignore_attachments - type: string - - description: Specify whether stories should be ignored when receiving messages - in: query - name: ignore_stories - type: string - - description: Specify whether avatar downloads should be ignored when receiving - messages - in: query - name: ignore_avatars - type: string - - description: Specify whether sticker pack downloads should be ignored when - receiving messages - in: query - name: ignore_stickers - type: string - - description: 'Specify the maximum number of messages to receive (default: - unlimited)' - in: query - name: max_messages - type: string - - description: Specify whether read receipts should be sent when receiving messages - in: query - name: send_read_receipts - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - type: string - type: array - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Receive Signal Messages. - tags: - - Messages - /v1/register/{number}: - post: - consumes: - - application/json - description: Register a phone number with the signal network. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Additional Settings - in: body - name: data - schema: - $ref: '#/definitions/api.RegisterNumberRequest' - produces: - - application/json - responses: - "201": - description: Created - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Register a phone number. - tags: - - Devices - /v1/register/{number}/verify/{token}: - post: - consumes: - - application/json - description: Verify a registered phone number with the signal network. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Additional Settings - in: body - name: data - schema: - $ref: '#/definitions/api.VerifyNumberSettings' - - description: Verification Code - in: path - name: token - required: true - type: string - produces: - - application/json - responses: - "201": - description: OK - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Verify a registered phone number. - tags: - - Devices - /v1/remote-delete/{number}: - delete: - consumes: - - application/json - description: Delete a signal message - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Type - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.RemoteDeleteRequest' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/api.RemoteDeleteResponse' - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Delete a signal message. - tags: - - Messages - /v1/search/{number}: - get: - consumes: - - application/json - description: Check if one or more phone numbers are registered with the Signal - Service. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - collectionFormat: multi - description: Numbers to check - in: query - items: - type: string - name: numbers - required: true - type: array - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/api.SearchResponse' - type: array - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Check if one or more phone numbers are registered with the Signal Service. - tags: - - Search - /v1/send: - post: - consumes: - - application/json - deprecated: true - description: Send a signal message - parameters: - - description: Input Data - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.SendMessageV1' - produces: - - application/json - responses: - "201": - description: OK - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Send a signal message. - tags: - - Messages - /v1/sticker-packs/{number}: - get: - consumes: - - application/json - description: List Installed Sticker Packs. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - produces: - - application/json - responses: - "200": - description: OK - schema: - items: - $ref: '#/definitions/client.ListInstalledStickerPacksResponse' - type: array - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: List Installed Sticker Packs. - tags: - - Sticker Packs - post: - consumes: - - application/json - description: 'In order to add a sticker pack, browse to https://signalstickers.org/ - and select the sticker pack you want to add. Then, press the "Add to Signal" - button. If you look at the address bar in your browser you should see an URL - in this format: https://signal.art/addstickers/#pack_id=XXX&pack_key=YYY, - where XXX is the pack_id and YYY is the pack_key.' - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Request - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.AddStickerPackRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Add Sticker Pack. - tags: - - Sticker Packs - /v1/typing-indicator/{number}: - delete: - consumes: - - application/json - description: Hide Typing Indicator. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Type - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.TypingIndicatorRequest' - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Hide Typing Indicator. - tags: - - Messages - put: - consumes: - - application/json - description: Show Typing Indicator. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Type - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.TypingIndicatorRequest' - produces: - - application/json - responses: - "204": - description: No Content - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Show Typing Indicator. - tags: - - Messages - /v1/unregister/{number}: - post: - consumes: - - application/json - description: Disables push support for this device. **WARNING:** If *delete_account* - is set to *true*, the account will be deleted from the Signal Server. This - cannot be undone without loss. - parameters: - - description: Registered Phone Number - in: path - name: number - required: true - type: string - - description: Additional Settings - in: body - name: data - schema: - $ref: '#/definitions/api.UnregisterNumberRequest' - produces: - - application/json - responses: - "204": - description: No Content - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.Error' - summary: Unregister a phone number. - tags: - - Devices - /v2/send: - post: - consumes: - - application/json - description: 'Send a signal message. Set the text_mode to ''styled'' in case - you want to add formatting to your text message. Styling Options: \*italic - text\*, \*\*bold text\*\*, ~strikethrough text~, ||spoiler||, \`monospace\`. - If you want to escape a formatting character, prefix it with two backslashes.' - parameters: - - description: Input Data - in: body - name: data - required: true - schema: - $ref: '#/definitions/api.SendMessageV2' - produces: - - application/json - responses: - "201": - description: Created - schema: - $ref: '#/definitions/api.SendMessageResponse' - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.SendMessageError' - summary: Send a signal message. - tags: - - Messages -schemes: -- http -swagger: "2.0" -tags: -- description: Some general endpoints. - name: General -- description: Register and link Devices. - name: Devices -- description: List registered and linked accounts - name: Accounts -- description: Create, List and Delete Signal Groups. - name: Groups -- description: Send and Receive Signal Messages. - name: Messages -- description: List and Delete Attachments. - name: Attachments -- description: Update Profile. - name: Profiles -- description: List and Trust Identities. - name: Identities -- description: React to messages. - name: Reactions -- description: Send receipts for messages. - name: Receipts -- description: Search the Signal Service. - name: Search -- description: List and Install Sticker Packs - name: Sticker Packs